为什么使用 OleDb 导入 Excel 时会忽略第一个空行

Han*_*obo 5 .net c# oledb excel

使用.Net 的 OleDb,我尝试导入一个 Excel 表,其中第一行可以为空。我想保留 DataTable 中的空行,以便稍后能够将单元格映射到 Excel 样式的单元格名称“A1、A2、...”。但无论我做什么,第一行都会被删除。

Excel 文件如下所示:

 -   -   -
 ABC XY  ZZ
 1   2   3
 4   4   5
Run Code Online (Sandbox Code Playgroud)

其中“-”是空单元格。(我对导入格式没有影响。)

简化代码:

        string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"file.xls\";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
        string mySheet = "Sheet1$";

        OleDbConnection connection = new OleDbConnection(cnnStr);
        DataSet Contents = new DataSet();
        using (OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [" + mySheet + "]", connection))
        {
            adapter.Fill(Contents);
        }

        Console.WriteLine(Contents.Tables[0].Rows.Count); // prints: 3
        Console.WriteLine(Contents.Tables[0].Rows[0].ItemArray[0]); // prints: ABC
Run Code Online (Sandbox Code Playgroud)

知道如何保留那个空行吗?

ps:我发现如何在从 Excel 读取时计算空行,但无法重现它。

小智 0

OleDbDataAdapter 将第一行视为标题。为了获取第一行,请从数据表的标题创建一个数据行。并插入到第一个位置。

  DataTable dt = Contents.Tables[0];

  DataRow dr = new DataRow();
  int i = 0;
  foreach (DataColumn column in dt.Columns)
  {
    dr[i] = column.ColumnName.ToString();
    i++;
  }
  dt.Rows.InsertAt(dr, 0);
Run Code Online (Sandbox Code Playgroud)