Pular para o conteúdo
APRENDER

Como abrir um arquivo OFX e levar o extrato para o Excel

Como abrir arquivo OFX: veja o que tem dentro, baixe do banco e converta para Excel com um script de 25 linhas, só com a biblioteca padrão do Python.

Doug

Resposta direta

Um arquivo OFX é um arquivo de texto: dá para abrir no Bloco de Notas e ler cada lançamento do extrato, com data, valor, tipo, identificador e descrição. O que ele não é, para o Excel, é uma planilha. Abrir o OFX direto no Excel costuma dar a tela de importação de texto, não colunas prontas, então levar o extrato para a planilha pede um passo de conversão.

Esse passo pode ser manual (Power Query) ou um script curto, mais abaixo, que gera um CSV que o Excel abre direto. Se o objetivo é só somar tarifa bancária, nem precisa converter: o Auditor de Tarifas lê o OFX direto.

O que tem dentro de um arquivo OFX

OFX significa Open Financial Exchange, um formato aberto de troca de dados financeiros, anunciado em 1997. Desde 2019, quando o consórcio do OFX se juntou ao FDX (Financial Data Exchange), a especificação é mantida lá. A extensão é .ofx.

Abaixo, um trecho do arquivo de exemplo desta peça: um extrato fictício do banco 341, com 13 lançamentos em três meses (dezembro de 2024 a fevereiro de 2025). Primeiro o cabeçalho, depois a conta, depois os lançamentos:

OFXHEADER:100
DATA:OFXSGML
VERSION:102

<OFX>
<BANKMSGSRSV1>
<STMTTRNRS>
<STMTRS>
<BANKACCTFROM>
<BANKID>341
<ACCTID>12345-6
</BANKACCTFROM>
<BANKTRANLIST>
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20250110120000[-3:GMT]
<TRNAMT>-10.90
<FITID>1
<MEMO>TAR TED
</STMTTRN>

Cada lançamento fica dentro de um bloco STMTTRN, e os campos que importam para quem trabalha com extrato são cinco:

CampoO que guardaNo trecho acima
TRNTYPETipo do lançamento (DEBIT, CREDIT e outros)DEBIT
DTPOSTEDData em que o banco lançou, no padrão AAAAMMDD seguido de hora e fuso20250110120000[-3:GMT]
TRNAMTValor, com ponto decimal e sinal: saída negativa, entrada positiva-10.90
FITIDIdentificador do lançamento, criado pelo banco1
MEMODescrição que o banco imprimeTAR TED

O sinal do TRNAMT segue o extrato: o exemplo da especificação 1.6 mostra um cheque como -200.00. O FITID aparece nesse exemplo comentado como “Unique ID”, a chave natural para não importar a mesma linha duas vezes. Neste arquivo fictício, porém, ele é 1 nos 13 lançamentos; num extrato real isso não deveria acontecer, e se acontecer o FITID não serve de chave.

OFX 1.x e OFX 2.x: SGML e XML

O exemplo começa com OFXHEADER:100, DATA:OFXSGML e VERSION:102: é um OFX 1.0.2, família 1.x, escrita em SGML. A marca visível do SGML é que muitas tags não fecham: <TRNAMT>-10.90 termina na quebra de linha, sem </TRNAMT>. Só os blocos maiores (STMTTRN, BANKACCTFROM) fecham.

O OFX 2.x é XML: toda tag abre e fecha. Segundo o FDX, a 1.6 foi a última especificação SGML, e o mercado aceita as duas famílias, por isso você ainda recebe OFX 1.x de banco.

Para ler a olho, a diferença é pequena: os campos têm os mesmos nomes. Por programa, ela pesa: um leitor de XML engasga com o 1.x, que não é XML bem formado. Por isso o script mais abaixo procura as tags por padrão de texto e serve para os dois.

Como baixar o OFX no internet banking

O menu muda de banco para banco e de versão para versão, então não vou prometer um caminho que talvez já tenha mudado. O padrão geral: abra a tela de extrato da conta corrente, escolha o período (um mês fechado é mais seguro que “últimos 30 dias”), procure exportar ou baixar e escolha OFX. Com mais de uma conta, baixe um arquivo por conta.

Baixe períodos que não se sobrepõem: se você baixa janeiro inteiro e depois “de 15/01 a 15/02”, os lançamentos de 15 a 31/01 vêm nos dois arquivos e, juntos, contam em dobro.

Três caminhos para levar o OFX ao Excel

1. Abrir direto no Excel. O mais curto e o que mais frustra. Um relato no fórum de respostas da Microsoft descreve o resultado: o Excel só reconhece o arquivo como texto e mostra a caixa de importação de CSV. O relato é de 2019, mas bate com o formato (texto com tags, não uma grade). Limite: cada linha da planilha vira um pedaço de tag, não um lançamento.

2. Power Query. A lista de conectores do Power Query na documentação da Microsoft inclui Texto/CSV, XML, JSON e PDF, mas não tem conector de OFX. Na prática, você carrega o arquivo como texto e monta a transformação à mão (separar linhas por tag, pivotar), ou, no OFX 2.x, tenta o conector de XML. Limite: exige conhecer o Power Query (a consulta depois se reaproveita), e o 1.x, por não ser XML bem formado, não deve passar pelo conector de XML.

3. Um script que gera CSV. Serve quando o volume é recorrente. Limite: pede Python instalado e alguém à vontade para rodar um comando. Em troca, funciona igual para 1.x e 2.x, e o resultado abre no Excel com dois cliques.

Conversor online é um quarto caminho, mas ele recebe o extrato inteiro, com conta e saldo; a política de TI da empresa pode proibir.

Na prática: 13 lançamentos do banco 341 virando planilha

O conversor, em 25 linhas e só com a biblioteca padrão do Python, salvo como ofx_para_csv.py:

"""Converte OFX 1.x (SGML) ou 2.x (XML) em CSV. Uso: python ofx_para_csv.py extrato.ofx saida.csv"""
import csv, html, re, sys

def ler(caminho):
    bruto = open(caminho, "rb").read()
    try:
        return bruto.decode("utf-8-sig")
    except UnicodeDecodeError:
        return bruto.decode("cp1252")  # cabeçalho CHARSET:1252 = Windows-1252 (CP1252)

def campo(bloco, tag):  # 2.x fecha a tag (o valor pode ter várias linhas); 1.x termina na quebra de linha
    m = re.search(rf"<{tag}>(.*?)</{tag}>", bloco, re.S | re.I) or re.search(rf"<{tag}>([^<\r\n]*)", bloco, re.I)
    return html.unescape(" ".join(m.group(1).split())) if m else ""

txt = lambda s: "'" + s if s and s[0] in "=+-@" else s  # descrição com = + - @ viraria fórmula no Excel
texto = ler(sys.argv[1])
blocos = re.findall(r"<STMTTRN>(.*?)</STMTTRN>", texto, re.S | re.I)
with open(sys.argv[2], "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f, delimiter=";")  # ";" e vírgula decimal: o Excel em pt-BR abre direto
    w.writerow(["data", "valor", "tipo", "fitid", "memo"])
    for b in blocos:
        d = campo(b, "DTPOSTED")[:8]
        w.writerow([f"{d[:4]}-{d[4:6]}-{d[6:8]}", campo(b, "TRNAMT").replace(".", ","),
                    campo(b, "TRNTYPE"), txt(campo(b, "FITID")), txt(campo(b, "MEMO") or campo(b, "NAME"))])
print(f"{len(blocos)} lançamentos gravados em {sys.argv[2]}")

Rodando no exemplo (python ofx_para_csv.py extrato_341.ofx saida.csv), o terminal respondeu 13 lançamentos gravados em saida.csv, e o CSV ficou com o cabeçalho e 13 linhas de dado. As primeiras:

data;valor;tipo;fitid;memo
2024-12-20;-25,00;DEBIT;1;TAR MANUTENCAO CESTA SERVICOS
2025-01-05;-29,90;DEBIT;1;TAR MANUTENCAO CESTA SERVICOS
2025-01-10;-10,90;DEBIT;1;TAR TED
2025-01-15;-50000,00;DEBIT;1;TED 50000,00 PAGAMENTO FORNECEDOR

Três escolhas do script: o encoding tenta UTF-8 e cai para CP1252; a descrição que começa com =, +, - ou @ ganha um apóstrofo na frente, para o Excel não a ler como fórmula; o separador é ponto e vírgula com vírgula decimal, padrão do Excel em português (com o Excel em inglês, troque o delimiter para vírgula e remova o .replace).

No Excel, o extrato vira uma tabela comum. No exemplo, as saídas somam R$ 50.270,22, a única entrada é um Pix de R$ 2.500,00 e o saldo líquido do período é de menos R$ 47.770,22. Dá para filtrar e montar tabela dinâmica por mês.

Um uso concreto é a tarifa. Os lançamentos cujo memo começa com TAR somam R$ 216,90. Com o memo na coluna E e o valor na coluna B, =SOMASE(E:E;"TAR*";B:B) devolve esse valor, com sinal negativo. Esse filtro é uma regra sua, feita para o jeito que esse banco descreve a tarifa: a TED de R$ 50 mil, o IOF (R$ 8,32) e os juros de cheque especial (R$ 45,00) ficam fora, o que é correto. Em outro banco, a mesma tarifa pode vir com outro nome e escapar.

Se o objetivo é esse, o Auditor de Tarifas dispensa a conversão: lê o mesmo OFX, soma por banco, mês e tipo e separa o IOF. No exemplo o total também fecha em R$ 216,90, com um lançamento (TAR XPTO SERVICO NOVO, R$ 4,20) marcado para conferência. Atenção: o arquivo que ele grava com --saida contém só as linhas de tarifa e de IOF; não é conversor de OFX para Excel (a TED de R$ 50 mil e o Pix recebido não aparecem nele). Para o extrato inteiro na planilha, o script acima é o caminho.

Problemas comuns

Acento quebrado. Se “ação” aparece como ação, o arquivo foi lido com o encoding errado. Olhe o cabeçalho: CHARSET:1252 quer dizer Windows-1252 (CP1252). O script tenta UTF-8 e, se falhar, CP1252.

Sinal do valor. Alguns sistemas trocam o sinal. Antes de somar, confira uma linha que você conhece.

FITID duplicado. Ou os períodos se sobrepõem (remova a duplicata pelo FITID mais data e valor), ou o banco repete o FITID, como no exemplo, e aí ele sozinho não serve de chave.

Data com fuso. O DTPOSTED do exemplo termina em [-3:GMT]. Sistemas que convertem para UTC podem deslocar o lançamento para o dia anterior, problema que a peça por que a conciliação bancária não fecha detalha. O script lê só os oito primeiros dígitos, então a data fica como o banco imprimiu.

PDF não é OFX. Se o banco só entrega PDF, não há OFX para abrir; extrair lançamentos de PDF é outro problema, com outro tipo de erro (OCR, colunas desalinhadas). Procure a opção de exportação antes de aceitar o PDF.

Onde ajuda e onde quebra

Ajuda em extrato recorrente: o script é feito uma vez e roda todo mês, e o CSV qualquer ferramenta lê.

Quebra em quatro situações. OFX fora do padrão (campo faltando, descrição num campo que não é MEMO nem NAME): o script devolve campo vazio, não erro, então confira a contagem contra o extrato. Várias contas no mesmo arquivo: tudo cai numa tabela sem a coluna da conta. Classificação: o script não diz o que é tarifa, Pix ou TED, só repassa a descrição. Decisão: o CSV é dado, não conciliação, e quem fecha o mês continua sendo você.

O script também não valida saldo: um OFX truncado gera um CSV menor sem avisar. Compare contagem e saldo com o extrato do banco.

Perguntas relacionadas

O que é um arquivo OFX?

É um arquivo de texto no formato Open Financial Exchange, usado para trocar dados financeiros entre bancos e sistemas. Num extrato, cada lançamento traz data, valor, tipo, um identificador e a descrição. Bancos brasileiros costumam oferecer o OFX na exportação do extrato, para importar em ERP, sistema contábil ou planilha.

Como abrir arquivo OFX no computador?

Abra no Bloco de Notas (botão direito, “Abrir com”) para ler o conteúdo. Para ver em colunas, é preciso converter para CSV ou montar uma importação com Power Query. Abrir direto no Excel costuma mostrar a caixa de importação de texto, não uma tabela de lançamentos. Já ERPs e sistemas contábeis importam o OFX sem conversão.

Qual a diferença entre OFX 1.x e 2.x?

O 1.x usa SGML, em que muitas tags não fecham, e vai até a especificação 1.6. O 2.x usa XML, com toda tag aberta e fechada. Os campos de lançamento têm os mesmos nomes, e o mercado aceita as duas famílias, então um leitor robusto precisa ler ambas.

Dá para converter OFX para Excel sem programar?

Dá, com Power Query ou com um conversor online. Não existe conector de OFX na lista do Power Query, então a consulta é montada à mão. O conversor online é rápido, mas envia o extrato, com conta e saldo, para um terceiro, o que pode violar a política de TI da empresa.

Próximo passo

Se o seu objetivo é saber quanto o banco cobra de tarifa, pule a conversão: o Auditor de Tarifas lê o OFX direto. É grátis e aberto; o tutorial como instalar uma skill no Claude mostra a instalação.

Se o objetivo é fechar a conciliação, veja conciliação bancária com IA, sobre como extrato e razão se casam, e por que a conciliação bancária não fecha, sobre as cinco causas das pendências, incluindo o arquivo torto.

A Conciliação Bancária lê o mesmo OFX e o cruza com o razão do ERP; é grátis e aberta, como o Auditor.

Guia grátis PDF · 21 páginas

O guia do operador: IA para finanças, do chão à aplicação.

A escada inteira do Aprender num PDF só. O que destrava a sua rotina, sem teoria.

  • Um exemplo brasileiro real em cada conceito (NFS-e, OFX, plano de contas)
  • O que a IA faz, e o que ela NÃO faz no seu fechamento
  • Da primeira conversa ao agente que concilia o seu extrato
  • Conciliação, FP&A e régua de cobrança aplicados

Recebe no seu e-mail

Confirma no link que chega. Sem spam, cancela quando quiser.