将数据从数据源(现在为“数据表”)提取到 xlsx 文件中。
创建了一个新的 XLSX 文件。添加了列,并且还设置了相同的列格式。现在该文件被用作模板。
使用“OpenXML”SDK,我可以将数据泵入此 Excel 模板。
打开文件后,我可以看到单元格格式不正确。
另一个项目有类似的代码。当我比较样式相关的 XML 时,发现缺少“style”属性。
`<x:cols xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:col min="1" max="1" width="11.44140625" *style="27"* customWidth="1" />
<x:col min="2" max="2" width="12.88671875" style="27" bestFit="1" customWidth="1" />
</x:cols>`
`<x:cols xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:col min="1" max="1" width="14" customWidth="1" />
<x:col min="2" max="2" width="20.26171875" customWidth="1" />
<x:col min="3" max="3" width="16.83984375" customWidth="1" />
<x:col min="4" max="4" width="15" customWidth="1" />
</x:cols>`
没有款式信息。
再次查看 XLSX 文件。 我可以看到功能区和单元格中的格式。 XLSX 模板似乎存在一些问题。 我一直在阅读 http://officeopenxml.com/anatomyofOOXML-xlsx.php 以了解对象模型来对问题进行排序。
我需要解决格式问题。看起来问题仅与 XLSX 模板有关。但不知道我在创建XLSX模板时缺少哪里。
你的任务看起来像我的。
cell
(大多数情况下)在
sheet__.xml
中,当__
是数字时,您可以在workbook.xml
中找到它,xml
文件有一些子元素:
<sheetPr>
<dimension>
<sheetViews>
<cols>
<sheetData>
...
<sheetData>
元素包含<row>
元素,<row>
内部是一些<cell>
。
<cell>
看起来像:
<c r="E6" s="3">
<v>10.0</v>
</c>
有一个属性
s
,在本例中等于 2
。
在
xl/styles.xml
中,定义了一些样式,例如:
<styleSheet>
<numFmts count="13"> ... </numFmts>
<fonts count="64"> ... </font>
<fills count="36"> ... </font>
<borders count="15"> ... </borders>
<cellStyleXfs count="65"> ... </cellStyleXfs>
<cellXfs count="142">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
<xf numFmtId="0" fontId="4" fillId="2" borderId="0" xfId="0" applyFont="1" applyFill="1" applyAlignment="1">
<alignment horizontal="left" vertical="center"/>
</xf>
<xf numFmtId="183" fontId="4" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1">
<alignment horizontal="left" vertical="center"/>
</xf>
...
</cellXfs>
...
</styleSheet>
您的单元格 E6 有
s="2"
,因此它将获取 third
列表中的 cellXfs
元素:
<xf numFmtId="183" fontId="4" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1">
<alignment horizontal="left" vertical="center"/>
</xf>
因此,您的单元格的
numFmtId
索引应该为 0。
numFmts
标签定义每个使用的 formatCode
的 numFmtId
。
<numFmts count="13">
...
<numFmt numFmtId="180" formatCode="yyyy/mm/dd"/>
<numFmt numFmtId="181" formatCode="\:"/>
<numFmt numFmtId="182" formatCode="#,##0_ ;[Red]\-#,##0\ "/>
<numFmt numFmtId="183" formatCode="#0.00%"/>
<numFmt numFmtId="184" formatCode="\¥#,##0"/>
</numFmts>
numFmt
之后的下一个样式是fontId
。在这种情况下,它等于 0
。fonts
标签看起来像:
<fonts count="64">
<font>
<sz val="9"/>
<name val="Arial"/>
<family val="3"/>
<charset val="128"/>
</font>
<font>
<sz val="9"/>
<name val="Arial"/>
<family val="3"/>
<charset val="128"/>
</font>
</fonts>
fontId=0
获取 <fonts>
标签中的第一个元素。所以你的细胞会有 size = 9, font name = Arial
...
您可以在c-rex找到更多信息。