繁体   English   中英

将 C# 中的数据表导出到 MS Excel 的最快方法是什么?

[英]What is the fastest way to export a DataTable in C# to MS Excel?

正如标题所说,我在 C# 中有大量数据表,我需要尽可能快地导出到 Excel,同时具有合理的内存消耗。

我尝试使用以下方法:

  1. EPPlus (目前最快的)
  2. OpenXML (比EPPlus慢 - 不确定这是否有意义,因为EPPlus可能使用OpenXML ?)
  3. SpreadsheetLight (慢)
  4. ClosedXML (大表的OOM异常)

假设海量数据集(最多 1,000,000 行,50 列)和无限的开发时间,我可以导出的最快方式是什么?

编辑:我需要的不仅仅是一个以 A1 开头的基本表格。 我需要表格从我选择的单元格开始,我需要能够格式化包含数据的单元格,并且有多个选项卡,所有选项卡都包含自己的数据集。

谢谢。

您没有对数据在 excel 文件中的外观指定任何要求。 我想,您不需要任何复杂的逻辑,只需在正确的列中设置正确的数据即可。 在这种情况下,您可以将数据放入CSV (逗号分隔值)文件中。 Excel 可以很好地读取此文件。

CSV 文件示例:

Column 1,Column 2,Column 3
value1,value1,value1
value2,value2,value2
...

根据要求,这里是创建 csv 文件的代码示例。

var csvFile = new StringBuilder();  
csvFile.AppendLine("Column 1,Column 2,Column 3");

foreach (var row in data)
{
    csvFile.AppendLine($"{row.Column1Value},{row.Column2Value}, row.Column3Value}");
}

File.WriteAllText(filePath, csvFile.ToString());

您可以使用一些外部库来解析 csv 文件,但这是我能想到的最基本的方式 atm。

Excel 只是一种 XML 文件格式。 如果你去掉所有的帮助库,并认为你可以比 EPPPlus 或 OpenXML 的人在编码方面做得更好,那么你可以只使用 XML Stream Writer 并将正确标记的 Excel XML 写入文件。

您可以利用各种标准文件缓冲和缓存来尽可能快地写入,但这些都不会特定于 Excel 文件 - 只是标准缓冲写入。

假设......无限的开发时间,我可以导出的最快方式是什么?

手动滚动您自己的 XLSX 导出。 它基本上是压缩的 XML。 因此,将您的 XML 流式传输到ZipArchive ,它或多或少会尽可能快。 如果您流式传输它而不是缓冲它,那么对于任何大小的导出都应该修复内存使用情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM