使用 ClosedXML 从流中逐行写入/向流写入?

问题描述 投票:0回答:1

使用 ClosedXML,(如何)可以通过流式传输(例如逐行)编写工作簿,而不是将所有数据都存储在内存中然后立即写入?

c# excel closedxml
1个回答
0
投票

ClosedXML 不提供用于逐行写入工作簿的直接流 API。它主要设计用于处理内存中的数据并立即写入整个工作簿。但是,您可以使用技术来优化内存使用,同时仍然实现流数据的类似效果。

以下是使用 ClosedXML 高效地逐行写入数据的示例方法:

using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Sheet1");

    // Get your data source or stream here
    var dataRows = GetDataRows();

    // Write header row
    var headers = GetHeaders();
    for (var col = 1; col <= headers.Length; col++)
    {
        worksheet.Cell(1, col).Value = headers[col - 1];
    }

    // Write data rows
    var row = 2;
    foreach (var dataRow in dataRows)
    {
        for (var col = 1; col <= dataRow.Length; col++)
        {
            worksheet.Cell(row, col).Value = dataRow[col - 1];
        }

        row++;
    }

    // Save the workbook to a stream or file
    using (var stream = new MemoryStream())
    {
        workbook.SaveAs(stream);

        // Do something with the stream (e.g., save to a file or send over network)
    }
}

在此示例中,我们首先创建工作簿并添加工作表。然后我们通过迭代标题并设置单元格值来编写标题行。

接下来,我们迭代数据行并通过迭代列并设置单元格值来写入每一行。

最后,我们将工作簿保存到

MemoryStream
或您选择的任何其他流,然后您可以使用它来执行进一步的操作,例如保存到文件或通过网络发送。

通过迭代数据行并逐行写入它们,您可以有效地处理大型数据集,而无需将整个数据集立即加载到内存中。但是,请注意,整个工作簿在保存到流之前仍然在内存中构建。

© www.soinside.com 2019 - 2024. All rights reserved.