我正在制作一个带格式的 Excel 模板,并使用 python 将数据插入模板中。
格式变得非常奇怪。有些列变得没有格式,但其他列后来仍然格式化,如果我更改某些列的文本颜色,那么这些列的行背景颜色会正确,但其他列则不会。
无论如何,这很奇怪。
我想要的是一种可以(以非所见即所得的方式)查看 Excel 认为自己在做什么的方法。也许是一些类似于 HTML 的东西?几十年前,你可以在文字处理器中做到这一点(我的意思是像 Word Perfect 4.2 时代)。
答案1
正如@Blackwood在评论中提到的,.xlsx文件只是一个带有定义文件夹和文件结构的zip文件。如果您想深入了解Excel如何存储格式,请将Excel文件重命名为.zip并将其解压。您将看到如下结构:
_rels
docProps
xl
+-- _rels
+-- worksheets
| +-- sheet1.xml
+-- sharedStrings.xml
+-- styles.xml <-- this is what you are after :-)
+-- workbook.xml
[Content_Types].xml
如果你想了解格式和样式,请查看此文件。一般结构如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<styleSheet
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<numFmts />
<fonts />
<fills />
<borders />
<cellStyleXfs />
<cellXfs />
<cellStyles />
</styleSheet>
我省略了每个元素的内容,但numFmts
元素存储了数字(和日期等)格式。您还可以在这里找到格式的内部 ID。让我们看看最简单的内容:
<numFmts count="1">
<numFmt formatCode="GENERAL" numFmtId="164"/>
</numFmts>
仅默认:我们有一种格式,即“GENERAL”格式。填充格式和背景颜色存储在元素中fills
。我做了一个简单的例子:
<fills count="1">
<fill>
<patternFill patternType="solid">
<fgColor rgb="FF00FF00"/>
<bgColor rgb="FF33CCCC"/>
</patternFill>
</fill>
</fills>
在这里您可以看到patternType
您可以指定的颜色值。也许您想发布您正在使用的 Python 包,因为大多数包都能够编写此类格式信息以及设置列宽。我放弃了项目的模板,而是使用一个非常简单的 DSL 直接从 Python 编写所有内容,该 DSL 描述了我的脚本解析的文本行中的单元格条目。看起来像这样:
<addr>|<content>|<format>|<alignment>|<color>
example:
C2|=A2*B2|#0.00|right|#0000FF@#CCCCCC
A1|"Text"||center|#000000
只需在脚本中列出字符串列表并将其用作模板即可。我不再需要模板,而且由于我们有布局和格式的结构规范,所以没有人会意外“改进”它。:-)