Vera differenza tra Excel CSV e CSV standard


16

Qual è la vera differenza tra un CSV Excel e un CSV standard?

Ad esempio, quando si gestiscono colonne con interruzioni di riga all'interno di una cella, come la codificano in modo diverso?

Risposte:


19

Dipende assolutamente da ciò che definisci CSV "standard". Per quanto mi riguarda, Excel segue le regole delineate in RFC 4180 , il "formato comune e il tipo MIME per i file CSV".

Considera una tabella in cui la prima cella nella prima riga ha due interruzioni di riga. In Excel, sarebbe simile al seguente:

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

Ora, come esporterebbe Excel? Vediamo - un editor di testo mostrerebbe questo:

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

Non molto sofisticato. Inserisce un ritorno a capo (esadecimale 0D) in cui l'interruzione di linea era nella nostra cella. Ogni cella è racchiusa tra virgolette doppie. Inoltre, le righe effettive sono separate da un ritorno a capo.

Per analizzarlo correttamente, dovrebbe essere necessario un parser CSV

  • ignora quel ritorno a capo quando appare tra virgolette doppie (cioè una cella)
  • non ignorare quel ritorno a capo quando appare al di fuori delle doppie virgolette

Se non lo facesse, finiresti con qualcosa di confuso come questo - nota che ora ci sono quattro linee invece di due, perché non è riuscito a ignorare le interruzioni di linea.

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

Ma vediamo cosa dice la RFC, forse Excel ha fatto bene?

I campi che contengono interruzioni di riga (CRLF), virgolette doppie e virgole devono essere racchiusi tra virgolette doppie.

Bene, è esattamente quello che ha fatto Excel. Riassumendo, Excel sembra seguire le raccomandazioni di un file CSV "standard". Dato un parser CSV adeguato, dovrebbe essere in grado di leggere anche i file CSV di Excel.


@shhck: perché vedo le implementazioni del parser CSV che separano "Excel" CSV con "CSV"? Ho anche scoperto che Excel era un'implementazione piuttosto solida.
user157195,

@ user157195 Dipende dal parser, dovresti leggere nella sua documentazione perché c'è una differenza tra input Excel e non Excel. Non vedrei perché ce ne dovrebbe essere uno. Lo so solo da R , che tratta Excel CSV come tutti gli altri. Può comunque leggere anche XLS.
Slhck,

2
Come qualcuno che ha programmato per anni la lettura di file CSV generati da Excel in tutte le forme e dimensioni, posso attestare che slhck è corretto al 100% - Excel produce file CSV "standard" al 100%. Ogni singola volta.
Mark Henderson,

@Farseeker Grazie per la conferma! (e hai 1337 rappresentanti ora!)
slhck,

5
Attenzione! Nei paesi che usano ',' come punto decimale Excel sarà "molto molto intelligente" e utilizzerà un ';' carattere separatore. Questo evita a Zee Germanz di vedere troppe "virgolette"; "in"; "i loro"; "file". Sfortunatamente, se poi lo inviano all'ufficio del Regno Unito, otterrà AllSmooshedUpIntoASingleCellOnEveryLine. Brillante.
Luke Usherwood,

-1

La mia comprensione dall'implementazione originale di CSV era che tutti i campi di testo erano racchiusi tra virgolette e che i numeri non dovevano essere. Excel non lo fa e se provi a caricare i tuoi file csv generati da Excel su piattaforme non microsoft falliscono. Questo è un approccio Microsoft standard, ignora l'interoperabilità e si concentra sul seguire ciecamente le regole. Una cosa simile è accaduta con IE, hanno seguito correttamente le regole html / css per gli attributi di riempimento e margine e hanno ignorato il fatto che ogni pagina Web e browser Web esistente li ha trattati in modo diverso. Il risultato, quasi ogni pagina Web ha ora regole speciali per IE. Trovo inutili i file CSV prodotti da Excel e utilizzo una colonna di funzioni "concatenate" per crearli manualmente manualmente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.