2011-09-06 15 views
5

Bir Excel elektronik tablosundan veri bağlamak ve okumak için OLEDB kullanıyorum. IMEX = "1" var ve her şey yolunda. Benim sorunum, okuduğum sayfaların birkaç boş satırla başlayabilmesi ve boş satırların sayısının önemli olması. Gibi bir 5x5 grid okurken, örneğin,:Excel'den okurken boş satırlar nasıl sayılır

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

burada '-' boş hücreyi temsil eder. İlk iki sıranın boş olması gerçeği önemlidir. Kılavuzun boyutu dinamiktir. Kodum ilk boş satırları görmezden geliyor gibi görünüyor. Ama satır 4 de boş satır ile fırsatlar.

OLEDB kullanarak bir Excel sayfasının başlangıcındaki boş satır sayısını nasıl sayabilirim?

Ben OLEDB kullanarak sınırlı değilim, ben yoktu olmazdı eğer ;-)

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

Bağlantı dizesine:

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

GÜNCELLEME

Bağlantı dizesinde dosya uzantısı olarak '.xls' belirtilmesi, bu sorunu giderdi ve başlangıçta boş satırları doğru okur.

+0

kullanarak '-' veya '0' boş hücre bir seçenek değildir temsil etmek, hücreler boş olması gerekir. Veriler aslında verdiğim örnekten daha karmaşık ve biçimlendirme üzerinde kontrolümüz yok. – RandomDev

+0

bu yardımcı olup olmadığından emin değil: http://stackoverflow.com/questions/1138197/oledb-connection-to-excel-how-do-i-select-fixed-width-unbounded-height –

+0

'ConnectionString' nedir? – NaveenBhat

cevap

1

Sorununuzun bağlantı dizenizde olduğunu düşünüyorum. Ben aşağıdaki kodu test edilmiş ve bu benim için çalıştı:

 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]); 
     } 
    } 

Bağlantım String:

@Knvn

tarafından belirtildiği gibi

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

Soruyu bağlantı dizgimle güncelledim – RandomDev

0

Sen dosya ile dosya uzantısını .xls belirttiğiniz gerekir bağlantı dizenizdeki adı. kodunun altına

1

kontrolü: Boş satırlar dönecektir .. Ayrıca

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(); 
İlgili konular