OpenXML样式表报错求助:第153列0.0%格式符的点号异常
排查OpenXML样式表中0.0%格式引发的第153列报错问题
从你提供的代码和现象来看,问题的根源并不是0.0%格式里的小数点,而是你numFmts节点里的无效子节点,以及计数属性与实际节点数不匹配的问题。
具体问题分析
空的
<x:numFmt />节点是核心错误
OpenXML的numFmt节点要么是引用内置格式(需指定合法内置ID,且内置格式其实不需要在numFmts中声明),要么是自定义格式(必须同时指定numFmtId和formatCode)。你代码里的空numFmt节点没有任何属性,完全不符合规范,会导致OpenXML解析器读取样式表时抛出异常,而第153列刚好引用了这个损坏的格式定义,所以报错集中在这里。count属性与实际节点数不匹配
你的numFmts节点设置了count="2",但实际有效的自定义格式只有1个(另一个是空节点),这种计数不匹配也会触发解析校验失败。
修复后的代码示例
把空节点删除,同时修正count值:
<?xml version="1.0" encoding="utf-16"?> <x:styleSheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:numFmts count="1"> <x:numFmt numFmtId="164" formatCode="0.0%" /> </x:numFmts> <!-- 剩余fonts等节点内容保持不变 --> </x:styleSheet>
额外注意事项
- 自定义格式的
numFmtId必须大于163(1-163是内置格式ID),你用的164是合法的; - 如果是使用内置百分比格式(比如ID为10的
0%或ID为11的0.00%),完全不需要在numFmts中声明,直接在单元格样式里引用对应ID即可; - 排查这类问题时,优先检查XML结构合法性:节点属性是否完整、计数是否匹配、格式代码是否符合OpenXML规范(
0.0%本身是合法的百分比格式,没有问题)。
内容的提问来源于stack exchange,提问作者Gargoyle
相关产品推荐
相关产品推荐

