Как уже упоминалось в комментарии @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
хранит форматы Number (и Date и т.д.). Здесь вы также найдете внутренний идентификатор формата. Давайте посмотрим на самый простой контент:
<numFmts count="1">
<numFmt formatCode="GENERAL" numFmtId="164"/>
</numFmts>
Только значения по умолчанию: у нас есть один формат, "ОБЩИЙ" формат. Формат заливки и цвет фона сохраняются в элементе fills
. Я сделал простой пример:
<fills count="1">
<fill>
<patternFill patternType="solid">
<fgColor rgb="FF00FF00"/>
<bgColor rgb="FF33CCCC"/>
</patternFill>
</fill>
</fills>
Здесь вы видите patternType
вы можете указать, и значения цвета. Возможно, вы захотите опубликовать используемый вами пакет Python, потому что большинство пакетов могут записывать такую информацию о форматировании, а также устанавливать ширину столбца. Я отказался от шаблонов для своего проекта и написал все напрямую из Python, используя очень простой DSL, который описывает запись ячейки в текстовой строке, которую анализирует мой скрипт. Выглядит так:
<addr>|<content>|<format>|<alignment>|<color>
example:
C2|=A2*B2|#0.00|right|#0000FF@#CCCCCC
A1|"Text"||center|#000000
Облегчает просто иметь список строк в моем скрипте и использовать его как шаблон. Мне больше не нужен шаблон, и поскольку у нас есть структурная спецификация для макета и форматирования, никто не может случайно "улучшить" его. :-)