11 minutos de leitura

Como automatizar o Excel com Python

Por Juliano Faccioni
Conteúdos do artigo

Você já ouviu falar na biblioteca openpyxl? Neste artigo, você irá aprender a utilizá-la para abrir, modificar, salvar e formatar arquivos Excel com Python.

O Excel é uma das principais ferramentas utilizadas no mundo inteiro para armazenar, organizar e analisar dados. Do gerente de negócios ao analista de dados, muitos profissionais utilizam-no cotidianamente, com objetivos específicos.

Porém, o que poucos sabem é da possibilidade de integração do Excel com Python, de forma que essa linguagem de programação faça virtualmente qualquer tarefa tradicional do Excel.

A seguir, veremos como utilizar Python para automatizar arquivos Excel. Mais especificamente, utilizaremos a biblioteca openpyxl para abrir, editar, formatar e salvar um arquivo desse programa.

Portanto, partiremos do pressuposto de que você já está familiarizado com o básico de Python. Do contrário, recomendamos o curso Python Starter, disponível em qualquer uma das trilhas da Asimov Academy.

Conhecendo a biblioteca openpyxl para integrar Excel com Python

Conforme dissemos anteriormente, usaremos a biblioteca openpyxl para manipular arquivos Excel com Python. Se você ainda não tem essa biblioteca em seu ambiente de Python, será necessário instalá-la com o seguinte comando no seu terminal ou prompt de comando:

pip install openpyxl

A partir de agora, poderemos importar a biblioteca nos nossos scripts de Python. Vamos fazer um teste inicial com o código abaixo:

import openpyxl
wb = openpyxl.Workbook()
print(wb.sheetnames)
# output: ['Sheet']

O openpyxl utiliza o conceito de Workbooks e Sheets. Um Workbook representa uma planilha inteira, equivalente a um arquivo Excel no seu computador, enquanto um Sheet representa uma das abas dessa planilha.

No código acima, iniciamos um Workbook e exibimos o nome das suas abas com wb.sheetnames. Como é possível verificar, por padrão, o openpyxl cria uma planilha com uma única aba, chamada “Sheet”.

Já que não utilizamos o comando para salvar a planilha em nenhum momento, note que nenhum arquivo Excel foi escrito no disco rígido do seu computador. Da forma como o código está escrito, a planilha existe apenas na memória de sua máquina e é esquecida quando o script finaliza sua execução.

Escrevendo um arquivo Excel com Python

Agora, vamos modificar o código para renomear a aba, escrever alguns valores em algumas células e salvar o arquivo em disco:

import openpyxl
wb = openpyxl.Workbook()
aba = wb['Sheet']
aba.title = 'Usuários'
aba['A1'] = 'Nome'
aba['A2'] = 'João'
aba['A3'] = 'José'
aba['B1'] = 'Idade'
aba['B2'] = 25
aba['B3'] = 28
wb.save('Dados.xlsx')

Nesse exemplo, guardamos a aba na variável aba. Conforme demonstrado, utilizamos colchetes para pegar uma aba específica, passando seu nome como string. Logo após, modificamos o nome dessa aba para “Usuários”.

Em seguida, as linhas aba['A1'], aba['A2'] etc. são responsáveis por escrever dados diretamente nas células da aba “Usuários”, utilizando a mesma sintaxe de antes. Após escrevermos os dados, salvamos a planilha com o método wb.save, passando o nome do arquivo de destino como argumento.

Abaixo está a planilha resultante:

Planilha resultante da automatização do Excel com Python
Visualização da planilha Dados.xlsx criada acima

O arquivo de Excel foi escrito na pasta em que o Python está sendo executado. Mas, se quiser salvar o arquivo em uma outra pasta específica, será necessário passar o caminho para o método wb.save(). Recomendamos usar o módulo os para fazer operações com pastas e arquivos em Python.

Editando um arquivo Excel existente com Python

Podemos usar o método openpyxl.load_workbook para carregarmos um arquivo Excel diretamente em memória. No exemplo abaixo, vamos abrir o arquivo Dados.xlsx que geramos anteriormente. Observe que é possível acessar e modificar os valores existentes ou escrever valores novos:

import openpyxl
wb = openpyxl.load_workbook('Dados.xlsx')
# pegando a aba com o nome que criamos anteriormente
aba = wb['Usuários']
# Escrevendo dados novos
aba['A4'] = 'Maria'
aba['B4'] = 32
# Editando dados existentes
aba['A3'] = 'Marcos'
aba['B2'] = 39
wb.save('Dados.xlsx')

Perceba que, na última linha, salvamos o arquivo de Excel com o mesmo nome do arquivo antigo. Isso faz com que o arquivo seja sobrescrito. O openpyxl não pede confirmação ao fazer isso, tampouco dá algum tipo de aviso. Ou seja, tome cuidado para não sobrescrever dados importantes!

Abaixo, a nova cara da planilha:

Nova planilha resultante da automatização do Excel com Python
Visualização da planilha Dados.xlsx após modificações

Iterando pelas células de uma planilha

Nos exemplos acima, inserimos valores específicos diretamente nas células da planilha. Contudo, isso não é muito mais prático do que simplesmente editar a planilha diretamente pelo Excel.

E se pudéssemos varrer todos os valores rapidamente? E se quisermos exibir os valores no terminal com uma certa formatação?

Da mesma forma como iteramos sobre listas e dicionários, podemos iterar sobre um Workbook para passarmos por todas as suas células. Aqui vai um exemplo:

import openpyxl
wb = openpyxl.load_workbook('Dados.xlsx')
aba = wb['Usuários']
for linha in aba:
    for celula in linha:
        pos = celula.row, celula.column
        valor = celula.value
 print(f'Célula na posição {pos} tem valor: {valor}')
# output:
# Célula na posição (1, 1) tem valor: Nome
# Célula na posição (1, 2) tem valor: Idade
# Célula na posição (2, 1) tem valor: João
# Célula na posição (2, 2) tem valor: 39
# ...

Como podemos ver, ao iterarmos sobre uma das abas da planilha, nós iteramos sobre suas linhas. Se iterarmos uma segunda vez (agora sobre cada uma das linhas), encontramos cada célula de cada linha. As células possuem diversos atributos; aqui, acessamos e exibimos os atributos row (índice da linha), column (índice da coluna) e value (valor contido pela célula.)

No openpyxl, os índices para as linhas e colunas iniciam em 1, não em 0, como é costume em Python. Isso é uma escolha proposital dos desenvolvedores do openpyxl para evitar confusões com a nomenclatura do Excel: dessa forma, a célula A1 fica na linha de índice 1.

Se preferirmos, podemos iterar por colunas através do método iter_cols():

import openpyxl
wb = openpyxl.load_workbook('Dados.xlsx')
aba = wb['Usuários']
for coluna in aba.iter_cols():
    for celula in coluna:
        pos = celula.row, celula.column
        valor = celula.value
        print(f'Célula na posição {pos} tem valor: {valor}')
# output:
# Célula na posição (1, 1) tem valor: Nome
# Célula na posição (2, 1) tem valor: João
# Célula na posição (3, 1) tem valor: Marcos
# Célula na posição (4, 1) tem valor: Maria
# ...

Formatando células

Cada uma das células dentro de um Sheet possui um estilo de formatação próprio. Sendo assim, podemos acessar e modificar o estilo de células individualmente.

O código abaixo modifica a fonte e a cor de fundo do cabeçalho da tabela. Para isso, vamos importar e usar os objetos Font e PatternFill. Veja também que usamos o método iter_rows() com o argumento max_row=1 para iterar apenas sobre a primeira linha da planilha (isto é, o seu cabeçalho):

import openpyxl
from openpyxl.styles import Font, PatternFill
wb = openpyxl.load_workbook('Dados.xlsx')
aba = wb['Usuários']
for coluna in aba.iter_rows(max_row=1):
    for celula in coluna:
        celula.font = Font(color='000090', italic=True)
        celula.fill = PatternFill('solid', fgColor='DEDEFF')
wb.save('Dados.xlsx')

Esta é a aparência nova da planilha:

Planilha Dados.xlsx após formatação do cabeçalho resultante da automatização do Excel com Python
Visualização da planilha Dados.xlsx após formatação do cabeçalho

Existe uma infinidade de possibilidades para formatação de tabelas de Excel com Python. Recomendamos acessar a documentação do openpyxl para descobrir todas as opções existentes.

Excel com Python: próximos passos

Excel e Python formam uma excelente combinação para potencializar o seu trabalho de armazenamento e análise de dados. Mas você está só começando com o seu aprendizado! Nossa Trilha Python Office inclui uma série de aulas para automatizar diversas tarefas, incluindo uma lição com foco na integração entre Excel e Python e um curso só sobre automatização do Excel. Siga com a gente para aprender cada vez mais!

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial