使用openxml删除x名称空间

我发现这个问题,我有一些相同的问题。

XLSX-如何摆脱默认命名空间前缀x:?

在生成OpenXML Excel工作表时,我遇到了一个问题。 特别是样式表部分。 当样式表以某种方式获得时间轴的样式(仅适用于Excel 2013)时,它可以生成一个Excel文件。 样式表然后包含正确的命名空间(xmlns:x =“…”)。 这样可以在Excel 2010中打开它。但是,当使用Excel 2010保存生成的Excel文件时,x命名空间将成为默认命名空间,除了时间轴扩展元素之外,它将从所有的ellement中删除。 当在Excel中重新打开文件时,这将导致错误。 在OpenXml生产力工具中打开相同的文件时,会出现x是未知名称空间的错误。

所以这里有一些xml结果代码。 生成excel文件(stylesheet.xml)后的Fisrt:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <x:styleSheet xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" mc:Ignorable="x14ac"> <x:fonts count="3" x14ac:knownFonts="1"> <x:font> <x:sz val="11"/> <x:color theme="1"/> <x:name val="Calibri"/> <x:family val="2"/> <x:scheme val="minor"/> </x:font> <!-- more fonts --> </x:fonts> <x:fills count="7"> <x:fill> <x:patternFill patternType="none"/> </x:fill> <!-- more fills --> </x:fills> <x:borders count="1"> <x:border> <x:left/> <x:right/> <x:top/> <x:bottom/> <x:diagonal/> </x:border> </x:borders> <x:cellStyleXfs count="1"> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0"/> </x:cellStyleXfs> <x:cellXfs count="18"> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <x:xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" pivotButton="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <x:alignment horizontal="left"/> </x:xf> <!-- more cells --> </x:cellXfs> <x:cellStyles count="1"> <x:cellStyle name="Standaard" xfId="0" builtinId="0"/> </x:cellStyles> <x:dxfs count="1"> <x:dxf> <x:numFmt numFmtId="19" formatCode="m/d/yyyy"/> </x:dxf> </x:dxfs> <x:tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/> <x:extLst> <x:ext xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"> <x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/> </x:ext> <x:ext xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" uri="{9260A510-F301-46a8-8635-F512D64BE5F5}"> <x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/> </x:ext> </x:extLst> </x:styleSheet> 

并保存在Excel 2010中

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac"> <fonts count="3" x14ac:knownFonts="1"> <font> <sz val="11"/> <color theme="1"/> <name val="Calibri"/> <family val="2"/> <scheme val="minor"/> </font> <!-- more fonts --> <fills count="7"> <fill> <patternFill patternType="none"/> </fill> <!-- more fills --> </fills> <borders count="1"> <border> <left/> <right/> <top/> <bottom/> <diagonal/> </border> </borders> <cellStyleXfs count="1"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0"/> </cellStyleXfs> <cellXfs count="18"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" pivotButton="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <alignment horizontal="left"/> </xf> <!-- more cells --> </cellXfs> <cellStyles count="1"> <cellStyle name="Standaard" xfId="0" builtinId="0"/> </cellStyles> <dxfs count="1"> <dxf> <numFmt numFmtId="164" formatCode="m/d/yyyy"/> </dxf> </dxfs> <tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/> <extLst> <ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"> <x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/> </ext> <x:ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"> <x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/> </x:ext> </extLst> </styleSheet> 

如你看到的。 <x:ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}"部分仍然包含从其他ellement中删除的x命名空间。

有人知道怎么修这个东西吗? 我的第一个想法是使x命名空间的默认命名空间,所以它不再需要样式表中的x:。 但是我无法find一个方法来告诉openXML SDK这样做。

我知道这是一个老问题,但为了防止其他人有同样的问题,我所做的是删除冲突的部分。 虽然不是最佳解决scheme,但它允许用户在Excel 2010中打开该文件,然后将其另存为其他名称,然后重新打开刚刚创build的文件而没有问题。

要删除我使用此代码的部分:

  if (Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Descendants<StylesheetExtensionList>().Any()) { Document.WorkbookPart.WorkbookStylesPart.Stylesheet.RemoveAllChildren<StylesheetExtensionList>(); } 

我不使用Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Save()因为我保存在另一个地方的变化,但你可能需要保存它,这取决于你的需要。

我select删除所有的孩子,但也许你只能删除导致问题的那个。

希望这可以帮助你;)