跳过读取Excel文件的第一行
本文关键字:一行 读取 Excel 文件 | 更新日期: 2023-09-27 18:27:55
你好,我正在尝试将Excel文件转换为我的dataGridView,但它有列名问题,因为Excel文件的格式有两个设置单元格用于文档的其余部分。然而,列名实际上在第2行。如何跳过读取文件中的第一行,以便dataGridView中的列显示第二行的单元格值?
当前代码:
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 8.0;", openFileDialog1.FileName);
string query = String.Format("select * from [{0}$]", "Sheet1");
var adapter = new OleDbDataAdapter(query, connectionString);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
techGrid.DataSource = dt;
正确的方法是告诉Excel在工作表中的确切位置可以找到列标题和数据。导入整个工作表并试图从任意数据行重建页眉会带来严重的麻烦OPENQUERY不保证行顺序在测试中,它似乎总是按顺序导入,但一旦您将它移到具有多卷tempdb的系统或重负载的生产系统中,您的导入将不再按顺序进行,您的代码将尝试将数据解释为列标题。
而不是:
string query = String.Format("select * from [{0}$]", "Sheet1");
用途:
string query = String.Format("select * from [{0}${1}]", "Sheet1","A2:ZZ");
EDIT:使用"A2:end"
而不是"A2:ZZ"
。
有一种比用程序删除行更简单的方法,使用连接字符串的头行属性。这应该为您跳过第一行,然后您可以从那里对其余行执行操作。来自ConnectionStrings.com:
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=myOldExcelFile.xls;
Extended Properties="Excel 12.0;HDR=YES";
"HDR=Yes;"表示第一行包含列名,而不是数据"HDR=否;"表示相反。
就像Thit Lwin所评论的那样。在将dt设置为数据源之前删除第一行。
DataRow row = dt.Rows[0];
dt.Rows.Remove(row);
techGrid.DataSource = dt;
您可以像这个一样跳过任意多行
IEnumerable<DataRow> newRows = dt.AsEnumerable().Skip(numberOfRows);
DataTable dt2 = newRows.CopyToDataTable();