616 Stimmen

Ist es möglich, Excel zu zwingen, UTF-8 CSV-Dateien automatisch zu erkennen?

Ich entwickle einen Teil einer Anwendung, der für den Export einiger Daten in CSV-Dateien verantwortlich ist. Die Anwendung verwendet immer UTF-8 aufgrund ihrer mehrsprachigen Natur auf allen Ebenen. Aber das Öffnen solcher CSV-Dateien (die z.B. Diakritika, kyrillische Buchstaben, griechische Buchstaben enthalten) in Excel führt nicht zu den erwarteten Ergebnissen, es wird etwas wie „/¤, –/¶ angezeigt. Und ich weiß nicht, wie ich Excel dazu bringen kann zu verstehen, dass die geöffnete CSV-Datei in UTF-8 kodiert ist. Ich habe auch versucht, UTF-8 BOM EF BB BF anzugeben, aber Excel ignoriert das.

Gibt es einen Workaround?

P.S. Welche Tools könnten sich möglicherweise so verhalten wie Excel?


UPDATE

Ich muss sagen, dass ich die Community mit der Formulierung der Frage verwirrt habe. Als ich diese Frage gestellt habe, habe ich nach einem Weg gefragt, eine UTF-8 CSV-Datei in Excel ohne Probleme für einen Benutzer, auf eine fließende und transparente Weise zu öffnen. Allerdings habe ich eine falsche Formulierung verwendet und nach einer automatischen Lösung gefragt. Das ist sehr verwirrend und steht im Widerspruch zur VBA-Makroautomatisierung. Es gibt zwei Antworten auf diese Frage, die ich am meisten schätze: die allererste Antwort von Alex, die ich akzeptiert habe; und die zweite von Mark, die etwas später erschienen ist. Aus usability-Sicht schien Excel einen Mangel an benutzerfreundlichem UTF-8-CSV-Support zu haben, daher halte ich beide Antworten für korrekt, und ich habe Alex' Antwort zuerst akzeptiert, weil sie wirklich feststellte, dass Excel das nicht transparent konnte. Das ist das, was ich hier mit automatisch verwechselt habe. Marks Antwort fördert einen komplizierteren Weg für fortgeschrittenere Benutzer, um das erwartete Ergebnis zu erzielen. Beide Antworten sind großartig, aber Alex' Antwort passt etwas besser zu meiner nicht klar spezifizierten Frage.


UPDATE 2

Fünf Monate nach der letzten Bearbeitung habe ich festgestellt, dass die Antwort von Alex aus irgendeinem Grund verschwunden ist. Ich hoffe wirklich, dass es kein technisches Problem war und ich hoffe, dass es keine weitere Diskussion darüber gibt, welche Antwort jetzt besser ist. Deshalb akzeptiere ich Marks Antwort als die beste.

1 Stimmen

Kannst du tabellengetrennte Dateien verwenden? Wenn ja, hast du vielleicht mehr Glück.

11 Stimmen

Office 2010+: beste funktioniert: UTF-16LE mit BOM und \t als Trennzeichen. Funktioniert in englischen und nicht englischen Excel-Einstellungen. Kann Strg-S drücken, ohne das Dateiformat auszuwählen, usw. Wird Unicode-Zeichen beibehalten.

0 Stimmen

@Duncan ganz ehrlich, ich bin verwirrt und es ist "schwierig zu beurteilen". Ich habe alex's Antwort vor mehr als 2 Jahren akzeptiert (beide am 14. Mai) und dann hat Mark geantwortet und einen trickreichen Workaround vorgeschlagen (den ich tatsächlich nicht überprüft habe), der überraschenderweise mehr Punkte bei meiner Frage erzielt hat, die überraschenderweise auch populär wurde. Wir haben schon vor langer Zeit den Excel-Support in meinem Projekt abgelehnt, und ich möchte alex's Reputation nicht schmälern, weil Excel anscheinend, und wahrscheinlich immer noch (bitte korrigiere mich, wenn ich falsch liege), CSV falsch behandelt. Es ist schwierig zu sagen, tut mir leid.

496voto

Mark Punkte 4898

Alex hat recht, aber da du in csv exportieren musst, kannst du den Benutzern diesen Ratschlag geben, wenn sie die csv-Dateien öffnen:

  1. Speichern Sie die exportierte Datei als csv
  2. Öffnen Sie Excel
  3. Importieren Sie die Daten über Daten-->Externe Daten importieren --> Daten importieren
  4. Wählen Sie den Dateityp "csv" aus und navigieren Sie zu Ihrer Datei
  5. Ändern Sie im Import-Assistenten den Dateiursprung in "65001 UTF" (oder wählen Sie den korrekten Sprachzeichenbezeichner)
  6. Ändern Sie den Trennzeichen in Komma
  7. Wählen Sie aus, wohin Sie importieren möchten, und beenden Sie den Vorgang

Auf diese Weise sollten Sonderzeichen korrekt angezeigt werden.

18 Stimmen

Dies ist ein Workaround und beantwortet die Frage nicht. Die Frage war, wie wir csv-Dateien erstellen können und Excel automatisch die richtige Codierung auswählt.

0 Stimmen

Nichts "Automatisches" an dieser Antwort

217voto

StriplingWarrior Punkte 141402

Das UTF-8 Byte-Reihenfolgemarke (BOM) wird Excel 2007+ darauf hinweisen, dass Sie UTF-8 verwenden. (Siehe diesen SO-Beitrag).

Falls jemand die gleichen Probleme hat wie ich, gibt die UTF8-Kodierungsklasse von .NET bei einem GetBytes()-Aufruf keinen Byte-Reihenfolgemarker aus. Sie müssen Streams verwenden (oder einen Workaround verwenden), um die BOM auszugeben.

0 Stimmen

Danke für den Beitrag Link (ich wusste nicht über den UTF-16 Fall Bescheid).

30 Stimmen

Das Einfügen eines UTF-8 BOM scheint der richtige Weg zu sein. Danach ist es transparent.

0 Stimmen

Vielen Dank. Dies ist viel besser als zu versuchen, zu raten, welche Codierung Excel bevorzugt.

93voto

sshturma Punkte 1053

Es scheint, dass der Fehler mit dem ignorierten BOM für Excel 2013 behoben wurde. Ich hatte das gleiche Problem mit kyrillischen Buchstaben, aber das Hinzufügen des BOM-Zeichens \uFEFF hat geholfen.

9 Stimmen

Seitdem ich \uFEFF am Anfang meiner CSV-Datei (generiert in Java) hinzugefügt habe, kann Excel sie korrekt öffnen! Danke

21 Stimmen

Das hat auch mein Problem gelöst, in PHP sieht es so aus: $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText;

0 Stimmen

@updola vielen Dank für diesen Kommentar, hat mir Stunden gespart

81voto

Elmue Punkte 6302

Es ist unglaublich, dass es so viele Antworten gibt, aber keine beantwortet die Frage:

"Als ich diese Frage gestellt habe, habe ich nach einer Möglichkeit gesucht, eine UTF-8 CSV-Datei in Excel ohne Probleme für einen Benutzer zu öffnen,..."

Die als akzeptierte Antwort markierte Antwort mit über 200 Upvotes ist für mich nutzlos, denn ich möchte meinen Benutzern keine Anleitung geben, wie sie Excel konfigurieren müssen. Abgesehen davon: Diese Anleitung gilt für eine Excel-Version, aber andere Excel-Versionen haben unterschiedliche Menüs und Konfigurationsdialoge. Man bräuchte eine Anleitung für jede Excel-Version.

Also lautet die Frage, wie man Excel dazu bringt, UTF8-Daten mit einem einfachen Doppelklick anzuzeigen?

Nun, zumindest in Excel 2007 ist das nicht möglich, wenn man CSV-Dateien verwendet, da das UTF8-BOM ignoriert wird und man nur Müll sieht. Dies ist bereits Teil der Frage von Lyubomyr Shaydariv:

"Ich habe auch versucht, UTF-8-BOM EF BB BF anzugeben, aber Excel ignoriert das."

Ich mache die gleiche Erfahrung: Das Schreiben von russischen oder griechischen Daten in eine UTF8-CSV-Datei mit BOM führt in Excel zu Müll:

Inhalt der UTF8-CSV-Datei:

Colum1;Column2
Val1;Val2
;T

Ergebnis in Excel 2007:

CSV UTF8 Excel

Eine Lösung besteht darin, überhaupt kein CSV zu verwenden. Dieses Format wird von Microsoft so dumm umgesetzt, dass es von den Regions-Einstellungen im Systemsteuerung abhängt, ob als Trennzeichen Komma oder Semikolon verwendet wird. Daher kann die gleiche CSV-Datei auf einem Computer korrekt geöffnet werden, auf einem anderen jedoch nicht. "CSV" steht für "Komma Separated Values", aber beispielsweise auf einem deutschen Windows muss standardmäßig ein Semikolon als Trennzeichen verwendet werden, während ein Komma nicht funktioniert. (Hier sollte es SSV = Semicolon Separated Values genannt werden) CSV-Dateien können nicht zwischen verschiedenen Sprachversionen von Windows ausgetauscht werden. Dies ist ein zusätzliches Problem zum UTF-8-Problem.

Excel existiert seit Jahrzehnten. Es ist eine Schande, dass es Microsoft in all diesen Jahren nicht geschafft hat, etwas so Grundlegendes wie den CSV-Import zu implementieren.


Wenn Sie jedoch die gleichen Werte in eine HTML-Datei einfügen und diese Datei als UTF8-Datei mit BOM und der Dateierweiterung XLS speichern, erhalten Sie das korrekte Ergebnis.

Inhalt der UTF8-XLS-Datei:

Colum1Column2
Val1Val2
T

Ergebnis in Excel 2007:

UTF8 HTML Excel

Sogar die Verwendung von Farben in HTML, die von Excel korrekt angezeigt werden.

.Head { background-color:gray; color:white; }
.Red  { color:red; }

Colum1Column2
Val1Val2
T

Ergebnis in Excel 2007:

UTF8 HTML Excel

In diesem Fall hat nur die Tabelle selbst einen schwarzen Rahmen und Linien. Wenn Sie möchten, dass ALLE Zellen Gitterlinien anzeigen, ist dies auch in HTML möglich:

                        MySuperSheet

            Colum1Column2
            Val1Val2
            T

Dieser Code ermöglicht es sogar, den Namen des Arbeitsblatts anzugeben (hier "MeinSuperBlatt")

Ergebnis in Excel 2007:

enter image description here

2 Stimmen

Und es ist auch unglaublich, dass Leute immer noch darauf antworten. :) Allerdings würde ich behaupten, dass CSV tot ist: CSV ist ein tödlich einfaches, simples Stream-Format, und als ich an diesem Projekt arbeitete, haben wir es auch intensiv für die Interaktion von Komponenten genutzt. Ich würde niemals das HTML-Format verwenden wegen seiner zu repräsentativen Natur und ich könnte niemals die Benutzer dieses Projekts dazu bringen, Daten in HTML zu exportieren, nur um es Excel-freundlich zu machen. Excel war schlecht in UTF-8 CSV und ich habe keine Ahnung, was sich in den 5 Jahren seitdem geändert hat. Aber, dass komma-, semikolon- und tabulatorbegrenzte Dateien wahren Wahnsinn sind, denke ich.

9 Stimmen

Es ist nicht unglaublich, dass Menschen immer noch auf deine Frage antworten, weil Google sie hierher bringt: Alle mit derselben Frage: Wie bekomme ich Excel dazu, das zu tun, was ich will? Gib 3 Wörter bei Google ein: "excel csv utf8" und deine Frage ist das ERSTE Ergebnis weltweit. Du hast einen Bestseller geschrieben!

0 Stimmen

Übrigens: Warum haben Sie eine Antwort als akzeptierte Antwort markiert, die nicht beantwortet, was Sie wissen wollten? Sie schrieben: "Als ich diese Frage gestellt habe, habe ich nach einem Weg gefragt, eine UTF-8-CSV-Datei in Excel zu öffnen, ohne Probleme für einen Benutzer."

58voto

e-zinc Punkte 4451

Wir haben diesen Workaround verwendet:

  1. Konvertiere CSV zu UTF-16 LE
  2. Füge BOM am Anfang der Datei ein
  3. Verwende Tabulatoren als Feldtrennzeichen

1 Stimmen

Danke! Ich habe alle anderen Antworten in diesem Thread ausprobiert, aber die Umwandlung in UTF-8 hat einfach nicht funktioniert. Als ich es mit UTF-16 mit BOM versuchte, hat es sofort funktioniert.

0 Stimmen

Für Excel für Mac 2011 war ich erfolgreich mit UTF-16 Little-Endian-CSV-Dateien.

0 Stimmen

Vielen Dank, diese Lösung ist hervorragend, um meinen Benutzern eine Unicode-CSV-Datei anzubieten, die sie in Excel öffnen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X