Was ist der wahre Unterschied zwischen einem Excel-CSV und einem Standard-CSV?
Wie können Spalten mit Zeilenumbrüchen in einer Zelle unterschiedlich codiert werden?
Was ist der wahre Unterschied zwischen einem Excel-CSV und einem Standard-CSV?
Wie können Spalten mit Zeilenumbrüchen in einer Zelle unterschiedlich codiert werden?
Antworten:
Es hängt davon ab , was Sie unbedingt als „Standard“ CSV definieren. Soweit ich betroffen bin, folgt Excel die in umrissener Regeln RFC 4180 , das „Common Format und MIME - Typ für CSV - Dateien“.
Stellen Sie sich eine Tabelle vor, in der die erste Zelle in der ersten Zeile zwei Zeilenumbrüche enthält. In Excel sieht das folgendermaßen aus:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Wie würde Excel dies nun exportieren? Mal sehen - ein Texteditor würde dies anzeigen:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Nicht sehr raffiniert. Es fügt einen Wagenrücklauf (hex 0D
) , wobei der Zeilenumbruch in unserer Zelle war. Jede Zelle ist in doppelte Anführungszeichen gesetzt. Außerdem werden die tatsächlichen Zeilen mit einem Wagenrücklauf getrennt.
Um dies richtig zu analysieren, müsste ein CSV-Parser
Wenn es das nicht getan hat, dann würden Sie am Ende mit etwas verstümmelt wie diese - zur Kenntnis , dass es jetzt vier Linien anstelle von zwei, weil es die Zeilenumbrüche zu ignorieren ist fehlgeschlagen.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Aber mal sehen, was der RFC sagt, vielleicht hat Excel es richtig gemacht?
Felder, die Zeilenumbrüche (CRLF), doppelte Anführungszeichen und Kommas enthalten, sollten in doppelte Anführungszeichen eingeschlossen werden.
Genau das hat Excel getan. Zusammenfassend scheint Excel den Empfehlungen einer "Standard" CSV-Datei zu folgen. Bei einem ordnungsgemäßen CSV-Parser sollten auch Excel-CSV-Dateien gelesen werden können.
Mein Verständnis von der ursprünglichen CSV-Implementierung war, dass alle Textfelder in Anführungszeichen eingeschlossen waren und Zahlen nicht sein mussten. Excel tut dies nicht und wenn Sie versuchen, Ihre in Excel generierten CSV-Dateien auf Nicht-Microsoft-Plattformen hochzuladen, schlagen diese fehl. Dies ist ein Standard-Microsoft-Ansatz, ignorieren Sie die Interoperabilität und konzentrieren Sie sich darauf, die Regeln blind zu befolgen. Ähnliches geschah mit dem IE. Sie befolgten die HTML / CSS-Regeln korrekt für die Auffüll- und Randattribute und ignorierten die Tatsache, dass jede vorhandene Webseite und jeder vorhandene Webbrowser sie unterschiedlich behandelten. Das Ergebnis, fast jede Webseite hat jetzt spezielle Regeln für den Internet Explorer. Ich finde die mit Excel erstellten CSV-Dateien unbrauchbar und benutze eine Spalte mit "verketteten" Funktionen, um sie manuell zu erstellen.