Verdadeira diferença entre o Excel CSV e o Padrão CSV

14

Qual é a verdadeira diferença entre um CSV do Excel e um CSV padrão?

Por exemplo, ao manipular colunas com quebras de linha dentro de uma célula, como elas são codificadas de forma diferente?

    
por user157195 26.06.2011 / 11:05

2 respostas

18

Depende absolutamente do que você define como CSV "padrão". No que me diz respeito, o Excel segue as regras descritas em RFC 4180 , o "Formato Comum e o Tipo MIME para CSV Arquivos ".

Considere uma tabela em que a primeira célula na primeira linha tenha duas quebras de linha. No Excel, seria parecido com o 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 mostraria 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 estava em nossa célula. Cada célula é cercada por aspas duplas. Além disso, as linhas reais são separadas por um retorno de carro.

Para analisar isso corretamente, um analisador de CSV precisaria

  • ignora esse retorno de carro quando aparece entre aspas duplas (ou seja, uma célula)
  • não ignora esse retorno de carro quando ele aparece fora de aspas duplas

Se não fizesse isso, você acabaria com algo confuso como este - note que agora há 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 o RFC diz, talvez o Excel tenha feito isso certo?

Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes.

Legal, é exatamente isso que o Excel fez. Resumindo, o Excel parece seguir as recomendações de um arquivo CSV "padrão". Dado um analisador de CSV adequado, ele deve ser capaz de ler arquivos CSV do Excel também.

    
por 26.06.2011 / 11:33
-1

Meu entendimento da implementação do csv original era que todos os campos de texto estavam entre aspas e os números não precisavam ser. O Excel não faz isso e, se você tentar carregar arquivos csv gerados pelo Excel em plataformas que não sejam da Microsoft, eles falharão. Esta é uma abordagem padrão da Microsoft, ignorar a interoperabilidade e focar em seguir cegamente as regras. Uma coisa semelhante aconteceu com o IE, eles seguiram as regras html / css corretamente para os atributos de preenchimento e margem e ignoraram o fato de que todas as páginas da Web e navegadores da Web existentes os tratavam de maneira diferente. O resultado, quase todas as páginas da web agora tem regras especiais para o IE. Eu acho inúteis os arquivos csv produzidos pelo excel e uso uma coluna de funções "concatenate" para criá-las manualmente.

    
por 11.07.2014 / 15:00