C# 将excel文件移动到datagridview
我有2列的excel文件(empid,empname),我必须先读取第1列的8行,然后读取第2列的8行,通过下面的代码,我得到第一列的8行,但在第二列的行或不填充,而它们只填充第一列的行。这是我的密码C# 将excel文件移动到datagridview,c#,C#,我有2列的excel文件(empid,empname),我必须先读取第1列的8行,然后读取第2列的8行,通过下面的代码,我得到第一列的8行,但在第二列的行或不填充,而它们只填充第一列的行。这是我的密码 for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++) { if (Cnum == 1) {
for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++)
{
if (Cnum == 1)
{
dt.Columns.Add((ShtRange.Cells[1, Cnum] as Excel.Range).Value2.ToString());
for (int Rnum = 1; Rnum <= 9; Rnum++)
{
dt.Rows.Add((ShtRange.Cells[Rnum, 1] as Excel.Range).Value2.ToString());
}
}}
for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++)
{
if (Cnum == 2)
{
dt.Columns.Add((ShtRange.Cells[1, Cnum] as Excel.Range).Value2.ToString());
for (int Rnum = 1; Rnum <= 9; Rnum++)
{
dt.Rows.Add((ShtRange.Cells[Rnum,2] as Excel.Range).Value2).ToString();
}
}
}
用于(int Cnum=1;Cnum如果我理解正确,问题是excel文档中第二列的值不会出现在DataGridView
控件的第二列中。这个问题源于填充网格的方式,因为您的代码实际上是将为第一列提供的值附加到行中仅限umn。以下是您的问题的简短解决方案:
dt.Columns.Add("c1", "First column");
dt.Columns.Add("c2", "Second column");
for (int Rnum = 1; Rnum <= 9; Rnum++)
{
dt.Rows.Add(
(ShtRange.Cells[Rnum, 1] as Excel.Range).Value2.ToString(),
(ShtRange.Cells[Rnum, 2] as Excel.Range).Value2.ToString());
}
另一个完全不同的解决方案是查看OleDbConnection提供程序,将整个Excel文件加载到DataTable中,然后直接将DataTable绑定到DataGridView
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });////gets the table from the tempFile
List<DataTable> listInnerTable = new List<DataTable>();
foreach (DataRow dr in schemaTable.Rows)
{
DataTable innerTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, dr.ItemArray[2], null });
listInnerTable.Add(innerTable);
}
这样,它将处理不同的Excel文件或添加到您正在使用的Excel文件中的新列。Excel文件的时间是?(.csv、.xls、.xlsx)
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });////gets the table from the tempFile
List<DataTable> listInnerTable = new List<DataTable>();
foreach (DataRow dr in schemaTable.Rows)
{
DataTable innerTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, dr.ItemArray[2], null });
listInnerTable.Add(innerTable);
}
myGridView.DataSource = listInnerTable;
myGridView.DataBind();