跳过Excel文件的第一行

ika*_*eat 5 c# excel datagridview

您好我正在尝试将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;
Run Code Online (Sandbox Code Playgroud)

Ano*_*non 11

正确的方法是告诉Excel确切的工作表在哪里找到列标题和数据.导入整个工作表并尝试从任意数据行重建标题是一个严重的问题. OPENQUERY不保证行顺序. 在测试中,它似乎总是按顺序导入,但是一旦将其移动到具有多卷tempdb或负载很重的生产系统的系统,您的导入将不再被订购,并且您的代码将尝试解释您的数据作为列标题.

代替:

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

使用:

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

编辑:使用"A2:end"而不是"A2:ZZ".


Tom*_*mmy 9

有一种比以编程方式删除行更简单的方法,使用连接字符串的标题行属性.这应该跳过你的第一行,然后你可以用那里的其余行做你做的事情.来自ConnectionStrings.com:

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=myOldExcelFile.xls; 
Extended Properties="Excel 12.0;HDR=YES";
Run Code Online (Sandbox Code Playgroud)

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


NET*_*rts 5

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

DataRow row = dt.Rows[0];
dt.Rows.Remove(row);
techGrid.DataSource = dt;
Run Code Online (Sandbox Code Playgroud)