C# 如何将大量数据导出到excel
我目前正在使用EPPlus将数据导出到excel。对于少量数据,它的工作原理令人钦佩。但它会消耗大量内存,以便导出大量数据 我简要介绍了OOXML和/或MicrosoftOpenXMLSDK2.5。我不确定是否可以使用它将数据导出到Excel 还有第三方提供者库 我想知道什么样的解决方案能够以良好的性能正确地导出大量数据,并且不占用太多空间(理想情况下少于要导出的数据量的3倍) 更新:一些额外的要求。。。 我需要能够导出“颜色”信息(不包括CSV),并且我想要一些易于管理的东西,比如EPPlus库(不包括XML格式本身)。我找到了另一条线索,他们推荐我正在尝试的Aspose或SpreadsheetGear。我认为第一个答案是可以的。谢谢大家 更新2016-02-16正如信息一样。。。我们现在使用电子表格,我们喜欢它。我们曾经需要支持,这太棒了C# 如何将大量数据导出到excel,c#,performance,excel,memory,export,C#,Performance,Excel,Memory,Export,我目前正在使用EPPlus将数据导出到excel。对于少量数据,它的工作原理令人钦佩。但它会消耗大量内存,以便导出大量数据 我简要介绍了OOXML和/或MicrosoftOpenXMLSDK2.5。我不确定是否可以使用它将数据导出到Excel 还有第三方提供者库 我想知道什么样的解决方案能够以良好的性能正确地导出大量数据,并且不占用太多空间(理想情况下少于要导出的数据量的3倍) 更新:一些额外的要求。。。 我需要能够导出“颜色”信息(不包括CSV),并且我想要一些易于管理的东西,比如EPPlus
谢谢如果您的要求足够简单,您可以使用CSV
如果你需要更多的细节,请调查。这是一个XML模式,您可以使用它创建一个文本文档,Excel可以以本机方式打开该文档。它支持公式、每个工作簿多个工作表、格式设置等。I秒使用CSV,但请注意,Excel对工作表中的行数和列数有限制,如下所述: 具体而言: 工作表大小1048576行乘以16384列 这是针对Excel 2010的。在处理大量数据时,请记住这些限制 EPPlus将数据导出到excel。对于少量数据,它的工作原理令人钦佩。但它会消耗大量内存,以便导出大量数据 几年前,我编写了一个C#库,使用OpenXML库将数据导出到Excel,我也遇到了同样的情况 它工作正常,直到您开始有大约30k+行,此时,库将尝试缓存您的所有数据。。。它会耗尽内存 但是,我通过使用
OpenXmlWriter
类解决了这个问题。这将数据直接写入Excel文件(无需先缓存),并且内存效率更高
如您所见,该库非常易于使用,只需调用一个CreateExcelDocument
函数,并将数据集
、数据表
或列表
:
您可以从这里下载C#和VB.Net的完整源代码:
祝你好运 您也可以使用我的库。它是为高容量Excel输出而设计的,可以将数据直接写入文件,而不会影响内存 以下是使用示例:
using (var ew = new ExcelWriter("C:\\temp\\test.xlsx"))
{
for (var row = 1; row <= 100; row++)
{
for (var col = 1; col <= 10; col++)
{
ew.Write($"row:{row}-col:{col}", col, row);
}
}
}
使用(var ew=new ExcelWriter(“C:\\temp\\test.xlsx”)) {
来编写它,那么消耗的内存应该限于当前行。@罗伯特,谢谢。我会考虑一些原始数据导出,但实际上我的数据包括颜色信息,而且很少。CSV不能包含的信息。当然……它是。@Robert,CSV是文本库,我可以添加颜色信息作为通道值,但我必须编写一些东西才能将其导入并在Excel中显示为颜色。我不能使用CSV,因为我导出的是颜色和更多数据,而不仅仅是普通数据。我将查找SpreadsheetMLSpreadsheetML格式。我将更新添加到我的任务中ion可精确确定使用库的位置(更简单)。谢谢,但我需要excel。我更新了我的问题以添加限制。感谢限制信息。我的数据非常大,但没有达到这个程度。非常感谢迈克。我不记得确切的情况,但我们实际上使用电子表格,它做得很好。但同时我们也使用了64位。我无法证明SpreadsheetGear单独解决了这个问题,但我非常喜欢这个产品。我注意到了您的解决方案。您好@Mike,您的链接不起作用,请提供更新的链接,我希望看到您的解决方案,因为我们需要将大量数据下载到Excel,目前它正在引发内存异常,提前感谢。
对于(VAR行=1;行创建CSV文件。CSV可以直接由Excel打开,并且它们非常容易生成。如果使用<代码> FielestRAMusing (var ew = new ExcelWriter("C:\\temp\\test.xlsx")) { for (var row = 1; row <= 100; row++) { for (var col = 1; col <= 10; col++) { ew.Write($"row:{row}-col:{col}", col, row); } } }