如何使用OpenXML SDK获得给定格式代码和原始值的格式化值

时间:2019-07-18 04:53:47

标签: excel openxml openxml-sdk

Excel在内部保留原始值(无论是DateTime还是数字),并使用格式代码向用户显示该值。我想使用OpenXML SDK实现类似的功能。让我举个例子来更好地理解:

假设我在excel中添加了带格式的数字“ 213,123.0000”。 excel内部存储的实际值是213123,它存储用于显示数字的格式代码。

内部数字是这样存储在工作表xml文件中的:

<c r="C2" s="2">
<v>213123</v>
</c>

属性s =“ 2”提供了获取单元格格式ID的位置,我可以从styles.xml中获取该格式ID。它将在下面提到的节点cellXfs下可用:

<cellXfs count="6">
<xf numFmtId="0" borderId="0" fillId="0" fontId="0" xfId="0"/>
<xf numFmtId="0" borderId="0" fillId="0" fontId="1" xfId="0" applyFont="1"/>
<xf numFmtId="164" borderId="0" fillId="0" fontId="0" xfId="0" applyNumberFormat="1"/>
<xf numFmtId="165" borderId="0" fillId="0" fontId="0" xfId="0" applyNumberFormat="1"/>
<xf numFmtId="166" borderId="0" fillId="0" fontId="0" xfId="0" applyNumberFormat="1"/>
<xf numFmtId="168" borderId="0" fillId="0" fontId="0" xfId="0" applyNumberFormat="1"/>
</cellXfs>

我们需要在位置2获得numFmtId属性numFmtId =“ 164”

现在使用numFmtId我们可以找到实际的格式代码,该格式代码将在下面提到的节点numFmts下的styles.xml中提供:

<numFmts count="4">
<numFmt formatCode="#,##0.0000" numFmtId="164"/>
<numFmt formatCode="[$¥-411]#,##0.000" numFmtId="165"/>
<numFmt formatCode="_-[$¥-411]* #,##0.00_-;\-[$¥-411]* #,##0.00_-;_-[$¥-411]* "-"??_-;_-@_-" numFmtId="166"/>
<numFmt formatCode="yyyy"年"m"月"d"日";@" numFmtId="168"/>
</numFmts>

格式代码为“#,## 0.0000”。

因此,在给定内部值(213123)和格式代码“#,## 0.0000”的情况下,OpenXML中是否有API可以获取excel中看到的格式值(213,123.0000)。

0 个答案:

没有答案