从Excel读取时如何计算空行

时间:2011-09-06 09:25:13

标签: c# excel oledb

我正在使用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'作为连接字符串中的文件扩展名修复此问题并正确读取开头的空行。

3 个答案:

答案 0 :(得分: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\"";

答案 1 :(得分:1)

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

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();

答案 2 :(得分:0)

正如@Knvn所述

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