P. *_*nge 5 c# xml excel openxml-sdk
我已经找到了这个问题,而我也得到了相同的问题。
生成OpenXML Excel工作表时出现问题。特别是样式表部分。
当样式表以某种方式获得时间轴的样式(仅适用于Excel 2013)时,它可以生成excel文件。然后,样式表包含正确的名称空间(xmlns:x="...")。这样就可以在Excel 2010中打开它。但是,使用Excel 2010保存生成的Excel文件时,x名称空间将成为默认名称空间,并且将从所有元素中删除,时间轴扩展元素除外。在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>
Run Code Online (Sandbox Code Playgroud)
并保存在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>
Run Code Online (Sandbox Code Playgroud)
如你看到的。该<x:ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}"零件仍包含x名称空间,从其他元素中将其删除。
有人知道怎么修这个东西吗?我的第一个想法是使x名称空间成为默认名称空间,因此它根本不再需要x:样式表中的。但是我找不到找到告诉openXML SDK这样做的方法。
我知道这是一个老问题,但为了防止其他人遇到同样的问题,我所做的就是删除冲突的部分。虽然不是最佳解决方案,但它允许用户在 Excel 2010 中打开文件,用其他名称重新保存,然后重新打开刚刚创建的文件,没有任何问题。
为了删除这些部分,我使用了以下代码:
if (Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Descendants<StylesheetExtensionList>().Any())
{
Document.WorkbookPart.WorkbookStylesPart.Stylesheet.RemoveAllChildren<StylesheetExtensionList>();
}
Run Code Online (Sandbox Code Playgroud)
我没有使用Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Save(),因为我将更改保存在其他地方,但您可能需要保存它,这取决于您的需要。
我选择删除所有子项,但也许您可以只删除导致问题的子项。
希望这对您有帮助;)
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |