我正在尝试使用 openxml 生成自动化的 excel 文件。我面临的一个问题是用 excel 的开放 xml 对象模型来容纳我的对象模型。我必须意识到我为工作表附加子元素的顺序很重要。
例如:
workSheet.Append(sheetViews);
workSheet.Append(columns);
workSheet.Append(sheetData);
workSheet.Append(mergeCells);
workSheet.Append(drawing);
上面的顺序没有给出任何错误。
但是以下内容:
workSheet.Append(sheetViews);
workSheet.Append(columns);
workSheet.Append(sheetData);
workSheet.Append(drawing);
workSheet.Append(mergeCells);
报错
所以这不允许我随时创建绘图对象并将其附加到工作表。这迫使我在使用这些元素之前创建它们。
谁能告诉我我是否正确理解了问题?因为我相信我们应该能够打开任何 excel 文件,如有必要,为工作表创建一个新的子元素并附加它。但现在这可能会破坏这些元素的附加顺序。
谢谢。
最佳答案
根据Standard ECMA-376 Office Open XML File Formats , CT_Worksheet
有一个必需的序列:
以下崩溃的原因:
workSheet.Append(sheetViews);
workSheet.Append(columns);
workSheet.Append(sheetData);
workSheet.Append(drawing);
workSheet.Append(mergeCells);
是因为你有drawing
before mergeCells
。只要您在mergeCells
drawing
之后附加您的代码,您的代码就应该可以正常工作。
注意:您可以在 ECMA-376 3rd edition Part 1 (.zip) 中找到完整的 XSD -> OfficeOpenXML-XMLSchema-Strict -> sml.xsd。
关于c# - OpenXml:工作表子元素的顺序更改导致文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786891/