gpt4 book ai didi

c# - 在 .NET 中有效地生成一个非常大的 Excel 文件?

转载 作者:行者123 更新时间:2023-12-03 19:59:25 25 4
gpt4 key购买 nike

我需要从 ASP.NET MVC 站点生成一个非常大的 Excel 文件,但使用 Open XML SDK 时遇到内存限制。有没有一种内存有效的方法来生成这样的文件?

作为引用,我正在尝试生成一个电子表格,其中包含大约 500,000 行,每行 20 列。数据集本身正好适合内存,但 Open XML SDK 很快就耗尽了我所有的可用内存。

最佳答案

您可以以相当有效的方式使用 Open XML SDK,诀窍是使用 OpenXmlWriter类(在this CodeProject article你有更多的细节)
我在生成 91 列 x 164,000 行的文件时遇到了内存问题。使用 OpenXmlWriter 我从 2GB 的 RAM 消耗增加到 120MB,对我来说足够了 :-)
通过代码示例查看它:
标准(和未优化)方式:

// Table header
Row headerRow = new Row();
foreach (string fieldName in fields)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(fieldName);
headerRow.AppendChild(cell);
}
sheetData.AppendChild(headerRow);

// Table rows
while (dataReader.Read())
{
Row dataRow = new Row();

foreach (string fieldName in fields)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(reader[fieldName].ToString());
dataRow.AppendChild(cell);
}

sheetData.AppendChild(dataRow);
}

OpenXmlWriter 方式:
using (var writer = OpenXmlWriter.Create(worksheetPart))
{
writer.WriteStartElement(new Worksheet());
writer.WriteStartElement(new SheetData());

// Table header
writer.WriteStartElement(new Row());
foreach (string fieldName in fields)
{
writer.WriteStartElement(new Cell() { DataType = CellValues.String });
writer.WriteElement(new CellValue(fieldName));
writer.WriteEndElement();
}
writer.WriteEndElement(); //end of Row tag

// Table rows
while (dataReader.Read())
{
writer.WriteStartElement(new Row());

foreach (string fieldName in fields)
{
writer.WriteStartElement(new Cell() { DataType = CellValues.String });
writer.WriteElement(new CellValue(dataReader[fieldName].ToString()));
writer.WriteEndElement();
}

writer.WriteEndElement(); //end of Row tag
}

writer.WriteEndElement(); //end of SheetData
writer.WriteEndElement(); //end of worksheet
writer.Close();
}

关于c# - 在 .NET 中有效地生成一个非常大的 Excel 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com