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.

6voto

vess Punkte 452

In php fügst du einfach $bom vor deinem $csv_string hinzu:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

Getestet mit MS Excel 2016, php 7.2.4

4voto

Christoph Punkte 341

Eine wirklich erstaunliche Liste von Antworten, aber da eine ziemlich gute noch fehlt, werde ich sie hier erwähnen: Öffnen Sie die CSV-Datei mit Google Tabellen und speichern Sie sie als Excel-Datei auf Ihrem lokalen Computer zurück.

Im Gegensatz zu Microsoft hat es Google geschafft, UTF-8-CSV-Dateien zu unterstützen, sodass das Öffnen der Datei dort einfach funktioniert. Auch der Export in Excel-Format funktioniert einwandfrei. Auch wenn dies nicht die bevorzugte Lösung für alle ist, ist sie ziemlich fehlersicher und die Anzahl der Klicks ist nicht so hoch, wie es sich anhören mag, insbesondere wenn Sie sowieso bei Google eingeloggt sind.

4voto

alc Punkte 41

Einfache VBA-Makro zum Öffnen von UTF-8-Text- und CSV-Dateien

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Textdateien (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

Origin:=65001 ist UTF-8. Comma:True für .csv-Dateien, die in Spalten verteilt sind

Speichern Sie es in Personal.xlsb, um es immer verfügbar zu haben. Personalisieren Sie die Excel-Symbolleiste, indem Sie eine Makro-Aufrufschaltfläche hinzufügen und Dateien von dort aus öffnen. Sie können dem Makro weitere Formatierungen hinzufügen, wie Spaltenautomatische Anpassung, Ausrichtung usw.

2 Stimmen

Vielen Dank. Leider ist dies die Empfehlung für wirklich fortgeschrittene Excel-Benutzer, und was ich anstrebe, indem ich diese Frage stelle, ist, dass Excel es automatisch selbst macht.

0 Stimmen

Ich habe versucht, diesen Code-Schnipsel zu verwenden, aber es funktioniert nicht für mich. Ich benutze Excel 2013.

3voto

Nobilis Punkte 31

Dies ist meine Arbeitslösung:

vbFILEOPEN = "deine_utf8_datei.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

Der Schlüssel ist Origin:=65001

3voto

zax Punkte 794

Ja, es ist möglich. Wenn Sie den Stream schreiben, um die CSV zu erstellen, ist das Erste, was zu tun ist:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

0 Stimmen

Du hast die Frage nicht gelesen! Lyubomyr Shaydariv schrieb: "Ich habe auch versucht, UTF-8 BOM EF BB BF anzugeben, aber Excel ignoriert das."

0 Stimmen

Dies ist funktionierender Code. Wenn Sie UTF-8-Dateien aus .Net-Anwendungen mit diesem Anfang schreiben, erkennt Excel die Datei als UTF8.

0 Stimmen

Vielleicht funktioniert es in DEINEM Excel. Aber zumindest in Excel 2007 wird das BOM vollständig ignoriert. Wenn du also vorhast, einen Code zu schreiben, der auf allen Excel-Versionen funktioniert, ist dein Code nicht nützlich.

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