我有这样的代码用于读取Excel文件:
string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=YES\";";
using (OleDbConnection conn = new OleDbConnection(connStr))
{
conn.Open();
DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string sheetName = dtSchema.Rows[0].Field("TABLE_NAME");
OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);
sheetAdapter.Fill(sheetData);
DataTable dtColumns = conn.GetSchema("Columns", new string[] { null, null, sheetName, null });
...
}
我的代码需要使用/查看列 Headers . 以上仅适用于列 Headers 是第一行的情况 . 有时,我们从客户端收到的Excel文件在列 Headers 上方有几行,其中包含有关Excel中数据的一些元数据 . 发生这种情况时,列 Headers 将位于第10行 .
我可以打开Excel文件并手动删除列 Headers 上方的额外行,这解决了问题 . 但我们想要删除此手动步骤 .
有没有简单的方法来删除/忽略列 Headers 上方的这些额外的起始行?或者我是否必须提出自定义代码?我能想到的最好的方法是关闭 HDR
然后在每一列中具有值的第一行是列 Headers 行 . 有没有更简单的方法?
2 回答
我有从Excel读取的代码,需要忽略工作表中的前11行,并从列A到P读取最多64000行 .
据我所知(过去检查过这个问题),如果 Headers 没有放在第1行,则无法使用SQL查询从excel文件中选择带有
System.Data.OleDb
的表 .我的解决方案(就像你一样)是在查询工作表之前删除 Headers 行上方的所有行 - 只需打开工作簿
Microsoft.Office.Interop
删除额外的行,关闭它而不是查询它 .Excel是一个非常强大的工具,但从未设计为像数据库(例如SQL \ access文件) .