我有一个基本的winforms应用程序,用户可以上传excel文件(.xlsx),我想阅读此文件的内容,以便我使用EPPlus。
问题是,我正在尝试加载一个非常大的excel文件的内容,它有7个标签,一个标签有超过200k行,另一个标签有70k。其他5个总计约50k。
这些文件也只会继续变大。(最终目标)因为我想导入数据,读取数据,根据我的规则/数据,我需要在excel文件上写回数据并将其导出。
我在使用EPPlus实现数据加载时遇到了问题。
这是代码
var file = new FileInfo(filePath);
using (var package = new ExcelPackage(file))
{
try
{
// Get the work book in the file
ExcelWorkbook workBook = package.Workbook; //Hangs here for about 2 mins
if (workBook != null)
{
if (workBook.Worksheets.Count > 0)
{
// Get the first worksheet
ExcelWorksheet currentWorksheet = workBook.Worksheets.First();
// gets the currentWorksheet but doesn't evaluate anything...
}
}
}
catch (Exception ex)
{
throw ex;
}
}
代码挂在package.workbook行上大约2分钟。然后它会进入if获取currentWorkSheet的位置,如果我在手表中查看该变量的内容,则显示没有任何内容,因为它显示:
功能评估已禁用,因为之前的功能评估已超时。您必须继续执行以重新启用功能评估。
我从EPPlus看了这个link,它显示加载大文件的唯一问题是从上到下,从左到右加载,他们说超过5,000。我有更多的方式,所以我只是想知道这是否甚至可以用EPPlus?
此外,我做了一些谷歌搜索,大多数问题是他们无法打开服务器上的大型excel文件,他们可以在本地...
我也开始研究Open XML SDK,它看起来性能更好,但使用代码也更难。
答案 0 :(得分:3)
这听起来像是非常大的数据集,所以你可能想要读这个:
EPPlus Large Dataset Issue with Out of Memory Exception
基本上,您可以用尽“较大”数据集的RAM。但它不仅是增加大小的行数,还包括列和每个单元格的内容。字符串通常比数字占用更多空间,因此有时很难预测EPP何时开始出现内存问题。有传言说EPP的最新版本更好,但我自己没有测试过。
好像你根据你的评论让它工作,这很好,但记住内存限制。我与你凝聚 - 在Open XML中做这件事并不是一件简单的事。