Excel OpenXml Workbook类中的xmlelements的具体顺序

我通过OpenXml创buildPowerPoint演示文稿。 演讲的幻灯片充满了embedded式的物体。 通常embeddedExcel文档。 除了准备embedded图像和文档之外,Excel还需要在PowerPoint中打开文档时向用户显示哪些区域的其他信息。

通过将OleSize类添加到工作簿部分,可以将此信息添加到Excel工作簿。 请忽略此代码不会检查是否存在该片段,这肯定会导致问题。 这只是一个简单的例子。

var oleSize = new OleSize() {Reference = "A1:H12"}; var workbook = document.WorkbookPart.Workbook; workbook.Append(oleSize); 

当刚刚添加到工作簿类的OpenXmlElements列表的末尾时,Excel将显示一个错误消息对话框,指出该文件已损坏,不可修复。 将此元素直接放在PivotCache OpenXmlElement之后,可以作为解决方法。 现在我经历过,当OpenXmlElement在OleSize之前可用时,Excel也会引发这个消息。

我找不到有关该特定类的OpenXmlElements命令的必要性的任何信息。

任何暗示高度赞赏。

你对你在答案中列出的顺序是正确的。 在您引用的OpenXML规范文档中,有一个Workbook的XSD(page 3936),它显示该订单确实是强制性的,因为它被定义为一个Sequence

 <xsd:complexType name="CT_Workbook"> <xsd:sequence> <xsd:element name="fileVersion" type="CT_FileVersion" minOccurs="0" maxOccurs="1"/> <xsd:element name="fileSharing" type="CT_FileSharing" minOccurs="0" maxOccurs="1"/> <xsd:element name="workbookPr" type="CT_WorkbookPr" minOccurs="0" maxOccurs="1"/> <xsd:element name="workbookProtection" type="CT_WorkbookProtection" minOccurs="0" maxOccurs="1"/> <xsd:element name="bookViews" type="CT_BookViews" minOccurs="0" maxOccurs="1"/> <xsd:element name="sheets" type="CT_Sheets" minOccurs="1" maxOccurs="1"/> <xsd:element name="functionGroups" type="CT_FunctionGroups" minOccurs="0" maxOccurs="1"/> <xsd:element name="externalReferences" type="CT_ExternalReferences" minOccurs="0" maxOccurs="1"/> <xsd:element name="definedNames" type="CT_DefinedNames" minOccurs="0" maxOccurs="1"/> <xsd:element name="calcPr" type="CT_CalcPr" minOccurs="0" maxOccurs="1"/> <xsd:element name="oleSize" type="CT_OleSize" minOccurs="0" maxOccurs="1"/> <xsd:element name="customWorkbookViews" type="CT_CustomWorkbookViews" minOccurs="0" maxOccurs="1"/> <xsd:element name="pivotCaches" type="CT_PivotCaches" minOccurs="0" maxOccurs="1"/> <xsd:element name="smartTagPr" type="CT_SmartTagPr" minOccurs="0" maxOccurs="1"/> <xsd:element name="smartTagTypes" type="CT_SmartTagTypes" minOccurs="0" maxOccurs="1"/> <xsd:element name="webPublishing" type="CT_WebPublishing" minOccurs="4129 0" maxOccurs="1"/> <xsd:element name="fileRecoveryPr" type="CT_FileRecoveryPr" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="webPublishObjects" type="CT_WebPublishObjects" minOccurs="0" maxOccurs="1"/> <xsd:element name="extLst" type="CT_ExtensionList" minOccurs="0" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="conformance" type="s:ST_ConformanceClass"/> </xsd:complexType> 

如果你有兴趣,我在这里有一个答案,它显示了添加项目到文件中的正确位置的一种方法。

在深入研究OpenXml规范第4版后,我发现这些信息:

 sml_CT_Workbook = 4261 attribute conformance { s_ST_ConformanceClass }?, 4262 element fileVersion { sml_CT_FileVersion }?, 4263 element fileSharing { sml_CT_FileSharing }?, 4264 element workbookPr { sml_CT_WorkbookPr }?, 4265 element workbookProtection { sml_CT_WorkbookProtection }?, 4266 element bookViews { sml_CT_BookViews }?, 4267 element sheets { sml_CT_Sheets }, 4268 element functionGroups { sml_CT_FunctionGroups }?, 4269 element externalReferences { sml_CT_ExternalReferences }?, 4270 element definedNames { sml_CT_DefinedNames }?, 4271 element calcPr { sml_CT_CalcPr }?, 4272 element oleSize { sml_CT_OleSize }?, 4273 element customWorkbookViews { sml_CT_CustomWorkbookViews }?, 4274 element pivotCaches { sml_CT_PivotCaches }?, 4275 element smartTagPr { sml_CT_SmartTagPr }?, 4276 element smartTagTypes { sml_CT_SmartTagTypes }?, 4277 element webPublishing { sml_CT_WebPublishing }?, 4278 element fileRecoveryPr { sml_CT_FileRecoveryPr }*, 4279 element webPublishObjects { sml_CT_WebPublishObjects }?, 4280 element extLst { sml_CT_ExtensionList }? 

没有任何信息,如果这是准许或预期的顺序,但只有几个testing它看起来很有前途(工作簿openxml片段从我检查的订单的testing工作簿之一)

 <?xml version="1.0" encoding="utf-8" standalone="yes"?> <x:workbook xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" mc:Ignorable="x15" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:fileVersion appName="xl" lastEdited="6" lowestEdited="5" rupBuild="14420" /> <x:workbookPr defaultThemeVersion="124226" /> <mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> <mc:Choice Requires="x15"> <x15ac:absPath xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac" url="{path}" /> </mc:Choice> </mc:AlternateContent> <x:bookViews> <x:workbookView xWindow="240" yWindow="90" windowWidth="23580" windowHeight="10110" /> </x:bookViews> <x:sheets> <x:sheet name="PRINT" sheetId="1" r:id="rId1" /> <x:sheet name="PRINT2" sheetId="4" r:id="rId2" /> <x:sheet name="Data" sheetId="5" state="veryHidden" r:id="rId3" /> <x:sheet name="PRINT3" sheetId="6" r:id="rId4" /> </x:sheets> <x:definedNames> <x:definedName name="Measures">Books!$C$4</x:definedName> <x:definedName name="_xlnm.Print_Area" localSheetId="0">PRINT!$A$1:$G$25</x:definedName> </x:definedNames> <x:calcPr calcId="152511" calcMode="manual" calcOnSave="0" /> <x:oleSize ref="A1:G25" /> </x:workbook> 

所以我会尝试一下最好的猜测。