6

我目前正在使用 EPPlus 将数据导出到 Excel。它适用于少量数据。但是要导出大量数据会消耗大量内存。

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

还有第三方提供程序库。

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

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

2016 年 2 月 16 日更新就像信息一样……我们现在使用 SpreadSheetGear,我们喜欢它。我们需要一次支持,这太棒了。

谢谢

4

4 回答 4

4

EPPlus 将数据导出到 Excel。它适用于少量数据。但是要导出大量数据会消耗大量内存。

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

在您开始拥有大约 30k+ 行之前,它运行良好,此时,库将尝试缓存您的所有数据......并且它会耗尽内存。

但是,我通过使用OpenXmlWriter类解决了这个问题。这会将数据直接写入 Excel 文件(无需先缓存),并且内存效率更高。

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

// 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 导出到 Excel

祝你好运 !

于 2015-06-11T09:33:17.743 回答
1

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

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

于 2013-09-30T18:19:51.510 回答
0

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

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

这适用于 Excel 2010。处理大量数据时,请牢记这些限制。

于 2013-09-30T18:21:00.560 回答
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);
        }
    }
} 
于 2020-01-14T05:30:56.033 回答