quinta-feira, 11 de setembro de 2025

📑➡️📊 Automação Python com GUI (Tkinter): Organizador Inteligente de Notas Fiscais XML 📑➡️📊

Resumo rápido: Neste post vamos criar uma automação em Python com interface gráfica (Tkinter GUI) que lê todos os arquivos XML de notas fiscais de uma pasta, extrai os dados principais (CNPJ, Razão Social, Número da NF, Data e Valor Total) e gera um relatório Excel prontinho para análise. Tudo explicado passo a passo, linha a linha, em linguagem para leigos. 🚀


Por que essa automação é útil para sua empresa? 🤔

  • Processa dezenas ou centenas de notas fiscais em segundos.

  • Evita o trabalho manual de abrir XML por XML.

  • Garante padronização e precisão nos relatórios.

  • Qualquer colaborador pode usar, pois tem uma interface gráfica simples.


O que você terá com este projeto ✅

  1. Um programa com janela gráfica para selecionar a pasta com notas fiscais XML.

  2. Extração automática dos dados de cada nota.

  3. Geração de um arquivo relatorio_notas.xlsx com todas as notas organizadas.

  4. Log visual dentro da própria janela, mostrando o que foi processado.

  5. Código comentado linha por linha + instruções de instalação.


Pré-requisitos 🛠️

  • Windows com Python 3.8 ou superior instalado.

  • Dependências que devem ser instaladas no terminal:

pip install pandas openpyxl lxml

Observação: a biblioteca tkinter já vem instalada por padrão no Python do Windows.


Estrutura dos arquivos XML

A automação foi feita para ler as NF-e padrão (modelo nacional). Os dados extraídos serão:

  • CNPJ do emitente

  • Razão Social do emitente

  • Número da Nota Fiscal

  • Data de emissão

  • Valor Total da NF


Código completo (salve como organizador_nfe_gui.py) 💻

# organizador_nfe_gui.py
registros = [] # 17: lista para guardar os dados
for arquivo in os.listdir(pasta): # 18: percorre todos os arquivos da pasta
if arquivo.lower().endswith(".xml"): # 19: só processa os que terminam com .xml
caminho = os.path.join(pasta, arquivo) # 20: monta caminho completo do arquivo
dados = extrair_dados(caminho) # 21: extrai dados do XML
if dados:
registros.append(dados) # 22: adiciona o resultado na lista
log_widget.insert(tk.END, f"✔ Processado: {arquivo}\n") # 23: escreve no log
else:
log_widget.insert(tk.END, f"❌ Erro ao ler: {arquivo}\n") # 24: mostra erro no log
log_widget.see(tk.END) # 25: rola o log para baixo

if registros: # 26: se encontrou dados
df = pd.DataFrame(registros) # 27: cria DataFrame com todos os dados
saida = os.path.join(pasta, "relatorio_notas.xlsx") # 28: define o nome do arquivo de saída
df.to_excel(saida, index=False) # 29: salva em Excel
messagebox.showinfo("Sucesso", f"Relatório gerado em:\n{saida}") # 30: avisa o usuário
else:
messagebox.showwarning("Aviso", "Nenhum XML válido encontrado.") # 31: avisa que não achou nada

# 32: função para iniciar a interface gráfica
def iniciar_gui():
root = tk.Tk() # 33: cria janela principal
root.title("Organizador de Notas Fiscais") # 34: título da janela
root.geometry("700x500") # 35: tamanho da janela

pasta_var = tk.StringVar() # 36: variável para guardar a pasta escolhida

def escolher_pasta():
caminho = filedialog.askdirectory() # 37: abre diálogo para escolher pasta
if caminho:
pasta_var.set(caminho) # 38: guarda a pasta escolhida

tk.Label(root, text="Pasta com XMLs:").pack(anchor="w", padx=10, pady=5) # 39: rótulo
tk.Entry(root, textvariable=pasta_var, width=80).pack(anchor="w", padx=10) # 40: campo de texto
tk.Button(root, text="Selecionar Pasta", command=escolher_pasta).pack(anchor="w", padx=10, pady=5) # 41: botão

log_text = scrolledtext.ScrolledText(root, height=20) # 42: área de texto rolável
log_text.pack(fill="both", expand=True, padx=10, pady=10) # 43: adiciona área de log

def rodar():
if not pasta_var.get(): # 44: verifica se a pasta foi escolhida
messagebox.showwarning("Aviso", "Selecione a pasta com XMLs!") # 45: alerta
return
processar_xmls(pasta_var.get(), log_text) # 46: chama a função principal

tk.Button(root, text="Gerar Relatório", command=rodar, bg="#4CAF50", fg="white", font=(None, 12)).pack(pady=10) # 47: botão principal

root.mainloop() # 48: mantém a janela aberta

# 49: executa a GUI quando rodar o script
if __name__ == "__main__":
iniciar_gui()

Explicação linha por linha (para leigos) 🧾

  • 1 a 5: importamos bibliotecas que vão permitir manipular arquivos, Excel, XML e criar a interface gráfica.

  • 6 a 15: função extrair_dados abre cada XML e busca os campos desejados (CNPJ, Razão Social, número da NF, data e valor). Se algo falhar, retorna vazio.

  • 16 a 31: função processar_xmls percorre todos os arquivos .xml da pasta, extrai dados de cada um e guarda numa lista. No final, gera um Excel com todos os dados.

  • 32 a 48: função iniciar_gui monta a janela do programa com campo para escolher a pasta, botão para iniciar e log visual.

  • 49: garante que a interface só abre quando rodamos o arquivo direto.


Como usar ✅

  1. Salve o código acima no arquivo organizador_nfe_gui.py.

  2. Abra o terminal e instale as dependências:

pip install pandas openpyxl lxml
  1. Execute o programa:

python organizador_nfe_gui.py
  1. Na janela que abrir:

    • Clique em Selecionar Pasta e escolha a pasta onde estão os XMLs.

    • Clique em Gerar Relatório.

    • O programa mostrará no log o que foi processado e criará relatorio_notas.xlsx dentro da pasta.


Cuidados ⚠️

  • Use apenas XMLs de NF-e oficiais (padrão SEFAZ).

  • Faça testes em uma pasta com poucas notas antes de processar lotes grandes.

  • O Excel gerado pode ser aberto em qualquer versão do Microsoft Excel (2010 em diante).


Possíveis melhorias futuras 🔧

  • Extração de mais campos (chave da nota, impostos, produtos detalhados).

  • Exportação para CSV ou banco de dados.

  • Filtro por data ou valor.

  • Interface mais completa com barra de progresso.


🚀 Conclusão

Com este programa, você transforma uma tarefa manual e cansativa (abrir cada XML de nota fiscal) em um processo automático e confiável. Em poucos cliques, você tem um relatório Excel pronto para ser usado na contabilidade ou gestão da empresa.


📢 Serviços de Contabilidade

Além de compartilhar automações, também ofereço meus serviços como contador:

  • Abertura de empresas no Simples Nacional;

  • Acompanhamento contábil mensal;

  • Planejamento tributário;

  • Orientação para profissionais de serviços.

👉 Entre em contato e leve eficiência também para a parte contábil da sua empresa! 🤝

Nenhum comentário:

Postar um comentário