c# - EPPLus C# 创建和写入文件以在垃圾中流式传输
问题描述
我正在使用 EPPlus(通过 openxml 选择)。我有一个非常具体的需求并努力寻找解决方案(这很奇怪,因为我认为这将是一个常见的要求!):我从 SQL 服务器加载大量行,然后创建和 xlsx 报告,然后流式传输文件到 S3。就我而言,内存是一种稀缺资源,因此我面临着从 SQL 服务器流式传输数据、创建 excel 文件(具有一些基本格式)然后将文件复制到 S3 的挑战——所有这些都使用流式传输/分块——所以我可以对内存的使用进行一些控制。
我可以从 sql server 流式传输没有问题,并且可以流式传输到 S3 没有问题,现在的问题是创建 xlsx 文件而无需将整个对象加载到内存中。大多数示例如下所示:
MemoryStream stream = new MemoryStream();
using (ExcelPackage package = new ExcelPackage(stream))
{
//Here goes the ExcelPackage code etc
package.Save() or SaveAs etc.
}
问题在于注释“这里是 ExcelPackage 代码等”通常是代码迭代数据列表并写入文件的单元格或单元格范围。
如何在遍历数据“列表”并确保 epplus inst 将整个文件加载到内存中时获取 xlsx 文件的内容?在测试具有 1000000 行和 10 列的文件时,我们大约为 90MB。我想说从 sql server 中提取 1000 行,将行写入 epplus,然后开始将 ExcelPackage 流式传输到 S3,同时从 sql server 中提取接下来的 1000 行 - 清洗、冲洗、重复......
我也非常反对手工制作打开的 xml 文件 :)
谢谢。
解决方案
推荐阅读
- r - R data.table:如何合并 data.tables 列表?
- json - 如何将模型 json 绑定到控制器中的组合框?
- c# - 为我的标签使用内置表单控件时,在我的输入文本框前面加上星号
- java - Android Studio 无法使用 Wrap 内容时,如何为不同屏幕尺寸的多种布局配置应用程序?
- java - 如何获得一个自然数序列,每个数字换行?
- compiler-errors - 嗨,我无法使这段代码工作,因为它说“并非所有代码路径都返回一个值”。我不确定什么在这里不起作用
- python - 使用两个 for 循环矢量化图像生成
- java - 设置 OSM 全屏的正确方法
- pdf - 如何使 pdf 或 docx 文件损坏?
- flutter - 如何在 Flutter 中拥有 2 种不同颜色的抽屉