首页 文章

有没有一种简单的方法可以使用OleDbConnection删除/忽略Excel文件中列名以上的行?

提问于
浏览
0

我有这样的代码用于读取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 回答

  • 1

    我有从Excel读取的代码,需要忽略工作表中的前11行,并从列A到P读取最多64000行 .

    // Read columns A - P after skipping 11 rows to read the header row
    string ExcelDataQuery = string.Concat("SELECT * FROM [", sheetname, "A12:P64012]");
    
  • 0

    据我所知(过去检查过这个问题),如果 Headers 没有放在第1行,则无法使用SQL查询从excel文件中选择带有 System.Data.OleDb 的表 .
    我的解决方案(就像你一样)是在查询工作表之前删除 Headers 行上方的所有行 - 只需打开工作簿 Microsoft.Office.Interop 删除额外的行,关闭它而不是查询它 .

    Excel是一个非常强大的工具,但从未设计为像数据库(例如SQL \ access文件) .

相关问题