Um arquivo pode ter a codificação certa e, mesmo assim, ser recusado pelo importador, porque um campo saiu do lugar, porque o separador não é o esperado ou porque uma planilha alterou os valores. O layout define como os campos se organizam em cada linha, e cada tipo de layout tem falhas próprias.
O layout
O layout descreve o arquivo campo a campo: a ordem dos campos, o tamanho e o formato de cada um, a codificação e a quebra de linha. Em arquivos de texto, os dois tipos mais comuns são o posicional e o delimitado.
O layout posicional
No layout posicional, cada campo ocupa posições fixas da linha, contadas a partir de 1. Um arquivo de preços pode seguir esta divisão:
- posições 1 a 13: o código de barras, com zeros à esquerda;
- posições 14 a 53: a descrição, completada com espaços à direita;
- posições 54 a 63: o preço em centavos, completado com zeros à esquerda.
Nesse layout, o preço 12,50 é gravado como 0000001250, porque as duas últimas posições representam os centavos. Um campo com um caractere a mais ou a menos desloca todos os campos seguintes da linha, e o importador lê parte da descrição como preço.
A codificação também afeta o layout posicional. No UTF-8, cada letra acentuada ocupa dois bytes, e a descrição DIPIRONA SÓDICA 500MG tem 21 caracteres e ocupa 22 bytes, por causa do Ó. Quando o importador conta as posições em bytes, a linha desse produto fica deslocada em relação às outras. Por isso, o layout precisa informar a codificação e se as posições contam caracteres ou bytes.
O Bloco de Notas e o Notepad++ mostram, na barra de status, a coluna em que o cursor está, e essa informação permite conferir onde começa cada campo.
O layout delimitado e o CSV
No layout delimitado, os campos são separados por um caractere, como o ponto e vírgula, a barra vertical ou a tabulação, e cada campo pode ter um tamanho diferente. O CSV é o layout delimitado mais comum, com regras próprias:
- a primeira linha costuma trazer os nomes das colunas;
- um campo que contém o separador fica entre aspas, como em
"DIPIRONA 500MG; CAIXA COM 10"; - uma aspa dentro de um campo entre aspas é escrita duas vezes.
A especificação do CSV, a RFC 4180, usa a vírgula como separador. No Brasil, o Excel usa o ponto e vírgula, porque a vírgula é o separador decimal, e a escolha segue o separador de listas das configurações regionais do Windows. Um arquivo com vírgulas aberto no Excel em português aparece com todos os campos em uma única coluna.
Um campo vazio também tem significado. Dois separadores seguidos indicam um campo sem valor, e uma linha com um separador a menos desloca os campos seguintes, como no layout posicional.
O CSV aberto no Excel
O Excel converte os valores quando abre um CSV com um duplo clique:
- remove os zeros à esquerda, e o código 00123 vira 123;
- mostra os números com mais de 11 dígitos em notação científica, e o código 7891234567890 aparece como 7,89E+12;
- guarda só 15 dígitos significativos, e uma chave de acesso de 44 dígitos perde os dígitos finais;
- transforma em data os valores que parecem datas, como 12-10.
Ao salvar de novo no formato CSV, o Excel grava os valores como estão exibidos, e as conversões passam a fazer parte do arquivo. A importação pelo menu Dados, com as colunas de códigos definidas como texto, evita as conversões.
No suporte
Diante de um arquivo recusado ou importado com valores errados, convém conferir o layout em um editor de texto, e não em uma planilha: as posições ou o separador, o formato dos números e os zeros à esquerda. O arquivo original fica preservado, porque abrir e salvar pelo Excel pode alterar os valores.
Para guardar
- No layout posicional, cada campo ocupa posições fixas, e um caractere a mais desloca todos os campos seguintes.
- O layout precisa informar a codificação e se as posições contam caracteres ou bytes.
- No layout delimitado, um caractere separa os campos, e o CSV coloca entre aspas os campos que contêm o separador.
- No Brasil, o Excel usa o ponto e vírgula no CSV, conforme o separador de listas do Windows.
- O Excel converte códigos ao abrir um CSV, e um novo salvamento grava as conversões no arquivo.
No arquivo de preços posicional, apenas os produtos com acento na descrição chegam com o preço errado. O que explica?
O arquivo foi gravado em UTF-8, em que cada letra acentuada ocupa dois bytes, e o importador conta as posições em bytes. Cada acento desloca os campos seguintes da linha, e o preço passa a ser lido a partir da posição errada.
Um arquivo de produtos foi aberto e salvo no Excel e passou a ser recusado pelo importador, com códigos de barras inválidos. O que aconteceu?
O Excel mostrou os códigos longos em notação científica e removeu os zeros à esquerda, e o salvamento no formato CSV gravou os valores como estavam exibidos. O arquivo original, sem passar pela planilha, permite refazer a importação, e um editor de texto mostra o conteúdo sem conversões.