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
。
就目前情况而言 - 至少在我当前的测试中,我没有在任何地方调用“保存”,并且我正在创建的 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();
}
我在任何阶段都不会调用保存。 我可能想到的一个例子是,您需要即时保存的地方可能是实时提供数据的地方,如果您不保存它,它就会消失……那么就确实需要保存飞到一个文件。 我猜可能是情境因素。