Niko: CSV, UTF-8 und Excel

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.

  1. 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

    1. Hi,

      Wo ist das Problem?
      Excel
        -> Daten
           -> Externe Daten importieren
              -> Dateityp: Textdateien (...)
                 -> CSV-Datei auswählen
                    -> Textkonvertierunsassistent: Datenursprung UTF-8

      fertig. 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

  2. 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

    --
    "Love your nation - respect the others."