Kermit: Datenbank nach Excel auslesen - Steuerzeichen für Zeilenumbruch?

Hallo,
habe mal 'ne Frage - bzw. immer noch...
habe ein PHP-Script mit dem ich Daten aus einer MySql Datenbank abfrage und nach Excel exportieren kann.
Soweit funktioniert alles ganz gut.
Nur wenn ich nun eine Tabellenzelle habe wie "Wort 1 </ br> Wort 2</br>" etc.
schreibt mir das Script diese Daten jeweils in die nächste Zeile ganz an den Anfang.
Kann mir jemand sagen durch welches Steuerzeichen ich das </br> ersetzen muß, damit die Daten in die gleiche Zelle geschrieben werden?
Habe etwas rumgesucht, konnte aber bisher nichts finden. \n bzw \t ganz ja nicht sein....

Schonmal danke für die Hilfe,
Kermit

  1. Hallo,

    habe ein PHP-Script mit dem ich Daten aus einer MySql Datenbank abfrage und nach Excel exportieren kann.

    Wie? Also mit welchem PHP-Code schreibst Du die Excel-Tabelle?

    Habe etwas rumgesucht, konnte aber bisher nichts finden. \n bzw \t ganz ja nicht sein....

    Na ein Tabulator (\t) nicht, aber warum nicht \n? Im VBA z.B. macht man sowas auch per Steuerzeichen NewLine, NL, x0A, 10, also \n:

    ActiveSheet.Range("A1").Value = "Das ist" + Chr(10) + "ein Test"

    viele Grüße

    Axel

    1. Hallo,

      habe ein PHP-Script mit dem ich Daten aus einer MySql Datenbank abfrage und nach Excel exportieren kann.
      Wie? Also mit welchem PHP-Code schreibst Du die Excel-Tabelle?

      $query_text = "select feld1, feld2, feld3, etc from tabelle where anweisung";

      Header("Content-Type: application/vnd.ms-excel");

      $result = mysql_query($query_text);
      if(!$result)
      {
      echo "Datenbankfehler";
      }
      $fieldcounts = mysql_num_fields($result);
      for($i = 0; $i < $fieldcounts; $i++) {
      $fieldtype = mysql_fetch_field($result, $i);
      if ($i < ($fieldcounts-1)) echo "$fieldtype->name \t";
      else echo "$fieldtype->name \n";
      }
      $myrow = mysql_fetch_array($result);
      do {
      for($i = 0; $i < $fieldcounts; $i++) {
      $fieldname = mysql_field_name($result, $i);
      if ($i < ($fieldcounts-1)) echo $myrow[$fieldname] . "\t";
      else echo $myrow[$fieldname] . "\n";
      }
      } while ($myrow = mysql_fetch_array($result));

      Na ein Tabulator (\t) nicht, aber warum nicht \n? Im VBA z.B. macht man sowas auch per Steuerzeichen NewLine, NL, x0A, 10, also \n:

      ActiveSheet.Range("A1").Value = "Das ist" + Chr(10) + "ein Test"

      Naja und mit obigen Script habe ich das Problem, daß wenn Zeilenumbrüche im Text stehen automatisch eine neue Zeile angefangen wird und nicht der Zeilenumbruch innerhalb der Zelle stattfindet.
      Das passiert mir auch, wenn ich, aus welchen Gründen auch immer, Zeilenumbrüche habe die nicht per Code (also kein <p> oder <br> o.ä.) in den Text geschrieben wurden - mir ist auch nicht ersichtlich woher diese Zeilenumbrüche kommen - aber das ist wohl ein anderes Problem....

      Grüße,
      Kermit

      1. Hallo Kermit,

        habe ein PHP-Script mit dem ich Daten aus einer MySql Datenbank abfrage und nach Excel exportieren kann.
        Wie? Also mit welchem PHP-Code schreibst Du die Excel-Tabelle?

        Header("Content-Type: application/vnd.ms-excel");

        Du glaubst also allen Ernstens, das Absenden eines Headers reiche aus, um anschließend tatsächlich Daten im Excel-Format zu haben? Wenn ja, dann bist Du ein Optimist.

        Nein, so einfach ist das nicht. Du gibst einfachen Text aus - und Excel versucht vermutlich irgendwie zu verstehen, was es da anzeigen soll. Ich bekunde hiermit meine Hochachtung vor den Excel-Entwicklern, das Excel überhaupt etwas anzeigt. Schau Dir doch bitte die Einführung des Spreadsheet_Excel_Writer-Packages aus PEAR an.

        Freundliche Grüße

        Vinzenz

        1. Du glaubst also allen Ernstens, das Absenden eines Headers reiche aus, um anschließend tatsächlich Daten im Excel-Format zu haben? Wenn ja, dann bist Du ein Optimist.

          Klar immer positiv denken ;-)
          Ernsthaft, ich habe davon keine Ahnung! Es hat bisher gut geklappt mit diesem Script aber wie gesagt sobald ein Zeilenumbruch drin vorkommt gibt es Probleme.
          Ich muß keine Formeln o.ä. exportieren, sondern brauche als Ergebniss nur eine einfach Tabelle, die nur mit Text gefüllt wird, und in der der Text in den richtigen Zeilen steht.

          Habe auch schon versucht das ganze ganz banal als csv Datei zu speichern und dann in Excel (oder OpenOffice) zu öffnen - aber das Resultat ist das gleiche....

          Werde mir mal die Einführung anschauen und hoffe etwas zu verstehen.

          Danke für den Tip,
          Kermit

      2. Hallo,

        habe ein PHP-Script mit dem ich Daten aus einer MySql Datenbank abfrage und nach Excel exportieren kann.
        Wie? Also mit welchem PHP-Code schreibst Du die Excel-Tabelle?

        if ($i < ($fieldcounts-1)) echo "$fieldtype->name \t";
        else echo "$fieldtype->name \n";

        if ($i < ($fieldcounts-1)) echo $myrow[$fieldname] . "\t";
        else echo $myrow[$fieldname] . "\n";

        Ah, ja. Damit schreibst Du aber keine Excel-Datei, sondern eine tabulatorgetrennte CSV Text-Datei. Excel kann nur zufällig solche Dateien direkt öffnen. Eine solche Date sieht z.B. so aus:

        Name     Vorname Alter  Betrag
        Müller   Klaus   23     123,67
        Maier    Ulrike  34     456,78
        Das ist
        ein Test Hans    34     2.324,78

        Die Letzte Zeile zeigt, was hier passiert, wenn der Name einen Zeilenwechsel enthält. Wie anders soll eine reine Textdatei damit umgehen?

        Siehe Vinzenz' Vorschlag http://pear.php.net/package/Spreadsheet_Excel_Writer.

        viele Grüße

        Axel

        1. so aus:

          Name     Vorname Alter  Betrag
          Müller   Klaus   23     123,67
          Maier    Ulrike  34     456,78
          Das ist
          ein Test Hans    34     2.324,78

          Das wäre ja noch ok, aber ich bekomme
          Name     Vorname  Alter     Betrag
          Müller   Klaus    23        123,67
          Maier    Ulrike   34        456,78
          Das ist
          ein Test
          Hans     34       2.324,78
          Weber    Peter    etc.

          Und da wird es dann problematisch, da sich für die Zeile mit dem "Zeilenumbruch" die ganzen Daten verschieben....

          Siehe Vinzenz' Vorschlag http://pear.php.net/package/Spreadsheet_Excel_Writer.

          Werde ich machen - darf ich mich nochmal melden wenn ich nicht damit klar komme?

          Grüße,
          Kermit

          1. Hallo,

            Das wäre ja noch ok, aber ich bekomme
            Name     Vorname  Alter     Betrag
            Müller   Klaus    23        123,67
            Maier    Ulrike   34        456,78
            Das ist
            ein Test
            Hans     34       2.324,78
            Weber    Peter    etc.

            Dann ist der Inhalt von Name aber "Das ist\neinTest\n" oder "Das ist\r\neinTest\r\n" oder "Das ist\reinTest\r".

            Siehe Vinzenz' Vorschlag http://pear.php.net/package/Spreadsheet_Excel_Writer.
            Werde ich machen - darf ich mich nochmal melden wenn ich nicht damit klar komme?

            Wenn das für Dich wirklich overkill wäre, überlege, ob Du die Zeilenwechsel innerhalb einer Excel-Zelle wirklich brauchst. Wenn nicht, entferne einfach alle "\r\n" und und "\r" und "\n" aus den Feldinhalten. Mit Textdateien wie:

            Name             Vorname  Alter     Betrag
            Müller           Klaus    23        123,67
            Maier            Ulrike   34        456,78
            Das ist ein Test Hans     34        2.324,78
            Weber            Peter    etc.

            kommt Excel nämlich klar.

            viele Grüße

            Axel

    2. Hallo,

      ActiveSheet.Range("A1").Value = "Das ist" + Chr(10) + "ein Test"

      Sicherer wäre natürlich:

      ActiveSheet.Range("A1").Value = "Das ist" & Chr(10) & "ein Test"

      Frühere Versionen kannten den Operator "+" nicht für Textverkettung. Der eigentliche VB-Operator hierfür ist "&".

      viele Grüße

      Axel

  2. Hallo Kermit,

    Habe etwas rumgesucht, konnte aber bisher nichts finden. \n bzw \t ganz ja nicht sein....

    Excel verwendet als Trennzeichen ein Linefeed, d.h. chr(10) - also nicht den DOS/Windows-typischen Zeilenumbruch mit CR + LF.

    Das ist übrigens nicht schwer herauszufinden:

    1. Öffne Excel mit einer leeren Arbeitsmappe.
    2. Starte eine Makroaufzeichnung.
    3. Gebe in eine Zelle einen Text mit Zeilenumbruch (Alt + Enter) ein.
    4. Beende die Makroaufzeichnung.
    5. Schau Dir im VB-Editor (Alt + F11) den erzeugten Code an.

    Freundliche Grüße

    Vinzenz