Я работаю над шаблоном Excel с форматированием и использую python для вставки данных в шаблон.

Форматирование оказывается действительно странным. Некоторые из столбцов становятся неформатированными, но другие позже все еще отформатированы, и если я изменю цвет текста некоторых столбцов, то эти столбцы будут иметь правильный цвет фона строк, а другие нет.

Во всяком случае, это странно.

То, что я хотел бы, - это способ увидеть (не очень хорошо), что Excel думает, что делает. Может быть, что-то смутно HTML-иш? Несколько десятилетий назад вы могли делать это в текстовых редакторах (я имею в виду эпоху Word Perfect 4.2).

1 ответ1

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 хранит форматы 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

Облегчает просто иметь список строк в моем скрипте и использовать его как шаблон. Мне больше не нужен шаблон, и поскольку у нас есть структурная спецификация для макета и форматирования, никто не может случайно "улучшить" его. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .