O script de processamento de extratos bancários visa ler e processar arquivos Excel contendo extratos bancários. Ele realiza operações de desmesclagem de células mescladas, extração de dados relevantes (data, valor e histórico) e cria uma nova planilha com as informações processadas. A planilha resultante inclui placeholders para os campos de "Débito" e "Crédito", e é salva em um novo arquivo.
python
Copy code
import os
import pandas as pd
from openpyxl import load_workbook
def letra_para_indice(letra):
"""Converte a letra de coluna (ex: 'A', 'AA') para índice numérico (ex: 0, 26)."""
letra = letra.upper()
indice = 0
for char in letra:
indice = indice * 26 + (ord(char) - ord('A') + 1)
return indice - 1 # Ajuste para índice zero-based
def desmesclar_planilha(caminho_arquivo):
"""Desmescla e descentraliza células de uma planilha Excel."""
if not os.path.exists(caminho_arquivo):
print(f"Erro: O arquivo '{caminho_arquivo}' não foi encontrado.")
return None
try:
wb = load_workbook(caminho_arquivo)
for sheet in wb.sheetnames:
ws = wb[sheet]
# Desmesclar células
if ws.merged_cells.ranges:
for merged_cell in list(ws.merged_cells):
ws.unmerge_cells(range_string=str(merged_cell))
# Salvar a planilha desmesclada
caminho_desmesclado = caminho_arquivo.replace(".xlsx", "_desmesclado.xlsx")
wb.save(caminho_desmesclado)
print(f"Planilha desmesclada salva em: {caminho_desmesclado}")
return caminho_desmesclado
except Exception as e:
print(f"Erro ao desmesclar a planilha: {e}")
return None
def processar_extrato():
print("=== Processador de Extratos Bancários ===")
# Perguntar o caminho do arquivo ao usuário
caminho_arquivo = input("Digite o caminho completo do arquivo Excel (.xlsx): ").strip()
# Validar e desmesclar a planilha
caminho_desmesclado = desmesclar_planilha(caminho_arquivo)
if not caminho_desmesclado:
print("Erro ao desmesclar a planilha. Interrompendo o processamento.")
return
# Abrir a planilha processada
try:
sheet = pd.read_excel(caminho_desmesclado, sheet_name=0)
except Exception as e:
print(f"Erro ao abrir a planilha desmesclada: {e}")
return
# Configurar colunas fixas
coluna_data_letra = 'D'
coluna_valor_letra = 'AT'
coluna_historico_letra = 'M'
# Converter letras para índices
try:
coluna_data_idx = letra_para_indice(coluna_data_letra)
coluna_valor_idx = letra_para_indice(coluna_valor_letra)
coluna_historico_idx = letra_para_indice(coluna_historico_letra)
except Exception as e:
print(f"Erro ao converter as colunas: {e}")
return
# Extração dos dados
dados = []
for _, row in sheet.iterrows():
try:
data = row.iloc[coluna_data_idx]
valor = row.iloc[coluna_valor_idx]
historico = str(row.iloc[coluna_historico_idx]) if not pd.isna(row.iloc[coluna_historico_idx]) else ''
dados.append([data, valor, historico])
except IndexError:
print("Linha ignorada devido a dados insuficientes.")
continue
# Criar o DataFrame final
df_resultado = pd.DataFrame(dados, columns=["Data", "Valor", "Historico"])
df_resultado['Debito'] = '' # Placeholder
df_resultado['Credito'] = '' # Placeholder
# Salvar a planilha processada
caminho_saida = caminho_arquivo.replace(".xlsx", "_processado.xlsx")
try:
df_resultado.to_excel(caminho_saida, index=False)
print(f"Planilha processada salva com sucesso em: {caminho_saida}")
except Exception as e:
print(f"Erro ao salvar a planilha: {e}")
# Executar o processador
processar_extrato()