---
nome: Planilha Excel
descricao: planilha .xlsx viva, com fórmula de verdade, formato brasileiro e conferência, usando openpyxl
quando: planilha, planilhas, excel, xlsx, csv, google sheets, fórmula, fórmulas, controle de gastos, fluxo de caixa, tabela dinâmica
autor: PrimoCode
---
Planilha boa é VIVA: a pessoa muda um número e o total muda junto. Então conta é
fórmula na célula, nunca um valor que você calculou em Python e colou.

**1. Prepare.** `python3 -m venv .venv && .venv/bin/pip install openpyxl`, e um
script (`gerar_planilha.py`) que dá para rodar de novo a cada ajuste.

**2. Fórmula no openpyxl é em INGLÊS e com vírgula**, mesmo que o Excel da pessoa
mostre em português: escreva `=SUM(B2:B31)`, `=IF(C2>0,"ok","falta")`,
`=VLOOKUP(...)`. O Excel traduz ao abrir (vira `SOMA`, com `;`). Escrever
`=SOMA(B2:B31;...)` no arquivo dá erro.

**3. Estrutura que dura**
- Uma tabela por aba, começando em A1, uma linha de cabeçalho, sem linha em
  branco no meio e sem célula mesclada nos dados.
- Dados crus numa aba, resumo e gráfico em outra.
- Cabeçalho em negrito, `ws.freeze_panes = 'A2'` (o cabeçalho fica parado ao
  rolar), `ws.auto_filter.ref = ws.dimensions`, largura de coluna ajustada.
- Célula que a pessoa preenche com uma cor; célula de fórmula com outra.

**4. Formato brasileiro**
- Dinheiro: `cell.number_format = '"R$" #,##0.00'`. Data: guarde um `date` de
  verdade e use `'DD/MM/YYYY'` — data escrita como texto não ordena nem soma.
- Porcentagem: guarde 0.15 e use `'0%'`.

**5. Gráfico**: `openpyxl.chart` (`BarChart`, `LineChart`, `PieChart`) apontando
para o intervalo com `Reference`. Título e nome de eixo em português.

**6. CSV para o Excel brasileiro**: separador `;`, vírgula decimal e
`encoding='utf-8-sig'`. Sem o BOM, o Excel mostra "SÃ£o Paulo"; com vírgula
como separador, tudo cai numa coluna só.

**7. Ler uma planilha que já existe**: `load_workbook('x.xlsx')` traz as fórmulas;
`data_only=True` traz o último valor calculado (vem `None` se o arquivo nunca
foi aberto num Excel). Salve com OUTRO nome.

**8. Confira antes de entregar.** O openpyxl não calcula fórmula, então:
- reabra o arquivo e percorra as células de fórmula: todo intervalo aponta para
  onde deve, nenhuma referência a linha vazia ou à aba errada;
- com LibreOffice (`soffice --headless --convert-to pdf planilha.xlsx`), abra o
  PDF e procure `#REF!`, `#DIV/0!`, `#NAME?` e `###`;
- teste uma conta à mão: some três valores e compare com o total.
