Asp.net

如何將流excel文件轉換為數據表C#?

  • August 7, 2017

我使用 Epplus 從流中讀取 xlsx 文件。

它有一個錯誤,它無法讀取我的工作簿中的某些列。如何在沒有 epplus 的情況下將 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;
       }
   }

我沒有報告它,但我嘗試了很多組合。如果工作表中有空列,epplus reader 無法正確讀取列值。

“它有一個錯誤,它無法讀取我工作簿中的某些列”

你能描述一下這個錯誤,你有沒有報告過或者已經知道了,你使用的是什麼版本?

DataTable這是使用 EPPlus將 excel 文件載入到 a 中的簡單方法。

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

引用自:https://stackoverflow.com/questions/11239805