Obter informações de formatação no Excel

0

Estou trabalhando em um modelo do Excel com formatação e estou usando python para inserir dados no modelo.

A formatação está ficando REALMENTE estranha. Algumas das colunas estão se tornando não formatadas, mas outras ainda estão formatadas, e se eu alterar o textcolor de algumas colunas, essas colunas terão a cor de fundo das linhas correta, mas outras não.

De qualquer forma, é estranho.

O que eu gostaria é uma maneira de ver (de uma maneira que NÃO seja WISIWYG) o que o Excel acha que está fazendo. Talvez algo que fosse vagamente HTML-ish? Décadas atrás, você costumava ser capaz de fazer isso em processadores de texto (quero dizer como Word Perfect 4.2 era).

    
por Brian Postow 18.08.2017 / 20:03

1 resposta

1

Como @Blackwood já mencionado no comentário, um arquivo .xlsx é apenas um arquivo zip com uma pasta e estrutura de arquivos definidas. Se você quiser saber como o Excel armazena a formatação, renomeie um arquivo do Excel para .zip e descompacte-o. Você verá uma estrutura como esta:

_rels
docProps
xl
 +-- _rels
 +-- worksheets
 |    +-- sheet1.xml
 +-- sharedStrings.xml
 +-- styles.xml   <-- this is what you are after :-)
 +-- workbook.xml 
[Content_Types].xml

Se você quiser aprender sobre formatação e estilos, examine este arquivo. A estrutura geral assim:

<?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>

Deixei de fora o conteúdo de cada elemento, mas o elemento numFmts armazena os formatos Número (e Data etc.). Aqui você também encontra o ID interno de um formato. Vamos dar uma olhada no conteúdo mais simples:

    <numFmts count="1">
        <numFmt formatCode="GENERAL" numFmtId="164"/>
    </numFmts>

Apenas os padrões: temos um formato, o formato "GENERAL". O formato de preenchimento e a cor de segundo plano são armazenamentos no elemento fills . Eu fiz um exemplo simples:

    <fills count="1">
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="FF00FF00"/>
                <bgColor rgb="FF33CCCC"/>
            </patternFill>
        </fill>
    </fills>

Aqui você vê os valores patternType que você pode especificar e cor. Talvez você queira postar o pacote Python que está usando, porque a maioria dos pacotes é capaz de escrever essas informações de formatação, além de definir a largura das colunas. Desisti de modelos para o meu projeto e escrevi tudo diretamente do Python usando uma DSL muito simples que descreve uma entrada de célula em uma linha de texto que meu script analisa. Parece assim:

<addr>|<content>|<format>|<alignment>|<color>
example:
  C2|=A2*B2|#0.00|right|#0000FF@#CCCCCC
  A1|"Text"||center|#000000

Torna mais fácil ter apenas uma lista de strings no meu script e usá-lo como modelo. Eu não preciso mais de um template e como temos uma struct spec para o layout e formatação, ninguém pode acidentalmente "melhorar". : -)

    
por 18.08.2017 / 22:11