Michael: Excel Zeilenumbruch in Zellen in csv speichern?

Hallo!

Ich möchte mit PHP eine CSV-Datei erstellen um diese in Excel importieren zu können.

Klappt alles ja auch wunderbar, bis auf Zeilenumbrüche in Zellen. Wenn ich die Daten ganz normal im Format
"Daten Zelle 1";"Daten Zelle 2
mit Umbruch";"Daten Zelle 3"
in die csv-Datei schreibe, interpretiert Excel das nicht als Umbruch in der Zelle 2, sondern beginnt einfach eine neue Zeile.

Weiß jemand, ob es da irgendein einzufügendes Sonderzeichen gibt, um Zeilenumbrüche in Zellen zu realisieren, oder gibt es andere Lösungsansätze?

  1. Hello,

    "Daten Zelle 1";"Daten Zelle 2 mit Umbruch";"Daten Zelle 3"Zeilenumbruch

    in die csv-Datei schreibe, interpretiert Excel das nicht als Umbruch in der Zelle 2, sondern beginnt einfach eine neue Zeile.

    CSV ist nicht CSV und schon gar nicht SDF (Standard Data Format)

    Am Besten sit, Du drehst den Spieß um und generierst in Excel das gewünschte Format uns schaust es Dir dann mit hexdump oder einem ähnlichen Programm an.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Am Besten sit, Du drehst den Spieß um und generierst in Excel das gewünschte Format uns schaust es Dir dann mit hexdump oder einem ähnlichen Programm an.

      Hab mir das Ganze mal, so wie Du empfohlen hast, per HexEdit angeguckt. Excel verwendet chr(10) zwischen Umbrüchen in Zellen. Außerdem sind Zellen, in denen ein Umbruch statt findet, von " eingeschlossen.

      Um z.B. eine MySQL-Abfrage "excelgerecht" als csv-Datei auszugeb, nutze ich nun folgenden Code:
      while ($row = mysql_fetch_assoc($result)) {
        reset($row);
          while ($key = key($row) ) {
            // Zeilenumbrüche am Ende entfernen
            $row[$key] = ereg_replace ("[\r\n]+$", "", $row[$key]);
            $row[$key] = str_replace('"', "[]", $row[$key]);

      if ($key == "price" || $key == "tax" ) {
              $row[$key] = formatPrice($row[$key]);
            } elseif (strpos($row[$key],"\r\n")) {
              $row[$key] = str_replace ("\r\n", chr(10), $row[$key]);
              $row[$key] = '"'.$row[$key].'"';
            }
            echo $row[$key];

      next($row);
            if (key($row)) {
              echo ";";
            }
          }
          echo "\r\n";
        }

      Hoffe, das hilft jemandem weiter :)

      Grüße
      Michael

      1. Hello,

        Hab mir das Ganze mal, so wie Du empfohlen hast, per HexEdit angeguckt. Excel verwendet chr(10) zwischen Umbrüchen in Zellen. Außerdem sind Zellen, in denen ein Umbruch statt findet, von " eingeschlossen.

        Um z.B. eine MySQL-Abfrage "excelgerecht" als csv-Datei auszugeb, nutze ich nun folgenden Code:

        Ohne den Quellcode gelesen zu haben( es klinget gerade)..

        Vergiss nicht, die Enclosures (PHP-Slang) bzw. Delimiter (Fachsprache spätestens seit dBase) auch zu escapen, wenn sie im Datenwert vorkommen. Das macht man aber mit einer Doppelung des Delimiters und nicht mit einem BackSlash.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau