使用EPPlus加载大量excel数据

时间:2014-11-21 17:39:51

标签: c# excel winforms epplus

我有一个基本的winforms应用程序,用户可以上传excel文件(.xlsx),我想阅读此文件的内容,以便我使用EPPlus。

问题是,我正在尝试加载一个非常大的ex​​cel文件的内容,它有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,它看起来性能更好,但使用代码也更难。

1 个答案:

答案 0 :(得分:3)

这听起来像是非常大的数据集,所以你可能想要读这个:

EPPlus Large Dataset Issue with Out of Memory Exception

基本上,您可以用尽“较大”数据集的RAM。但它不仅是增加大小的行数,还包括列和每个单元格的内容。字符串通常比数字占用更多空间,因此有时很难预测EPP何时开始出现内存问题。有传言说EPP的最新版本更好,但我自己没有测试过。

好像你根据你的评论让它工作,这很好,但记住内存限制。我与你凝聚 - 在Open XML中做这件事并不是一件简单的事。