Manu: Excel-Tabelle generieren

Moinsen!

Mit meinem gesammelten Datenwust erstelle ich eine HTML-Tabelle und schicke sie per u.a. header("Content-Type: application/vnd.ms-excel"); an den Benutzer, der sie öffnen oder speichern darf.

Dabei treten 2 Probleme auf:

1. in meiner ersten Spalte habe ich bspw. den folgenden String Produkt<br>Produktname, Excel zeigt mir aber statt eines Zeilenumbruches nur ein kleines Kästchen an. Auch <br /> läßt nur ein Kästchen erscheinen.

2. Die Preisdaten sind allesamt als "Standard" formatiert. Gibt es eine Möglichkeit, diese direkt als "Zahl" zu formatieren?

Gruß,
Manu

  1. Tauch auch.

    Nutzt du Spreadsheet-Excel-Writer? Oder wie schreibst du die Excel-Dateien?

    1. in meiner ersten Spalte habe ich bspw. den folgenden String Produkt<br>Produktname, Excel zeigt mir aber statt eines Zeilenumbruches nur ein kleines Kästchen an. Auch <br /> läßt nur ein Kästchen erscheinen.

    Nun ja, <br> bzw <br /> ist ja auch HTML, damit kann Excel nur sehr wenig anfangen. Auf anhieb weiß ich aber auch grad nicht, wie das geht, uU mal in http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.spreadsheet-excel-writer-format.settextwrap.php und den anderen Format-Methoden nachschauen.

    1. Die Preisdaten sind allesamt als "Standard" formatiert. Gibt es eine Möglichkeit, diese direkt als "Zahl" zu formatieren?

    Dann sollte dir die Funktion writeNumber helfen (siehe auch Doku

    Bis die Tage,
    Matti

    1. Hallo Matti & danke für die Antwort,

      nein, ich nutze reines html (smarty), um die Table zu bauen, da sie in einer ählichen Weise auch im Browser dargestellt wird.

      mit den header-angaben bekomme ich dann auch meine excel-Table...allerdings mit den oben geschilderten Probs:

      $aMain['CONTENT'] = $oSmarty->fetch("table_excel.tpl");
      header("Pragma: ");
      header("Cache-Control: ");

      header("Content-Type: application/vnd.ms-excel");
      header("Content-Disposition: inline; filename="$sFilename.xls"");
      echo $aMain['CONTENT'];
      die;

      Gruß,
      Manu

      1. Hallo,

        nein, ich nutze reines html (smarty), um die Table zu bauen, da sie in einer ählichen Weise auch im Browser dargestellt wird.

        mit den header-angaben bekomme ich dann auch meine excel-Table...allerdings mit den oben geschilderten Probs:

        Mit welchen Excel-Versionen soll das laufen? Am besten geht man an so etwas wie folgt heran:

        • scheibe im Excel eine Tabelle
        • speichere diese Tabelle als html (Dateityp)
        • öffne die generierte HTML-Datei mit einem Texteditor
        • versuche den Inhalt zu verstehen ;-) (Leider scheint es keine öffentliche Spezifikation für die MS-eigenen Style-Sheet-Angaben zu geben.)

        Ich hab das mal mit Excel 2003 gemacht. Dabei ist das herausgekommen:

          
        <html>  
        <title>Excel Sheet</title>  
        <head>  
        <style>  
        table  
         {mso-displayed-decimal-separator:"\,";  
         mso-displayed-thousand-separator:"\.";}  
          
        br  
         {mso-data-placement:same-cell;}  
          
        .xl26  
         {mso-style-parent:style25;  
         mso-number-format:"\#\,\#\#0\.00\\ \€";}  
        </style>  
        </head>  
        <body>  
        <table>  
         <tr>  
          <td>Das<br>  
            ist<br>  
            ein<br>  
            Test</td>  
          <td class=xl26>1.234,56 €</td>  
         </tr>  
        </table>  
        </body>  
        </html>  
        
        

        Mit Excel 97/2000 musste man allerdings bei Formaten mit vnd.ms-excel.numberformat usw. arbeiten. Siehe http://forum.de.selfhtml.org/archiv/2005/2/t100201/#m613566.

        Ab Excel 2002 würde ich ohnehin zu XML als Datenübergabeformat greifen. Siehe http://forum.de.selfhtml.org/archiv/2007/2/t145621/#m945400.

        viele Grüße

        Axel

        1. Ich grüsse den Cosmos,

          Mit welchen Excel-Versionen soll das laufen?

          Das klappt aktuell mit jeder Version, allerdings ist unbekannt, wie lange noch.
          Sinnvoller ist es die PEAR-Klasse einzusetzen, die man mit einer wenig Geschick auch Standalone einsetzen kann. Sonst ist mir keine Möglichekit bekannt, ein Excel-Sheet zu erzeugen, suche schon lange danach.

          Als Alternativlösung arbeite ich grad dran, OpenOffice auf dem Server ohne X laufen zu lassen und per Script solche Dateien zu generieren. Ist aber viel Arbeit und auch nicht grad einfach. Aber als Denkanstoss evtl. hilfreich.

          Möge das "Self" mit euch sein

          --
          Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
          ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
          1. Ich grüsse den Cosmos,

            Guten Morgen,

            Mit welchen Excel-Versionen soll das laufen?

            Das klappt aktuell mit jeder Version, allerdings ist unbekannt, wie lange noch.

            Jau, im Moment läuft es so mit allen mir zur Verfügung stehenden Versionen, welch ein Glück, denn der arbeitsaufwand hält sich in Grenzen...

            Sinnvoller ist es die PEAR-Klasse einzusetzen, die man mit einer wenig Geschick auch Standalone einsetzen kann. Sonst ist mir keine Möglichekit bekannt, ein Excel-Sheet zu erzeugen, suche schon lange danach.

            Versuchs mal mit dem oben erwähnten header ;D
            Naja, das Problem ist hier der enorme Zeitdruck, ich glaube kaum, dass der Kunde noch ein paar Tage (Wochen?) länger warten will, nur damit die Excel-Datei auch mit M$-Excel 2015 noch läuft...
            Falls nicht, helfe ich ihm dann gerne ;D

            Als Alternativlösung arbeite ich grad dran, OpenOffice auf dem Server ohne X laufen zu lassen und per Script solche Dateien zu generieren. Ist aber viel Arbeit und auch nicht grad einfach. Aber als Denkanstoss evtl. hilfreich.

            Möge das "Self" mit euch sein

            Dito ;)

            1. Ich grüsse den Cosmos,

              Versuchs mal mit dem oben erwähnten header ;D

              Ne du, ich will nicht, das Excel vielleicht den Importdialog öffnet, sondern ich will das Excel-Format erzeugen. Und da gibts es aktuell nur die PEAR-Klasse, zumindest hab ich noch nichts anderes gefunden.

              Möge das "Self" mit euch sein

              --
              Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
              ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
              1. Jaja, erst probieren, dann lästern! :P
                Mit header() usw. wiest Du gefragt, ob Du die Datei öffnen oder speichern willst - nix Import...

                1. Ich grüsse den Cosmos,

                  Mit header() usw. wiest Du gefragt, ob Du die Datei öffnen oder speichern willst - nix Import...

                  Nochmal: Ich will das Excel-Format erzeugen. Was du machst, ist Excel dazu zu bewegen, einen HTML-Tabelle zu importieren und daraus eine Excel-Tabelle zu machen.
                  Das sind zwei völlig verschiedene Dinge, ganz egal, wie du auf deiner Meinung beharrst.

                  Möge das "Self" mit euch sein

                  --
                  Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
                  ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
                  1. Hallo Manuel,

                    Mit header() usw. wiest Du gefragt, ob Du die Datei öffnen oder speichern willst - nix Import...

                    Nochmal: Ich will das Excel-Format erzeugen. Was du machst, ist Excel dazu zu bewegen, einen HTML-Tabelle zu importieren und daraus eine Excel-Tabelle zu machen.

                    ich habe den Eindruck, ihr redet beide aneinander vorbei.
                    Du willst mit PHP eine Datei im nativen Excel-Format, welcher Version auch immer, erzeugen. Richtig? - Okay.
                    Und Manu will uns, wenn ich sie richtig verstehe, darauf hinweisen, dass man eine HTTP-Ressource nur mit dem richtigen Content-Type ausliefern muss, so dass der Browser fragt, ob man sie speichern oder direkt in der dafür zuständigen Anwendung öffnen möchte. Daher der Hinweis auf header().

                    Für Manus ursprüngliches Anliegen mag das eine brauchbare Lösung sein, da Excel, wenn man es ganz lieb bittet, auch HTML-Tabellen importieren kann. Mit *deinem* Anliegen hat das aber herzlich wenig zu tun.

                    Das sind zwei völlig verschiedene Dinge, ganz egal, wie du auf deiner Meinung beharrst.

                    So sehe ich das auch.

                    Schönen Abend noch,
                     Martin

                    --
                    Butterkeksverteiler zu werden ist vermutlich eine der wenigen beruflichen Perspektiven, die sich noch bieten, wenn man einen an der Waffel hat.
                      (wahsaga)
        2. Hallo Axel,

          danke für die Antwort. Das hatte ich initial gemacht und ein paar mso-Angaben in mein Template kopiert. Bspw. klappt br
           {mso-data-placement:same-cell;} auch in einer Zeile, in einer Zelle mit rowspan allerdings nicht.

          Als ich nun die generierte Datei noch einmal abgespeichert hatte, habe ich bemerkt, dass übriggeblibene &nbsp;s das Formatieren als Zahl verhindert haben.

          (Leider scheint es keine öffentliche Spezifikation für die MS-eigenen Style-Sheet-Angaben zu geben.)

          Habe mir das hier heruntergeladen:
          http://msdn2.microsoft.com/en-us/library/Aa155477(office.10).aspx

          Gruß,
          Manu

          1. Hallo,

            (Leider scheint es keine öffentliche Spezifikation für die MS-eigenen Style-Sheet-Angaben zu geben.)

            Habe mir das hier heruntergeladen:
            http://msdn2.microsoft.com/en-us/library/Aa155477(office.10).aspx

            Danke :-)

            viele Grüße

            Axel

  2. Hellihello

    vielleicht doch http://sourceforge.net/projects/phpexcelreader?

    Gruß,

    frankx

    1. Hallo frankx,

      danke für die Antwort, das kommt aber nicht in Frage, es ist auch nicht notwendig: die <br>s habe ich rausgeschmissen und Zahlen werden auch als Zahlen formatiert, wenn man &nbsp;s wegnimmt (copy&paste-Fehler meinerseits....*schandeübermeinhaupt*).

      Gruß,
      Manu