【问题标题】:Generating Large Excel report from database using epplus使用 epplus 从数据库生成大型 Excel 报告
【发布时间】:2015-07-13 01:11:50
【问题描述】:

我想使用 EPPlus 库生成 excel 报告。这是我在初始化时加载文件的代码:

ExcelPackage pkg = new ExcelPackage(new FileInfo(filePath));

由于我的报告中有大量数据,我面对OutOfMemoryExceptioncodeproject article 描述了如何创建大型 Excel 报告。作者的方法是将部分数据的报告保存到Excel文件中,关闭包然后重新打开excel文件并添加另一部分数据等等......。我将此应用于我的项目:

//Going to save log package.
pkg.Save();
//Package saved and Disposed.
var fileInfo = pkg.File;

//Again loading file into package...
pkg.Load(new FileStream(fileInfo.FullName, FileMode.Open));

这里的重点是,当我保存包时,它会自动释放。处理后我想内存会被释放,但是当我看到任务管理器时没有发生。之后我再次加载excel文件as discribed in another post in *

【问题讨论】:

    标签: c# excel report epplus


    【解决方案1】:

    您无法通过简单地释放对象来控制垃圾回收。即使调用 GC.Collect() 也不能保证内存会被释放。

    我使用 EPPlus 定期生成超过 30,000 行、20 列或更多列的电子表格,其中一些包含重要的文本字符串和复杂的公式。以前EPPlus使用MS zip打包器的时候会出现一些内存问题,但是后面的版本已经没有问题了。

    所以要尽早发布,但不要指望任务管理器反应迅速。

    另一种策略是不使用内存流进行输出。改为写入磁盘。如果您在 IIS 上生成电子表格,则可以将浏览器重定向到临时文件,或者在生成工作簿并释放 EPPlus 对象后打开文件并将其流式传输到响应。

    【讨论】:

    • 感谢您的回复,但我如何not use a memory stream for the output. Write to disk instead