2011-09-06 11 views
5

私はOLEDBを使用してExcelスプレッドシートからデータを読み込んで読み込みます。私はIMEX = "1"を持っており、すべて正常に動作します。私の問題は、私が読んでいるシートがいくつかの空の行から始まり、空の行の数が重要であるということです。たとえば、次のような5x5グリッドを読んでいたとします。Excelから読み込むときに空の行を数える方法

- - - - - 
- - - - - 
2 - 3 3 8 
- - - - - 
- - 5 2 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

で述べたようにあなたはファイルとファイル拡張子.xlsをspecifiyする必要があります接続文字列の名前。コードの下

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(); 
関連する問題