如何将大量数据导出到Excel

时间:2013-09-30 18:09:27

标签: c# performance excel memory export

我目前正在使用EPPlus将数据导出到excel。它适用于少量数据。但是为了导出大量数据,它会占用大量内存。

我简要介绍一下OOXML和/或Microsoft Open XML SDK 2.5。我不确定我可以用它将数据导出到Excel吗?

还有第三方提供商库。

我想知道什么样的解决方案可以正确地导出大量数据并且性能良好而不占用太多空间(理想情况下不到导出数据量的3倍)?

  

更新:一些额外要求......   我需要能够导出“颜色”信息(不包括CSV),我想像EPPlus库那样易于管理(不包括XML格式本身)。我发现了另一个线程,他们推荐我正在尝试的Aspose或SpreadsheetGear。我把第一个答案还可以。谢谢大家。

更新2016-02-16 正如信息......我们现在使用SpreadSheetGear,我们喜欢它。我们需要一次支持,这很棒。

由于

4 个答案:

答案 0 :(得分:4)

  

EPPlus将数据导出到excel。它适用于少量数据。但是为了导出大量数据,它会占用大量内存。

几年前,我编写了一个C#库,使用OpenXML库将数据导出到Excel,我遇到了同样的情况。

它工作正常,直到你开始有大约30k +行,此时,库将试图缓存你的所有数据......并且它的内存不足。

但是,我使用OpenXmlWriter类修复了问题。这会将数据直接写入Excel文件(不先缓存它),并且内存效率更高。

而且,正如您所看到的,该库非常易于使用,只需调用一个CreateExcelDocument函数,然后将其传递给DataSetDataTableList<>

// Step 1: Create a DataSet, and put some sample data in it
DataSet ds = CreateSampleData();

// Step 2: Create the Excel .xlsx file
try
{
    string excelFilename = "C:\\Sample.xlsx";
    CreateExcelFile.CreateExcelDocument(ds, excelFilename);
}
catch (Exception ex)
{ 
    MessageBox.Show("Couldn't create Excel file.\r\nException: " + ex.Message);
    return;
}

您可以从此处下载C#和VB.Net的完整源代码:

Mike's Export to Excel

祝你好运!

答案 1 :(得分:1)

如果您的要求足够简单,您可以使用CSV。

如果您需要更多详细信息,请查看SpreadsheetML。它是一种XML模式,可用于创建Excel可以本机打开的文本文档。它支持公式,每个工作簿的多个工作表,格式化等。

答案 2 :(得分:0)

我第二次使用CSV但请注意,Excel对工作表中的行数和列数有限制,如下所述: http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP010342495.aspx

具体为: 工作表大小1,048,576行16,384列

这适用于Excel 2010.在处理大量数据时请记住这些限制。

答案 3 :(得分:0)

您也可以使用我的SwiftExcel库。它是为大量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);
        }
    }
}