Como automatizar relatórios com Python? Este código lê suas planilhas, cria relatórios e envia eles por email

Neste artigo você vai aprender a automatizar relatórios com Python e o envio deles por e-mail com um código de 12 linhas.

Vamos ver como é possível criar relatórios a partir de dados em Excel e enviá-los automaticamente por e-mail usando o Outlook. Paraisso, vamos usar as bibliotecas Pandas e win32com.

Para fazer o download do(s) arquivo(s) utilizados na aula, preencha com o seu e-mail:

Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.

Por que automatizar relatórios com Python?

Automatizar a criação e o envio de relatórios elimina a necessidade de criar e enviar arquivos manualmente. Por isso, a automação de relatórios economiza tempo.

Outros pontos importantes são:

  • Eficiência: Gera relatórios personalizados para cada cliente ou área com um clique.
  • Escalabilidade: Funciona para bases pequenas mas também com milhares de linhas.
  • Personalização: Permite criar indicadores, como valores totais, e anexos específicos.
  • Integração: Usa o Outlook para envio sem configurações complexas de autenticação.

Essa abordagem é ideal para gerentes, analistas ou qualquer profissional que precise enviar relatórios periódicos.

Como configurar o ambiente?

Pra começar, você precisará das bibliotecas Pandas e openpyxl para manipular arquivos Excel, e pywin32 para integrar com o Outlook. Siga os passos:

  1. Instale as bibliotecas: pip install pandas openpyxl
    • A biblioteca win32com (parte do pywin32) geralmente já está incluída no Python para Windows, mas se necessário instale com: pip install pywin32
  2. Verifique o Outlook: Certifique-se de que o Outlook está instalado e configurado com uma conta de e-mail (pode ser um Gmail configurado no Outlook).

Como criar o código de automação?

O script abaixo realiza a automação completa: lê uma base de dados em Excel, filtra por cliente, gera relatórios personalizados e envia e-mails com anexos.

A base de dados deve ter colunas como "Cliente" e "Valor Total".

Python
import pandas as pd
import win32com.client as client
import os

# Ler a base de dados
tabela = pd.read_excel("base_dados.xlsx")

# Criar lista de clientes únicos
clientes = tabela["Cliente"].unique()

# Conectar ao Outlook
outlook = client.Dispatch("Outlook.Application")

# Para cada cliente, gerar relatório e enviar e-mail
for cliente in clientes:
    # Filtrar dados do cliente
    tabela_cliente = tabela[tabela["Cliente"] == cliente]
    
    # Calcular valor total
    valor_total = tabela_cliente["Valor Total"].sum()
    
    # Gerar relatório em Excel
    nome_arquivo = f"relatorio_{cliente.replace(' ', '')}.xlsx"
    tabela_cliente.to_excel(nome_arquivo, index=False)
    
    # Criar e-mail
    email = outlook.CreateItem(0)  # 0 indica um e-mail
    email.To = f"pythonimpressionador+{cliente.lower().replace(' ', '')}@gmail.com"
    email.Subject = f"Relatório da empresa {cliente}"
    email.Body = f"""
    Olá {cliente},
    Segue em anexo o relatório completo.
    Valor total: R$ {valor_total}
    Atenciosamente,
    Python L.
    """
    
    # Adicionar anexo com caminho completo
    caminho_arquivo = os.path.join(os.getcwd(), nome_arquivo)
    email.Attachments.Add(caminho_arquivo)
    
    # Enviar e-mail
    email.Send()

Explicação do código:

  • Leitura da base: pd.read_excel carrega o arquivo Excel (ex.: base_dados.xlsx).
  • Clientes únicos: tabela["Cliente"].unique() cria uma lista com valores únicos da coluna "Cliente" (ex.: Empresa A, Empresa B, Empresa C).
  • Filtro por cliente: Para cada cliente, filtra a tabela com tabela[tabela["Cliente"] == cliente].
  • Cálculo de indicadores: Soma a coluna "Valor Total" com .sum().
  • Geração de relatórios: to_excel cria um arquivo Excel para cada cliente, sem o índice (index=False).
  • Envio de e-mail: Usa win32com para criar um e-mail no Outlook, definir destinatário, assunto, corpo e anexo, e enviar com .Send().
  • Caminho do anexo: os.path.join concatena o caminho do diretório atual (os.getcwd()) com o nome do arquivo para garantir compatibilidade com o Outlook.

Se você quer aprender a usar pandas em Python do zero, passo a passo, confira nosso artigo introdutório.

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Começar agoraSeta para a direita
Fundo PythonTelas Python
Luz Python

Como personalizar o relatório?

Como adicionar mais indicadores ou gráficos?
Além do valor total, você pode personalizar o relatório:

  • Indicadores: Calcule médias, máximos, mínimos, etc., usando métodos como tabela_cliente["Valor Total"].mean().
  • Gráficos: Use bibliotecas como Matplotlib ou Seaborn para criar gráficos e salvá-los como imagens para incluir no e-mail.
  • Corpo do e-mail: Adicione mais variáveis no corpo, como um resumo de vendas ou destaques.

Exemplo de cálculo adicional:

Python
valor_medio = tabela_cliente["Valor Total"].mean()
email.Body = f"""
Olá {cliente},
Segue em anexo o relatório completo.
Valor total: R$ {valor_total}
Valor médio: R$ {valor_medio:.2f}
Atenciosamente,
Python L.
"""

O que fazer se o e-mail não chegar?

Por que o e-mail pode demorar ou não aparecer?
Se o e-mail não chegar imediatamente:

  • Caixa de saída: Verifique a pasta "Caixa de Saída" no Outlook, pois o envio pode estar em processamento.
  • Configuração do Outlook: Certifique-se de que a conta de e-mail está ativa e configurada corretamente.
  • Erro no código: Confirme que o arquivo Excel foi gerado e que o caminho do anexo está correto.

Conclusão

Vimos aqui que com menos de 20 linhas de código podemos automatizar a criação de relatórios a partir de planilhas do Excel, além do envio desses relatórios por e-mail. Tudo isso usando Python e apenas duas bibliotecas, pandas e win32com.

Essa solução é prática e funcional para empresas que precisam enviar relatórios para diferentes clientes, filiais ou áreas, economizando tempo e mantendo a precisão.

Se quiser desenvolver mais esse código, experimente adicionar gráficos ou mais indicadores personalizados, por exemplo.

E se você gostou desse guia, vai gostar também dos nossos outros conteúdos sobre a biblioteca pandas. Também temos muitos guias e tutoriais sobre Python em geral!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes de Python

Posts mais recentes da Hashtag Treinamentos