2012-06-28 29 views
7

Tôi sử dụng Epplus để đọc tệp xlsx từ luồng.Làm thế nào để chuyển đổi tập tin excel stream thành C#?

Nó có lỗi, nó không thể đọc một số cột trong sổ làm việc của tôi. Làm cách nào để đọc tệp xlsx từ luồng đến dữ liệu có thể định dạng mà không có epplus?

mã cũ của tôi:

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

tôi didnt báo cáo nó, nhưng tôi đã cố gắng rất nhiều combinations.If có cột trống trong bảng tính, epplus đọc không thể đọc các giá trị đúng cột.

Trả lời

13

"Nó có một lỗi, nó không thể đọc một số cột trong bảng tính của tôi"

Bạn có thể mô tả các lỗi, có bạn reported nó hoặc là nó đã được biết đến, những gì phiên bản bạn đang sử dụng ?

Đây là cách tiếp cận đơn giản để tải tệp excel vào DataTable bằng EPPlus.

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

tôi đã tham chiếu đối tượng null trên var ws = pck.Workbook.Worksheets ["Worksheet1 "]; bất kỳ ý tưởng ? – Mennan

+0

@Mennan: Thử 'var ws = pck.Workbook.Worksheets.First();' thay vào đó (đã chỉnh sửa câu trả lời của tôi cho phù hợp). –

+0

Tôi sử dụng Epplus phiên bản 3.0.0.2, và pck.Workbook.Worksheets không có phương thức First() xin lỗi, tôi cũng đã thử Worksheets [0], vẫn là null. Tôi không hiểu – Mennan

0

Đây là quá khứ, tuy nhiên nó vẫn có thể giúp ai đó. Rõ ràng một số cột trong trang tính của tôi đã được sáp nhập, ví dụ, nếu cột A và B được hợp nhất, nó chỉ nhận ra cột A là cột có giá trị, và vì vậy nó trả về cột B là trống, khi tôi gọi giá trị của ô cụ thể đó (B). Để vượt qua điều này, hãy đảm bảo bạn biết ô nào được hợp nhất và sau đó chỉ lấy ô đầu tiên và xem phần còn lại của ô được hợp nhất là null

Các vấn đề liên quan