如何将streamexcel文件转换为数据表C#?

我使用Epplus从stream中读取xlsx文件。

它有一个错误,它不能读取我的工作簿中的一些列。如何可以读取xlsx文件从stream到数据表没有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; } } 

我没有报告,但我尝试了这么多的组合。如果工作表中有空列,epplus阅读器不能正确读取列值。

“它有一个错误,它不能阅读我的工作簿中的一些列”

你能描述一下这个bug吗,你有没有报告过 ,还是已经知道,你使用的是什么版本?

下面是一个使用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; } } 

这已经过去了,但它仍然可以帮助别人。 显然,我的工作表中的一些列被合并,所以例如,如果列A和B被合并,它只能识别列A作为具有值的那一列,所以当我调用该特定单元格的值时,它返回列B为空B)。 为了克服这个问题,确保你知道哪些单元格被合并,然后只抓取第一个单元格,并把剩下的合并单元格视为null