La verdadera diferencia entre Excel CSV y CSV estándar

16

¿Cuál es la verdadera diferencia entre un CSV de Excel y un CSV estándar?

Por ejemplo, al manejar columnas con saltos de línea dentro de una celda, ¿cómo la codifican de manera diferente?

usuario157195
fuente

Respuestas:

19

Depende absolutamente de lo que defina como CSV "estándar". En lo que a mí respecta, Excel sigue las reglas descritas en RFC 4180 , el "Formato común y tipo MIME para archivos CSV".

Considere una tabla donde la primera celda en la primera fila tiene dos saltos de línea. En Excel, se vería así:

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Ahora, ¿cómo exportaría Excel esto? Veamos, un editor de texto mostrará esto:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

No muy sofisticado. Inserta un retorno de carro (hex 0D) donde estaba el salto de línea en nuestra celda. Cada celda está rodeada de comillas dobles. Además, las filas reales se separan con un retorno de carro.

Para analizar esto correctamente, un analizador CSV necesitaría

  • ignore ese retorno de carro cuando aparece entre comillas dobles (es decir, una celda)
  • no ignore ese retorno de carro cuando aparece fuera de las comillas dobles

Si no lo hiciera, terminaría con algo confuso como este: tenga en cuenta que ahora hay cuatro líneas en lugar de dos, porque no pudo ignorar los saltos de línea.

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Pero, veamos lo que dice el RFC, ¿tal vez Excel lo hizo bien?

Los campos que contienen saltos de línea (CRLF), comillas dobles y comas deben ir entre comillas dobles.

Genial, eso es exactamente lo que hizo Excel. Resumiendo, Excel parece seguir las recomendaciones de un archivo CSV "estándar". Dado un analizador CSV adecuado, también debería poder leer archivos CSV de Excel.

slhck
fuente
@shhck: ¿por qué veo implementaciones de analizador csv que separan csv "excel" con "csv"? También encontré que Excel es una implementación bastante robusta.
user157195
@ user157195 Depende del analizador, debe leer en su documentación por qué hay una diferencia entre la entrada de Excel y la que no es de Excel. No vería por qué debería haber uno. Solo sé esto de R , que trata Excel CSV como cualquier otro. Sin embargo, también puede leer XLS.
slhck
2
Como alguien que ha estado leyendo programáticamente archivos CSV generados por Excel durante años en todas las formas y tamaños, puedo dar fe de que slhck es 100% correcto: Excel produce archivos CSV 100% "estándar". Cada vez.
Mark Henderson
@Farseeker ¡Gracias por la confirmación! (y que tiene 1.337 representante ahora!)
slhck
55
¡Precaución! En los países que usan ',' como punto decimal, Excel será "muy muy inteligente" y usará un ";" carácter separador Esto evita que Zee Germanz vea demasiadas "citas"; "en"; "sus"; "archivos". Lamentablemente, si luego lo envían a la oficina del Reino Unido, obtendrá AllSmooshedUpIntoASingleCellOnEveryLine. Brillante.
Luke Usherwood el
-1

Mi comprensión de la implementación original de csv fue que todos los campos de texto estaban encerrados entre comillas y los números no necesitaban estar. Excel no hace esto y si intenta cargar sus archivos csv generados por Excel en plataformas que no sean de Microsoft, fallarán. Este es un enfoque estándar de Microsoft, ignora la interoperabilidad y enfócate en seguir ciegamente las reglas. Algo similar sucedió con IE, siguieron las reglas html / css correctamente para los atributos de margen y margen e ignoraron el hecho de que cada página web y navegador web existente los trataba de manera diferente. El resultado, casi todas las páginas web ahora tienen reglas especiales para IE. Encuentro que los archivos CSV producidos por Excel son inútiles y utilizo una columna de funciones "concatenar" para crearlos manualmente.

Edwin
fuente