获取 Excel 中的格式信息

获取 Excel 中的格式信息

我正在制作一个带格式的 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

只需在脚本中列出字符串列表并将其用作模板即可。我不再需要模板,而且由于我们有布局和格式的结构规范,所以没有人会意外“改进”它。:-)

相关内容