首页 > 解决方案 > 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 文件 :)

谢谢。

标签: c#asp.net.netsql-serverepplus

解决方案


推荐阅读