2012-06-28 11 views
7

मैं स्ट्रीम से xlsx फ़ाइलों को पढ़ने के लिए एपप्लस का उपयोग करता हूं।धारा एक्सेल फ़ाइल को डेटाटेबल सी # में कैसे परिवर्तित करें?

यह एक बग है, यह नहीं कर सकते मेरी workbook.How के कुछ कॉलम पढ़ा है epplus बिना datatable के लिए धारा से xlsx फ़ाइलों को पढ़ सकता है?

मेरे पुराने कोड:

public static DataSet ReadExcelFile(Stream stream) 
    { 
     try 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      IExcelDataReader excelReader =  
          ExcelReaderFactory.CreateOpenXmlReader(stream); 
      //... 
      DataSet result = excelReader.AsDataSet(); 

      return result; 

     } 
     catch (Exception x) 
     { 
      throw x; 
     } 
    } 

मैं उसकी रिपोर्ट नहीं था, लेकिन मैं इतना combinations.If की कोशिश की वर्कशीट में खाली कॉलम देखते हैं, epplus पाठक नहीं कर सकते सही ढंग से स्तंभ मान पढ़ें।

उत्तर

13

आप बग वर्णन कर सकते reported यह "यह एक बग है, यह नहीं कर सकते कुछ स्तंभ मेरी कार्यपुस्तिका में पढ़ने", आप या यह पहले से ही जाना जाता है, तुम क्या संस्करण उपयोग कर रहे ?

यहाँ EPPlus के साथ एक DataTable में excel फ़ाइल लोड करने के लिए एक सरल तरीका है।

public static DataTable getDataTableFromExcel(string path) 
{ 
    using (var pck = new OfficeOpenXml.ExcelPackage()) 
    { 
     using (var stream = File.OpenRead(path)) 
     { 
      pck.Load(stream); 
     } 
     var ws = pck.Workbook.Worksheets.First(); 
     DataTable tbl = new DataTable(); 
     bool hasHeader = true; // adjust it accordingly(i've mentioned that this is a simple approach) 
     foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column]) 
     { 
      tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column)); 
     } 
     var startRow = hasHeader ? 2 : 1; 
     for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++) 
     { 
      var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; 
      var row = tbl.NewRow(); 
      foreach (var cell in wsRow) 
      { 
       row[cell.Start.Column - 1] = cell.Text; 
      } 
      tbl.Rows.Add(row); 
     } 
     return tbl; 
    } 
} 
+0

मैं वर ws = pck.Workbook.Worksheets [ "Worksheet1 पर अशक्त वस्तु सन्दर्भ मिल के बाकी हड़पने कर "]; कोई उपाय ? – Mennan

+0

@ मेनन: 'var ws = pck.Workbook.Worksheets.First();' इसके बजाए (इसके अनुसार मेरा जवाब संपादित करें) आज़माएं। –

+0

मैं Epplus संस्करण 3.0.0.2 उपयोग करें, और pck.Workbook.Worksheets कोई पहले() विधि है माफ करना, भी मैं करने की कोशिश की कार्यपत्रक [0], अभी भी null.I न समझते – Mennan

0

यह पिछला रास्ता है, हालांकि यह अभी भी किसी की मदद कर सकता है। स्पष्ट रूप से मेरे वर्कशीट में कुछ कॉलम विलय किए गए थे, इसलिए उदाहरण के लिए, यदि कॉलम ए और बी विलय हो जाते हैं तो यह केवल कॉलम ए को मान के साथ एक के रूप में पहचानता है, और इसलिए यह कॉलम बी को खाली के रूप में देता है, जब मैं उस विशेष सेल के मूल्य पर कॉल करता हूं (बी)। पिछले पाने के लिए, सुनिश्चित करें कि आप जानते हैं जो कोशिकाओं विलय कर रहे हैं और उसके बाद ही पहले एक और संबंध के रूप में अशक्त मर्ज किए गए कक्षों

संबंधित मुद्दे