Qual é a verdadeira diferença entre um CSV do Excel e um CSV padrão?
Por exemplo, ao lidar com colunas com quebras de linha em uma célula, como elas a codificam de maneira diferente?
Qual é a verdadeira diferença entre um CSV do Excel e um CSV padrão?
Por exemplo, ao lidar com colunas com quebras de linha em uma célula, como elas a codificam de maneira diferente?
Respostas:
Depende absolutamente do que você define como CSV "padrão". Para mim, o Excel segue as regras descritas na RFC 4180 , "Formato comum e tipo MIME para arquivos CSV".
Considere uma tabela em que a primeira célula da primeira linha possui duas quebras de linha. No Excel, seria semelhante ao seguinte:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Agora, como o Excel exportaria isso? Vamos ver - um editor de texto exibirá isso:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Não é muito sofisticado. Ele insere um retorno de carro (hex 0D
) onde a quebra de linha ocorreu em nossa célula. Cada célula é cercada por aspas duplas. Além disso, as linhas reais são separadas com um retorno de carro.
Para analisar isso corretamente, um analisador CSV precisaria
Se não fizesse isso, você acabaria com algo ilegível como esse - observe que agora existem quatro linhas em vez de duas, porque não conseguiu ignorar as quebras de linha.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Mas, vamos ver o que a RFC diz, talvez o Excel tenha feito certo?
Os campos que contêm quebras de linha (CRLF), aspas duplas e vírgulas devem ser colocados entre aspas duplas.
Legal, foi exatamente isso que o Excel fez. Resumindo, o Excel parece seguir as recomendações de um arquivo CSV "padrão". Dado um analisador CSV adequado, ele também deve poder ler arquivos CSV do Excel.
Meu entendimento da implementação original do CSV era que todos os campos de texto estavam entre aspas e os números não precisavam estar. O Excel não faz isso e, se você tentar carregar os arquivos CSV gerados pelo Excel em plataformas que não sejam da Microsoft, eles falharão. Essa é uma abordagem padrão da Microsoft, ignora a interoperabilidade e concentra-se em seguir cegamente as regras. O mesmo aconteceu com o IE, eles seguiram as regras html / css corretamente para os atributos padding e margin e ignoraram o fato de que todas as páginas e navegadores da Web existentes os tratavam de maneira diferente. O resultado, quase todas as páginas da web agora têm regras especiais para o IE. Acho inúteis os arquivos csv produzidos pelo excel e uso uma coluna de funções "concatenar" para criá-los manualmente.