Excel

2011-09-06 14 views
5

से पढ़ने पर खाली पंक्तियों को कैसे गिनें I ExcelD स्प्रेडशीट से डेटा को कनेक्ट और पढ़ने के लिए OLEDB का उपयोग कर रहा हूं। मेरे पास IMEX = "1" है और सबकुछ ठीक काम करता है। मेरी समस्या यह है कि जिन पत्रों से मैं पढ़ रहा हूं, वे कई खाली पंक्तियों से शुरू हो सकते हैं और रिक्त पंक्तियों की संख्या महत्वपूर्ण है। उदाहरण के लिए, अगर मैं की तरह एक 5x5 ग्रिड पढ़ रहा था:Excel

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

जहां '-' एक खाली सेल प्रतिनिधित्व करता है। तथ्य यह है कि पहली दो पंक्तियां खाली हैं महत्वपूर्ण है। ग्रिड का आकार गतिशील है। मेरा कोड पहली खाली पंक्तियों को अनदेखा कर रहा है। लेकिन पंक्ति 4 पर खाली पंक्ति के साथ सौदों ठीक है।

ओएलईडीबी का उपयोग कर एक्सेल शीट की शुरुआत में खाली पंक्तियों की संख्या को मैं कैसे गिन सकता हूं?

मैं 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

इसके अलावा, का उपयोग करते हुए '-' या '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(); 
संबंधित मुद्दे