Descrição

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.


Principais Funcionalidades

  1. Desmesclagem de Células: O script remove células mescladas de uma planilha, o que pode ser útil para garantir que os dados fiquem corretamente alinhados.
  2. Extração de Dados: O script busca dados nas colunas de data, valor e histórico, configuradas por letra da coluna (ex.: 'D', 'AT', 'M').
  3. Criação de Nova Planilha: Após processar os dados, ele cria uma nova planilha Excel com os dados extraídos, incluindo placeholders para os campos de débito e crédito.
  4. Validação de Entrada: O script verifica se o caminho do arquivo é válido e se a planilha foi desmesclada corretamente antes de prosseguir com a extração de dados.

Código da Função

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()


Como Funciona


Testes e Considerações