Criar arquivo Txt no Excel com campos de tamanho fixo

Planilha de ordem de carregamento de cargas – Excel
5 de junho de 2019
Janela de verificação imediata VBA Excel capa
6 Maneiras de usar a Janela de Verificação Imediata no VBA
15 de julho de 2019

Criar arquivo Txt no Excel com campos de tamanho fixo

Neste post você verá como criar um arquivo txt no Excel com campos de tamanho fixo.

É comum na comunicação entre empresas e bancos, planos de saúde e outras empresas o uso de arquivos de remessa e retorno.

Como por exemplo nesta tabela deste arquivo de layout do banco Bradesco:

Esses arquivos normalmente são de dois tipos, separados por ponto e vírgula, os arquivos chamados CSV, ou como no caso deste artigo, arquivos com tamanho fixo para cada campo.

No caso deste arquivo nós temos um exemplo de arquivo de remessa aonde cada tipo de campo tem um tamanho pré-definido que deve ser preenchido com espaços em branco no caso de campos de texto, com zeros à esquerda no caso de valores, e uma formatação de AAAAMMDD no caso de campos de data.

A melhor forma é que o arquivo seja gerado automaticamente por um sistema, mas às vezes o mesmo não atende, ou precisamos destas informações rapidamente e não podemos esperar o TI, como no caso de informações para o fiscalizações.

A seguir veremos como criar do zero uma planilha que gera arquivos txt com tamanhos fixos no Excel.

Criando a base de dados

A sua base de dados deve estar bem estruturada, a sua lista no Excel deverá conter os campos que você irá precisar no seu arquivo.

Um dos princípios básicos é que cada coluna só pode conter um tipo de dado. Se uma planilha é de CPF, ela só poderá conter CPFs, se é Nome, somente nomes e assim por diante, assim teremos uma lista normalizada de dados.

Criar arquivo delimitado txt 1

Selecione esta lista de dados e pressione ALT+T+TA, formatando a lista como uma tabela de dados, ou em Página Inicial -> Formatar como Tabela.

Clique na guia Design da Tabela e em Propriedades altere o nome da tabela para tbPlano, mas claro, pode escolher o nome que desejar. Esta será a nossa base de dados para a geração do arquivo Txt.

Lista DE PARA de caracteres para remover acentuações

É normal em arquivos delimitados que os campos sejam enviados sem acentuações ou caracteres como Ç.

Por isso iremos criar uma tabela DE PARA, aonde iremos dizer por qual caractere os campos deverão ser substituídos.

Como na imagem pressione ALT+T+TA para criar uma tabela com estes dados, altere o nome da tabela criada para tbCaracteres.

Para extrair os caracteres usei os valores nas células

  • D1:  àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ
  • D2: aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN

E nas colunas da tabela usei:

  • Caracter: =EXT.TEXTO($D$1;LIN()-1;1)
  • Substituto: =EXT.TEXTO($D$2;LIN()-1;1)

Ao aumentar o tamanho da tabela essas fórmulas preenchem uma lista de DE PARA com cada um dos caracteres.

Com estas listas prontas já podemos tratar as informações no Editor do Power Query.

Remover acentuações e importar tabelas

Seleccione a tabela tbPlano, na planilha Dados e clique na guia Dados -> Da Tabela/Intervalo

Será aberto o Editor do Power Query com as informações da tabela que servirá de base para a geração do arquivo texto no Excel.

Criar arquivo delimitado txt 9

  • Perceba o nome da Tabela importada do Excel na esquerda, Consultas, e também na direita as Etapas Aplicadas.
  • Clique no X no Tipo Alterado nas Etapas Aplicadas, para excluir esta etapa, iremos formatar os campos conforme abaixo:

Nome: Tipo Texto

Valor: Tipo Texto

CPF: Tipo Texto

Matrícula: Tipo Texto

Inclusão: Tipo Data

Criar arquivo delimitado txt 11

  • Esta atividade foi realizada para que os dados sejam mais facilmente tratados nas etapas seguintes.
  • Clique em Fechar e Carregar Para, mas não carregue os dados para o Excel ainda.
  • Clique na planilha Aux, aonde temos a Tabela tbCaracteres. Selecione a tabela e na guia Dados selecione a opção Da Tabela/Intervalo, iremos importar esta tabela para o PQ, ela servirá para removermos as acentuações do nome da tabela principal.

Criar arquivo delimitado txt 10

Agora vamos tratar essa tabela para formatar ela como uma lista, esta lista servirá para substituirmos os caracteres especiais por caracteres da coluna Substituto no campo Nome da consulta tbPlano.

  • Clique em Adicionar Coluna -> Coluna Personalizada, mude o nome para Lista e coloque a fórmula M abaixo:

= {[Caracter],[Substituto]}

  • Será criada uma coluna com o nome Lista que conterá uma List com a união dos dois campos.
  • Clique em tbPlano
  • Clique em Adicionar Coluna -> Coluna personalizada, digite a fórmula M abaixo:

= List.ReplaceMatchingItems(Text.ToList([Nome]),tbCaracteres[Lista])

  • Analisando por partes temos a função List.ReplaceMatchingItens, que basicamente substitui os caracteres contidos na lista do parâmetro 1 : Text.ToList([Nome]), pelos caracteres do parâmetro 2, que também é uma lista tbCaracteres[Lista], acessando assim a lista que criamos do DE PARA de caracteres para remover os caracteres especiais. A função Text.ToList converte uma coluna de Texto em uma lista de caracteres, permitindo assim o uso da função List.ReplaceMatchingItens que trabalha apenas com listas nos parâmetros.

Criar arquivo delimitado txt 12

  • Clique no ícone superior direito da coluna que foi criada com o nome Nome caracteres e clique na segunda opção, Extrair Valores

Criar arquivo delimitado txt 13

  • Na tela seguinte não marque nenhum delimitador para concatenar valores de lista e clique em OK.
  • Serão extraídos os dados da coluna e estes dados virão sem os caracteres especiais e acentuações do DE PARA.

Criar arquivo delimitado txt 15

  • Clique novamente em Adicionar Coluna -> Coluna personalizada, chame-a de Nome formatado. Com a fórmula abaixo iremos colocar as letras todas em maiúsculo e também iremos preencher com espaços em branco até o tamanho de caracteres à direita do nome, ficando este campo então sempre com  caracteres.

= Text.Upper([Nome caracteres]&Text.Repeat(” “,50-Text.Length([Nome caracteres])))

  • A função Text.Upper recebe como parâmetro uma coluna de Texto e a transforma em caracteres maiúsculos.
  • A função Text.Repeat recebe dois parâmetros, qual o caractere que será repetido, no caso ” “, espaço em branco, e quantas vezes será repetido, no caso – o tamanho Text.Length do campo Nome caracteres.

Criar arquivo delimitado txt 16

Veja que a coluna exibe … pois os dados não estão todos aparecendo, são os espaços em branco.

Criar arquivo delimitado txt 17

Agora iremos tratar os outros campos para preencher cada campo com um exemplo diferente de formatação com tamanho fixo de caracteres que é comum em arquivos texto, para que possamos gerar facilmente no Excel este arquivo.

Formatar Valores para arquivos Texto no Excel

No formato do arquivo que estamos usando como exemplo, os valores serão preenchidos com 0 à esquerda do número, totalizando a coluna com 10 caracteres sem vírgula, a vírgula deve ser excluída.

Por exemplo: 135,47 ficaria 0000013547

Desta forma, criaremos uma coluna personalizada para este campo e deixaremos neste formato.

  • Clique em Adicionar Coluna -> Coluna personalizada
  • Coloque o nome de Valor Formatado e inclua a fórmula M abaixo:

=Text.Repeat(“0”, 10-Text.Length(Text.Replace([Valor], “,”, “”)))&Text.Replace([Valor], “,”, “”)

Criar arquivo delimitado txt 18

  • A função Text.Repeat como vimos repete um caractere x vezes, e a função Text.Replace realiza a substituição de um caractere por outro, ela recebe 3 parâmetros, o texto com os caracteres à substituir, o segundo é o caractere que será substituído, e o terceiro o caractere que o substituirá, no caso o texto é a coluna [Valor], “,” é a vírgula que será substituída e “” vazio que substituirá a vírgula.
  • Concatenado a esta fórmula com o & temos Text.Replace novamente, agora apenas com o valor, então temos 10 menos o tamanho do campo valor sem a vírgula, concatenado com o campo valor sem a vírgula, totalizando assim os 10 caracteres.

Criar arquivo delimitado txt 19

Formatação do CPF para arquivo de texto com tamanho fixo

No caso do CPF temos na nossa tabela de dados um CPF formatado com todos os pontos e o traço característicos, eles são caracteres na coluna, temos que removê-los.

Exemplo: 135.447.895-21 ficaria 13544789521

Para isso iremos criar uma coluna personalizada e remover os caracteres que não precisamos.

  • Clique em Adicionar Coluna -> Coluna Personalizada
  • Adicione a fórmula M abaixo, que irá substituir os caracteres . e –

= Text.Replace(Text.Replace([CPF], “.”, “”), “-“, “”)

Criar arquivo delimitado txt 20

  • Assim como vimos anteriormente a função Text.Replace realiza a substituição de caracteres. Perceba que assim como no Excel, colocamos uma função usando a outra como parâmetro, realizando assim primeiro a substituição do “.” pelo “” e depois do “-” pelo “” criando a coluna CPF Formatado.

Criar arquivo delimitado txt 22

Formatando o campo matrícula para a geração do arquivo Txt no Excel

O campo Matrícula é um campo do tipo Texto no arquivo Txt, por isso devemos preencher com espaços em branco à direita conforme o layout que estamos seguindo como padrão.

Este campo possui o tamanho fixo de 10 caracteres, por exemplo:

A matrícula “13245” ficaria ”     13245″

  • Clique em Adicionar Coluna -> Coluna Personalizada
  • Coloque o nome de Matrícula formatada e a fórmula abaixo:

= [Matrícula]&Text.Repeat(” “, 10-Text.Length([Matrícula]))

Criar arquivo delimitado txt 23

  • Esta fórmula concatena a coluna Matrícula com o espaço, preenchendo com o restante de caracteres necessários à direita usando as funções Text.Repeat e Text.Length como visto anteriormente.

Criar arquivo delimitado txt 24

Criando a coluna de Data formatada para a geração do arquivo texto com campos de tamanhos fixos

O campo de data precisa ser expresso com os 4 dígitos do ano, 2 do mês e os 2 do dia nesta ordem e sem as barras, por exemplo:

A data 01/06/2019 ficaria 20190601

Para isso iremos criar uma nova coluna personalizada e remover os caracteres e colocar a coluna neste formato de apresentação de Texto.

  • Clique em Adicionar Coluna -> Coluna personalizada
  • No nome da coluna coloque Data Formatada
  • Na fórmula M digite o seguinte texto:

= Date.ToText([Inclusão], “yyyymmdd”)Criar arquivo delimitado txt 25

  • Na fórmula M usamos a função Date.ToText, ela realiza a conversão de datas para o formato de texto e ainda permite que este formato seja exibido como desejar, como no caso colocamos “yyyymmdd”, que já coloca o formado de ano, mês e dia como descrito no começo desta etapa.

Criando a linha Detalhe do arquivo

Nesta etapa iremos criar a coluna que conterá o detalhe completo do arquivo, ele totalmente formatado.

A ordem dos campos é a seguinte: Data, CPF, Matrícula, Nome e Valor.

Para isso iremos criar uma coluna formatada que concatenará todos estes campos.

  • Clique em Adicionar Coluna -> Coluna personalizada
  • No campo de nome da nova coluna coloque Linhas e na fórmula digite o seguinte texto:

= [Data Formatada]&[CPF Formatado]&[Matrícula formatada]&[Nome formatado]&[Valor formatado]

Criar arquivo delimitado txt 26

  • O caractere & irá juntar todas as colunas que formatamos e formar o detalhe do arquivo texto.

Criar arquivo delimitado txt 27

  • Agora que temos os dados formatados e prontos, exclua as outras colunas, deixe apenas a coluna Linhas. Para isso, selecione as colunas e pressione Delete, deixando apenas a coluna Linhas.
  • Clique em Fechar e em Manter, para que as modificações sejam gravadas.
  • Voltando ao Excel clique na guia Dados -> Consultas e Conexões
  • Clique sobre tbPlano e com o botão direito clique em Carregar para e selecione a opção Tabela
  • Selecione a coluna Resultado na célula A1 e clique em OK, aguarde a tabela carregar.

Criar arquivo delimitado txt 27.1

Gerando o arquivo txt com o VBA

Com os dados formatados já é possível gerar o arquivo txt, bastaria por exemplo copiar os dados da tabela da planilha Resultados e colar no Notepad. Mas podemos automatizar esta tarefa também.

 

Sub lExportarTxt()
    On Error GoTo Sair

    Application.ScreenUpdating = False
    
    Dim lWorkBook As Workbook
    Dim lPlan     As Worksheet
    
    Set lWorkBook = Workbooks.Add
    
    wResultado.Copy Before:=lWorkBook.Sheets(1)
    
    lWorkBook.SaveAs Filename:= _
        ThisWorkbook.Path & "\Remessa " & Format(Now(), "yyyymmdd-hhmmss") & ".txt", _
        FileFormat:=xlTextMSDOS, CreateBackup:=False
        
    lWorkBook.Close SaveChanges:=False
    
    MsgBox "Processo concluído!"
    
Sair:
    Set lWorkBook = Nothing
    Application.ScreenUpdating = True
End Sub
  • O código acima realiza a exportação da planilha Resultado no formato Txt

Criar arquivo delimitado txt 29

  • Retorne para o Excel e crie uma imagem qualquer clicando na guia Inserir -> Ilustrações e qualquer imagem ou forma geométrica, por exemplo um retângulo e crie um botão.
  • Clique com o botão direto sobre ela e em Atribuir Macro, selecione a macro lExportarTxt como na imagem

Criar arquivo delimitado txt 30

  • Clique no botão para testar, se funcionar irá mostrar a mensagem abaixo.

Criar arquivo delimitado txt 31

Ao clicar sobre o botão criado a macro é acionada e é criado um arquivo na pasta aonde está a sua planilha Excel, este arquivo é delimitado com os espaços em branco, zeros á esquerda e remoção de caracteres conforme definimos no layout, gerando assim o arquivo Txt no Excel.

Criar arquivo delimitado txt 32

Download da planilha

Para o download do exemplo utilizado neste artigo preencha o seu nome e e-mail no formulário abaixo.

Abraço

Marcos Rieper

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.