在读取Excel文件时跳过第一行

您好,我想翻译一个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; 

就像Thwin Lwin所评论的那样。 在将dt设置为数据源之前删除第一行。

 DataRow row = dt.Rows[0]; dt.Rows.Remove(row); techGrid.DataSource = dt; 

正确的方法是告诉Excel究竟在工作表中的哪里find你的列标题和数据。 导入整个工作表并尝试从任意数据行重新构build您的头文件是非常麻烦的。 OPENQUERY不保证行顺序。 在testing中,它总是按顺序导入,但只要将其移动到具有多卷tempdb或负载较重的生产系统的系统中,就不会再导入您的导入,您的代码将尝试解释您的数据作为列标题。

代替:

 string query = String.Format("select * from [{0}$]", "Sheet1"); 

使用:

 string query = String.Format("select * from [{0}${1}]", "Sheet1","A2:ZZ"); 

有一个比编程式删除行更简单的方法,使用连接string的标题行属性。 这应该跳过你的第一行,然后你可以做从你那里做的其他行。 从ConnectionStrings.com :

 Provider=Microsoft.ACE.OLEDB.12.0; Data Source=myOldExcelFile.xls; Extended Properties="Excel 12.0;HDR=YES"; 

“HDR =是;” 表示第一行包含列名,而不是数据。 “HDR =无;” 表明相反。

你可以像这样跳过任意数量的行

 IEnumerable<DataRow> newRows = dt.AsEnumerable().Skip(numberOfRows); DataTable dt2 = newRows.CopyToDataTable();