A fórmula secreta para importar arquivos TXT /  CSV com qualquer tipo de separador para o Excel: arquivo schema.ini

Você já deve ter se deparado com a necessidade de importar para o Excel (usando os dados externos) arquivos do tipo txt e csv.

Porém, se esse arquivo não for separado por vírgulas, o Excel não fará a importação, e ou você vai fazer a famosa ‘gambiarra’ no txt para poder importá-lo, ou vai deixar para lá.

Este problema é especialmente relevante quando queremos montar uma tabela dinâmica usando como base algum arquivo TXT.

Para resolver este problema,a  solução é relativamente simples: você deverá criar um arquivo de configuração que irá sobrescrever qualquer outra regra que o Excel tenha para importar arquivos CSV/TXT, com a vantagem de que você poderá ter arquivos TXT/CSV nos mais variados formatos, já que neste arquivo SCHEMA.INI você configura o formato de cada arquivo, individualmente.

Veja o exemplo deste arquivo TXT:

Screenshot_2

Nele, os campos são separados por ponto-e-vírgula. Se formos importar esses dados usando o MS Query, ele mostrará o seguinte:

Screenshot_1

Note que ele mostra os campos um ao lado do outro, e por isso não conseguiremos trazê-los para nossa tabela dinâmica.

Para que isto seja possível, precisamos informar ao Excel que o separador de campos é com o ponto-e-vírgula.

Isso pode ser feito usando o arquivo schema.ini.

Ele é basicamente um arquivo TXT que você renomeia com a extensão .INI e o salva no mesmo diretório onde os seus arquivos CSV/TXT se localizam.

Sua sintaxe é (em azul as informações específicas do CSV que estou importando)


Linha 1: Nome do Arquivo CSV/TXT entre colchetes:

[CSV-Ponto-E-Virgula.csv]


Linha 2: Indicar se o arquivo a ser importado possui na 1a linha cabeçalhos ou se os dados já começam diretamente na 1a linha. Em nosso caso, temos o cabeçalho na 1a linha, por isso colocamos True. Se os dados começassem diretamente na 1a linha, colocaríamos False.

ColNameHeader=True


Linha 3: Indicamos na 3a linha do schema.ini o tipo de separador de campos deste arquivo. As opções são:

Tab Delimited: caso os campos sejam separados por tabulação
CSV Delimited: se eles forem separados por vírgula
Format=Delimited(caractere): outro caractere; neste caso você digita dentro dos parênteses qual é o caractere que separa os campos
FixedLength: tamanho fixo; aqui você precisará informar para cada campo o seu tamanho

Em nosso exemplo, como os campos são separados por ponto-e-virgula, colocamos:

Format=Delimited(;)


Linha 4: Indicar quantas linhas o Excel deverá rastrear para identificar os tipos de dados de cada campo. Ao colocar 0 (zero), ele irá ler o arquivo inteiro – o que pode ser demorado se seu txt for muito grande. Em nosso caso vamos deixar 0, já que o arquivo tem poucas linhas.

MaxScanRows=0


 

Linha 5: Opcional. Você informa qual o formato de data que está usando (caso tenha algum campo de data no arquivo)

DateTimeFormat=dd-mmm-yy


Linha 6 em diante: Você define o tipo de dado de cada campo. Ainda que seja opcional, você evita surpresas, como por exemplo  Excel achar que um campo numérico seja texto e acabe não mostrando os valores:

Os tipos de dados numéricos são os seguintes:

Double: números com decimais
DateTime: data e hora
Text: tratará os dados como texto. Se for um número, ele assumirá que também é texto.

No nosso exemplo, como temos 3 colunas, vamos indicar:

Col1=CampoTexto Text
Col2=CampoNumero Double
Col3=CampoData DateTime


A configuração para este arquivo CSV ficará, ao final:

 

configurando o schema.ini

Agora, quando formos importar esse arquivo, aparecerá corretamente:

Screenshot_4


Outros Exemplos: campo fixo

Vamos imaginar um TXT com separação de campos de tamanho fixo. Veja o CSV:

Screenshot_5

A configuração do schema.ini ficaria assim:

[CSV-Fixo.csv]
ColNameHeader=True
Format=FixedLength
MaxScanRows=0
DateTimeFormat=dd-mmm-yy
Col1=CampoTexto Text width 20
Col2=CampoNumero Double width 15
Col3=CampoData DateTime width 9

Note que apareceu um “Width” e depois um número. Isto representa o tamanho de cada campo fixo. O CampoTexto tem 20 caracteres de largura, o CampoNumero, 15 e o CampoData, 9.


[optinform]


 

Outros Exemplos: separador decimal com ponto

Screenshot_6

No exemplo acima, além de termos campo fixo, também temos o separador de decimais com ponto. O schema.ini ficaria assim:

[CSV-Fixo-Decimal-Ponto.csv]
ColNameHeader=True
Format=FixedLength
MaxScanRows=0
DateTimeFormat=dd-mmm-yy
DecimalSymbol=.
Col1=CampoTexto Text width 20
Col2=CampoNumero Double width 15
Col3=CampoData DateTime width 9

Veja que apareceu uma propriedade chamada DecimalSymbol. Nela, indicamos qual o separador de decimais. Quando não é informada, ele considera o que estiver configurado no computador do usuário.


 

Se quiser testar você mesmo, os arquivos para baixar estão no zip abaixo:

[fabiovianna] Arquivos CSV

Comentários
Fabio Vianna
Siga-Me

Fabio Vianna

Modela planilhas deste 1994 e ministra treinamentos desde 1997.
Especialista em Modelagem Profissional de Planilhas, incluindo Dashboards no Excel.
Fabio Vianna
Siga-Me

Últimos posts por Fabio Vianna (exibir todos)

Optimization WordPress Plugins & Solutions by W3 EDGE