[英]Specific order of xmlelements in Excel OpenXml Workbook class
我通過OpenXml創建PowerPoint演示文稿。 演示的幻燈片中充斥着嵌入式對象。 通常,Excel文檔是嵌入的。 除了准備好要嵌入的圖像和文檔之外,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(第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>
在深入研究第4版OpenXml規范之后,我發現了以下信息:
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 }?
沒有信息表明這是授權訂單還是預期訂單,但是僅進行了幾次測試就顯得很有希望(我為該訂單檢查的測試工作簿之一的工作簿openxml片段)
<?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>
因此,我將嘗試最好的猜測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.