CSV, UTF-8 und Excel
Niko
- php
Ich habe jetzt ne ganze Weile rumgepuzzlet um eine CSV-Datei, die ich über PHP aus einer Datenbank mit UTF-8 kodierten Inhalten ziehe, in Excel reinzukriegen. Klar, manuell ganz einfach mit Zwischenhalt im Texteditor. Aber von alleine liest Excel kein UTF-8. Aber UTF-16 Little Endian geht, wenn man's ihm sagt. Dann müssen die Werte aber durch Tabs getrennt sein. Insgesamt also:
Header("Content-Type: text/comma-separated-values; charset=utf-8");
Header("Content-Disposition: attachment;filename="$dateiname"");
Header("Content-Transfer-Encoding: 8bit");
$csv = "Wert1\nWert2";
for ($i=1; $i<=$TABELLENLÄNGE;$i++){
$csv .= $wert1."\t."$wert2;
}
print chr(255).chr(254).mb_convert_encoding( $csv, 'UTF-16LE', 'UTF-8');
Hoffe, das hilft bei Gelegenheit jemandem.
Niko.
Hallo
Ich habe jetzt ne ganze Weile rumgepuzzlet um eine CSV-Datei, die ich über PHP aus einer Datenbank mit UTF-8 kodierten Inhalten ziehe, in Excel reinzukriegen.
Wo ist das Problem?
Excel
-> Daten
-> Externe Daten importieren
-> Dateityp: Textdateien (...)
-> CSV-Datei auswählen
-> Textkonvertierunsassistent: Datenursprung UTF-8
fertig. Getestet mit Excel 2003.
Freundliche Grüße
Vinzenz
Hi,
Wo ist das Problem?
Excel
-> Daten
-> Externe Daten importieren
-> Dateityp: Textdateien (...)
-> CSV-Datei auswählen
-> Textkonvertierunsassistent: Datenursprung UTF-8fertig. Getestet mit Excel 2003.
oder:
Set objStream = CreateObject("ADODB.Stream")
objStream.Open
objStream.LoadFromFile […]
objStream.Position = 0
objStream.Charset = "UTF-8"
strText = objStream.readtext(-1)
objStream.Close
Set objStream = Nothing
… strText verarbeiten
:-)
Viele Grüße
Jörg
Moin!
Ich habe jetzt ne ganze Weile rumgepuzzlet um eine CSV-Datei, die ich über PHP aus einer Datenbank mit UTF-8 kodierten Inhalten ziehe, in Excel reinzukriegen. Klar, manuell ganz einfach mit Zwischenhalt im Texteditor. Aber von alleine liest Excel kein UTF-8.
Ich würde nie mehr den Umweg über CSV gehen. CSV ist als Dateiformat so extrem schlecht spezifiziert, und macht beim Import eklige Probleme - das muß nicht sein.
Excel bietet dagegen eine extrem simple Methode, Daten zu importieren.
Erstelle einfach eine HTML-Datei mit einer Tabelle darin. Diese Datei lieferst du mit entsprechenden Headern aus, um sie als echte Excel-Datei zu kennzeichnen, oder speicherst sie z.B. mit der Dateiendung ".xls". Die Codierung (im HTTP-Header oder im Meta-Tag) wird berücksichtigt. Ein Doppelklick startet dann Excel, öffnet die Datei - und wie durch ein Wunder sind alle Daten korrekt importiert.
Das einzige ist: Ohne Angabe zu border werden in Excel die Zellentrennlinien nicht mehr hellgrau dargestellt. Da müßtest du evtl. etwas experimentieren.
- Sven Rautenberg