【问题标题】:What is the fastest way to export a DataTable in C# to MS Excel?将 C# 中的 DataTable 导出到 MS Excel 的最快方法是什么?
【发布时间】:2018-01-10 17:34:15
【问题描述】:

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

我尝试过使用以下方法:

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

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

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

谢谢。

【问题讨论】:

  • 看看我的answer here中的代码。它展示了如何使用 SAX 方法使用 OpenXml,这应该是最快的方法。对于大型数据集,它的内存效率也会更高。
  • 假设海量数据集(最多 1,000,000 行,50 列) Excel 是不适合这项工作的工具...我推荐 EPPlus,你已经试过并说是“最快的”,但除了“比我基准测试的'当前最快'更快”之外,您没有描述任何类型的性能要求”

标签: c# excel datatable openxml closedxml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您没有对数据在 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 最基本的方式。

    【讨论】:

    • 已编辑以提供有关我需要实现的目标的更多详细信息,感谢您的回复
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多