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".
有一种比以编程方式删除行更简单的方法,使用连接字符串的标题行属性.这应该跳过你的第一行,然后你可以用那里的其余行做你做的事情.来自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 =无;" 表明相反.
正如 Thit Lwin 所评论的那样。在将 dt 设置为数据源之前删除第一行。
DataRow row = dt.Rows[0];
dt.Rows.Remove(row);
techGrid.DataSource = dt;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35876 次 |
| 最近记录: |