2011-09-06 49 views
5

我正在使用OLEDB連接並讀取Excel電子表格中的數據。我有IMEX =「1」,一切正常。我的問題是我正在閱讀的牀單可能從幾個空行開始,空行數很重要。例如,如果我讀取的是5x5格:如何在從Excel中讀取時計算空行

- - - - - 
- - - - - 
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\"" 

UPDATE

指定'.xls'作爲連接字符串中的文件擴展名解決了此問題,並在開始時正確讀取空行。

+0

此外,使用「 - 」或「0」來表示一個空單元是不是一種選擇,細胞必須是空的。數據實際上比我給出的例子更復雜,我們無法控制格式。 – RandomDev

+0

不知道這是否有幫助:http://stackoverflow.com/questions/1138197/oledb-connection-to-excel-how-do-i-select-fixed-width-unbounded-height –

+0

你的'ConnectionString'是什麼? – NaveenBhat

回答

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\""; 
+0

我用連接字符串更新了問題 – RandomDev

0

正如@Knvn

表示您需要用文件來specifiy文件擴展名.xls連接字符串中的名稱。

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(); 
相關問題