【问题标题】:How to count empty rows when reading from Excel从 Excel 读取时如何计算空行数
【发布时间】:2011-09-06 09:25:12
【问题描述】:

我正在使用 OLEDB 连接和读取 Excel 电子表格中的数据。我有 IMEX="1" 一切正常。我的问题是我正在阅读的工作表可能从几行空行开始,空行数很重要。例如,如果我正在阅读 5x5 网格,例如:

- - - - -
- - - - -
2 - 3 3 8
- - - - -
- - 5 2 2

其中“-”代表一个空单元格。前两行是空的这一事实很重要。网格的大小是动态的。我的代码似乎忽略了第一个空行。但是处理第 4 行的空行没问题。

如何使用 OLEDB 计算 Excel 工作表开头的空行数?

我被限制使用 OLEDB,如果我不需要的话我不会;-)

using (var adapter = new OleDbDataAdapter("SELECT * FROM [" + worksheetName + "]", connString)) {
  var ds = new DataSet();
  adapter.Fill(ds, "FareChart");
  table = ds.Tables["FareChart"];
}

连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Windows\\TEMP\\e1842f90-74a7-42f2-a6fa-208396a1072e;Extended Properties=\"Excel 8.0;IMEX=1;HDR=No\""

更新

在连接字符串中指定“.xls”作为文件扩展名解决了这个问题,并在开始时正确读取了空行。

【问题讨论】:

  • 另外,不能使用“-”或“0”来表示空单元格,单元格必须为空。数据实际上比我给出的示例更复杂,我们无法控制格式。
  • 不确定这是否有帮助:stackoverflow.com/questions/1138197/…
  • 你的ConnectionString是什么?
  • 在您的connectionString 中,您需要指定带有扩展名的excel 文件名。喜欢:myExlFileName.xls
  • @Knvn 原因是连接字符串中缺少“.xls”。

标签: c# excel oledb


【解决方案1】:

我认为您的问题在于您的连接字符串。我测试了下面的代码,它对我有用:

     DataSet Contents = new DataSet();
     using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + mySheet + "]", connection))
     {
         adapter.Fill(Contents,"MyTable");
     }

     foreach (DataRow content in Contents.Tables["MyTable"].Rows)
     {
         if (content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "")
         {
             Console.WriteLine("Empty Row");
         }
         else
         {
             Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
         }
     }

我的连接字符串是:

    string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Untitled 1.xls\";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

【讨论】:

    【解决方案2】:

    检查下面的代码:它将返回空行..

    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + strFileName + "; Extended Properties = \"Excel 8.0;HDR=NO;IMEX=1\";"); /*for office 2007 connection*/
                        conn.Open();
    string strQuery = "SELECT * FROM [" + Table + "]";
    System.Data.OleDb.OleDbDataAdapter adapter = new  System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
    System.Data.DataTable ExcelToDataTable = new System.Data.DataTable();
    adapter.Fill(ExcelToDataTable);
    
    DT = ExcelToDataTable.Copy();
    
    int count = DT.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => field is System.DBNull || string.Compare((field as string).Trim(), string.Empty) == 0)).ToList().Count();
    

    【讨论】:

      【解决方案3】:

      如@Knvn所述

      您需要在连接字符串中使用文件名指定文件扩展名.xls

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        相关资源
        最近更新 更多