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.

0voto

Cloudranger Punkte 1379

Wenn Sie es vollautomatisch machen wollen, mit einem Klick oder automatisch in Excel laden möchten, z. B. von einer Webseite aus, aber keine richtigen Excel-Dateien generieren können, dann würde ich empfehlen, das SYLK-Format als Alternative zu betrachten. OK, es ist nicht so einfach wie CSV, aber es basiert auf Text und ist sehr einfach umzusetzen und es unterstützt UTF-8 ohne Probleme.

Ich habe eine PHP-Klasse geschrieben, die die Daten empfängt und eine SYLK-Datei ausgibt, die sich direkt in Excel öffnen lässt, indem man einfach auf die Datei klickt (oder Excel automatisch startet, wenn man die Datei auf einer Webseite mit dem korrekten MIME-Typ speichert. Sie können sogar Formatierungen hinzufügen (wie Fett, Zahlen auf besondere Weise formatieren usw.) und Spaltenbreiten ändern oder Spalten automatisch an den Text in den Spalten anpassen und insgesamt besteht der Code wahrscheinlich aus nicht mehr als etwa 100 Zeilen.

Es ist sehr einfach, SYLK durch Reverse Engineering zu verstehen, indem man eine einfache Tabelle erstellt und als SYLK speichert und sie dann mit einem Texteditor liest. Der erste Block sind Header und Standardzahlformate, die Sie erkennen werden (die Sie einfach in jeder Datei wiederholen), dann sind die Daten einfach ein X/Y-Koordinatenpaar und ein Wert.

0voto

Steve Punkte 96

Dies ist eine alte Frage, aber ich bin gerade auf ein ähnliches Problem gestoßen und die Lösung könnte anderen helfen:

Ich hatte das gleiche Problem, dass beim Schreiben von CSV-Textdaten in eine Datei und dann Öffnen der resultierenden .csv in Excel alle Texte in eine einzige Spalte verschoben wurden. Nachdem ich die obigen Antworten gelesen hatte, habe ich Folgendes ausprobiert, was das Problem zu beheben scheint.

Wenden Sie eine Codierung von UTF-8 an, wenn Sie Ihren StreamWriter erstellen. Das ist alles.

Beispiel:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

0 Stimmen

@elmue möchten Sie das etwas genauer erläutern? Sicherlich stellt die Ausgabe von CSV mit der richtigen Codierung sicher, dass es später im Arbeitsablauf keine Kompatibilitätsprobleme mit Excel gibt, oder?

0 Stimmen

Der Code ist falsch, weil Sie kein output.Close() benötigen, wenn Sie eine using() Anweisung haben. Abgesehen davon ist der Excel-CSV-Import sehr primitiv. Ich würde es überhaupt nicht verwenden. Wenn Sie in Excel importieren möchten, verwenden Sie stattdessen eine HTML-Tabelle und öffnen Sie sie in Excel.

0 Stimmen

Vielen Dank für die Klarstellung @Elmue - leider bin ich auf eine Reihe von Szenarien gestoßen (einschließlich Dateien auf Netzlaufwerken), bei denen ein expliziter Schluss benötigt wird sowie die Beseitigung. Nicht gefunden einen Grund warum, da ich glaube, mich erinnern zu können, einen Aufruf zu Close() im Dispose-Stack gesehen zu haben, aber da gehen wir. Sie liegen auch falsch in Ihrer Aussage über den csv-Import als primitiv, da er nicht den ineffizienten HTML-Ansatz benötigt, den Sie vorgeschlagen haben. Tatsächlich scheint es kontraproduktiv zu sein, zusätzliche programmatische Schritte zu erstellen, um Textdaten in HTML zu transformieren und sie dann in Excel zu importieren.

0voto

Herbert Van-Vliet Punkte 420

Es ist März 2022, und anscheinend können wir sowohl einen BOM als auch die sep=... Zeile nicht verwenden. Das Hinzufügen von sep=\t oder ähnlichem führt dazu, dass Excel den BOM ignoriert.

Die Verwendung eines Semikolons scheint von Excel als Standard verstanden zu werden, in diesem Fall können wir die sep=... Zeile überspringen und es funktioniert.

Dies ist Microsoft 365 mit Excel-Version 2110 Build 14527.20276.

-1voto

Bragabondio Punkte 1

Zuerst speichern Sie die Excel-Tabelle als Unicode-Text. Öffnen Sie die TXT-Datei mit dem Internet Explorer und klicken Sie auf "Speichern unter" TXT-Encoding - wählen Sie das entsprechende Encoding, z.B. für Win Cyrillic 1251

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