Quebrando planilhas pesadas com Python e Openpyxl: uma solução prática para o problema da performance
Em muitas empresas, o Excel continua sendo a ferramenta central para armazenar, analisar e compartilhar dados.
Mas com o tempo, o que começa como uma planilha simples pode crescer até se tornar um arquivo de centenas de MB, com dezenas de abas, formatações complexas e histórico acumulado.
O resultado é conhecido por muitos:
Demora para abrir o arquivo.
Travamentos frequentes.
Dificuldade para compartilhar e manter o documento.
Perda de produtividade e risco de erros.
Essa situação foi o gatilho para desenvolver uma solução que aliviasse o problema sem depender de licenças adicionais, migrações para sistemas complexos ou ferramentas caras.
Por que não IA?
Antes de entrar na parte técnica, vale uma comparação importante:
Hoje fala-se muito em resolver tudo com agentes de IA. Eles são ótimos para lidar com texto, contexto e tomada de decisão flexível, mas aqui o desafio era outro:
Copiar milhares de células com fidelidade absoluta.
Preservar estilos, mesclagens, larguras de colunas, validações e imagens.
Garantir repetibilidade, precisão e zero “alucinação”.
Ou seja: era um problema determinístico.
E quando a regra é clara, a IA não é a melhor ferramenta. É aqui que entra o Python com openpyxl.
A solução em Python com openpyxl
A ideia foi simples: quebrar a planilha-mestre em várias planilhas menores e, ao mesmo tempo, gerar um catálogo consolidado.
Objetivos do script:
Criar uma pasta com arquivos individuais (uma planilha para cada aba relevante).
Incluir automaticamente uma aba de “modelos” em cada arquivo.
Gerar um catálogo central com algumas abas essenciais copiadas do arquivo original.
Preservar conteúdo + formatação + dimensões sempre que possível.
Ignorar abas que não são relevantes (usando prefixos configuráveis).
import os
import openpyxl
EXCEL_ORIGINAL = "planilha.xlsx"
PASTA_SAIDA = "pasta/"
ABA_MODELOS = "MODELOS"
ABAS_CATALOGO = ["CAD. PA", "COD MP INSUMOS"]
os.makedirs(PASTA_SAIDA, exist_ok=True)
# Abre o arquivo principal
wb = openpyxl.load_workbook(EXCEL_ORIGINAL)
# Cria arquivos separados por aba
for nome_aba in wb.sheetnames:
if nome_aba.startswith("AP"): # ignora prefixo
continue
ws = wb[nome_aba]
novo = openpyxl.Workbook()
destino = novo.active
destino.title = nome_aba
# Copia conteúdo
for r in ws.iter_rows():
for c in r:
destino[c.coordinate].value = c.value
# Adiciona aba MODELOS
ws_modelos = wb[ABA_MODELOS]
novo.create_sheet(ABA_MODELOS)
for r in ws_modelos.iter_rows():
for c in r:
novo[ABA_MODELOS][c.coordinate].value = c.value
novo.save(f"{PASTA_SAIDA}/{nome_aba}.xlsx")
Esse é apenas um esqueleto simplificado.
No projeto real foram adicionados recursos como:
Preservação de estilos, merges e validações.
Tratamento em lotes para reduzir uso de memória.
Funções de “recarregamento” em caso de erro.
Uso de gc.collect() em pontos críticos.
Resultados alcançados
Arquivos leves e ágeis: abrir passou a levar segundos, em vez de minutos.
Maior confiabilidade: cada planilha tem escopo claro, sem sobrecarga.
Automação replicável: sempre que o arquivo-mestre é atualizado, basta rodar o script.
Produtividade da equipe: menos tempo esperando abrir um Excel, mais tempo produzindo.
Lições aprendidas
Nem tudo precisa de IA: problemas determinísticos pedem ferramentas determinísticas.
Automatizar é melhor que remendar: cortar manualmente a planilha teria funcionado uma vez, mas não resolveria no longo prazo.
openpyxl é subestimado: é uma biblioteca robusta, capaz de lidar com grande parte da lógica de manipulação de arquivos Excel em Python.
Conclusão
Planilhas pesadas são um problema real em muitas empresas.
Com um pouco de código e a ferramenta certa, é possível aliviar esse gargalo e ganhar performance sem migrar para soluções mais complexas.
Às vezes, o ganho de produtividade não está em trocar de ferramenta, mas em repensar a forma como usamos as que já temos.