跳过Excel文件的第一行

时间:2012-03-15 02:08:31

标签: 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;

4 个答案:

答案 0 :(得分:11)

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

而不是:

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

使用:

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

编辑:使用"A2:end"代替"A2:ZZ"

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:4)

就像Thit Lwin评论的那样。在将dt设置为datasource之前删除第一行。

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

答案 3 :(得分:3)

您可以跳过所需的行数

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