我有一个关于在 C# 中加载 Excel (Xlsx) 文件的问题。我已经使用 NPOI 2.0 实现了 Excel 加载,但性能非常糟糕(15 到 25 秒的加载时间,10000 行和 60 列(在 Win7 上运行 Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz(4 CPU),~2.5GHz))。我认为这是因为 NPOI 2.0 仍处于测试阶段,所以我尝试了另一个名为 EPPlus 的库,它仍然需要大约相同的时间来加载 Excel 文件。
这是我使用 EPPlus 加载它的方式:
var existingFile = new FileInfo(path);
var excelData = new ExcelViewModel(path);
// Open and read the XlSX file.
using (var package = new ExcelPackage(existingFile))
{
// Get the work book in the file
ExcelWorkbook workBook = package.Workbook;
if (workBook != null)
{
// Here is some initializing......
var viewSheetModel = new ExcelSheetViewModel(sheet.Name, numberOfColumns, titles);
for (var row = titleRowIndex + 1; row <= end.Row; ++row)
{
var viewRowModel = new ExcelRowViewModel();
for (int column = start.Column; column <= end.Column; ++column)
{
var cell = sheet.Cells[row, column];
viewRowModel.AddCellValue(cell.Value != null ? cell.Value.ToString() : string.Empty);
}
viewSheetModel.Rows.Add(viewRowModel);
}
excelData.AddSheet(viewSheetModel);
}
}
根据 dotTrace Profiler,大约 40% 的时间浪费在 get_Workbook 方法(通过访问“package.Workbook”属性调用)中,然后在 get_Item 和 get_Value 调用中浪费了另外 30%,然后在 AddCellValue 方法中浪费了 5% (这是我的数据模型),其余时间分散到各种方法调用中。
是我做错了什么,还是这种表现正常?
干杯