何时对 OpenXML 文档中的元素调用 .Save?

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

OpenXML-SDK DOM 的不同部分都有一个

Save
方法。我们是否需要在修改文档时保存各个部分,或者我们只需要在创建/修改文档后保存一次?

调用这些对应的方法就够了吗:

DocumentFormat.OpenXml.Packaging.PresentationPart.Presentation.Save()
DocumentFormat.OpenXml.Packaging.WorkbookPart.Workbook.Save()

从而避免调用这样的方法:

DocumentFormat.OpenXml.Spreadsheet.Worksheet.Save()
DocumentFormat.OpenXml.Presentation.Slide.Save()

我问的原因是因为除了工作簿和演示文稿之外,我看到的示例在工作表和幻灯片上都调用了

Save

openxml-sdk
1个回答
0
投票

就目前情况而言 - 至少在我当前的测试中,我没有在任何地方调用“保存”,并且我正在创建的 xlsx 文件的输出没有任何问题。

我正在编写创建 MemoryStream,然后写入 FileStream - 写入 600,000 行时没有报告问题。

例如:

MemoryStream memoryStream = new();
using (SpreadsheetDocument _document = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
{
    WorkbookPart wbp = _document.WorkbookPart ?? _document.AddWorkbookPart();
    wbp = SetDataOnSheet(wbp, excelContent, showdifferentCreationTime);
   // _document.Save();// <= This is not needed and has no effect on my file.
}
return memoryStream;

在“SetDataOnSheet”函数中,我添加工作簿、工作表部件、工作表等...我获取数据列表,将其格式化为单元格,然后在将数据添加到工作表之前将每一行附加到其中。

MemoryStream 然后被写出:(你可能需要这样做

memoryStream.Seek(0, SeekOrigin.Begin)
;)

using (FileStream fs = new("yourfile.xlsx"), FileMode.OpenOrCreate))
{
    memoryStream.CopyTo(fs);
    fs.Flush();
}

我在任何阶段都不会调用保存。 我可能想到的一个例子是,您需要即时保存的地方可能是实时提供数据的地方,如果您不保存它,它就会消失……那么就确实需要保存飞到一个文件。 我猜可能是情境因素。

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