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:
Nele, os campos são separados por ponto-e-vírgula. Se formos importar esses dados usando o MS Query, ele mostrará o seguinte:
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:
Agora, quando formos importar esse arquivo, aparecerá corretamente:
Outros Exemplos: campo fixo
Vamos imaginar um TXT com separação de campos de tamanho fixo. Veja o CSV:
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
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:
- 6 maneiras de usar o preenchimento relâmpago - março 12, 2021
- quatro motivos para voce parar de usar o procv - fevereiro 16, 2021
- Como Criar um Gráfico de Waterfall no Excel - fevereiro 2, 2021
Nossas Redes Sociais
é necessário criar discriminar no arquivo .INI o nome dos arquivos a serem importados ou seria possivel criar um coringa válido para qualquer arquivo?
Fábio, muito obrigado!!!
Excelente iniciativa. Este tema vai me ajudar muito no meu trabalho.
Parabéns!!!