2012-06-28 12 views
7

私はEpplusを使ってストリームからxlsxファイルを読みます。変換ストリームはどのようにファイルをdatatable C#に変換するのですか?

バグがあり、私のワークブックのいくつかの列を読むことができません。ストリームからxppxファイルをepplusなしで読むことができますか?

私の古いコード:

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

私はそれを報告didntの、私はワークシートの空の列があるので、多くのcombinations.Ifを試してみました、epplus読者が正しく列値を読み取る傾けます。

答えて

13

を「それはバグがあり、それは私のワークブックの一部の列を読んカント」あなたはバグを記述することができ、あなたreportedそれか、すでに知られていますがどのバージョンを使用しています?

EPPlusを使用してExcelファイルをDataTableにロードする簡単な方法があります。

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

var ws = pck.Workbook.Worksheets ["Worksheet1 "];何か案が ? – Mennan

+0

@Mennan:代わりに 'var ws = pck.Workbook.Worksheets.First();'を試してみてください(それに応じて私の答えを編集しました)。 –

+0

私はEpplusバージョン3.0.0.2を使用しています.Pck.Workbook.WorksheetsにはFirst()メソッドがありません。申し訳ありませんが、私もWorksheets [0]を試しましたが、まだnull.Iは分かりません。 – Mennan

0

これは過去のことですが、それでも誰かを助けることができます。 明らかに私のワークシート内のいくつかの列がマージされています。たとえば、列AとBがマージされている場合、列Aが値を持つ列として認識されるだけなので、その特定のセルの値を呼び出すと、 (B)。これを越えるには、どのセルがマージされているかを確認して、最初のセルだけを取得し、残りのマージされたセルをnullとみなしてください。

関連する問題