sf666: HTML seite als EXCEL file exportieren

Hi,

Ich suche nun schon lange eine möglichkeit, eine Tabelle die ich  auf einer  Webpage erstellt habe per button click auf der webpage als Excelfile zu speichern.

Per PHP und XSL wurde die Webpage bzw tabelle(n) erstellt.

Ich finde im Netz nur die umgekehrte version. Ich hab schon eine  webpage gesehen welches die ganze HTML seite convertiert und gleich als Excel datei speichert, also müsste es irgendwie gehen.

Ich brauche wenigstens einen anhaltspunkt wie ich so etwas erreiche, ich habe etwas über ASP gelesen, aber damit kenne ich mich (noch) nicht aus. Denke das sollte einfacher gehen, evt mit PHP, ähnlich wie FPDF oder so....

Hoffe ihr könnt mir einen anhaltspunkt geben bzw. Denkanstoss.

MfG

SF-666

  1. Ich suche nun schon lange eine möglichkeit, eine Tabelle die ich  auf einer  Webpage erstellt habe per button click auf der webpage als Excelfile zu speichern.

    Nimm vielleicht besser CSV, damit kann nicht nur Excel hervorragend umgehen, und du sparst dir den ganzen proprietären und zudem versionsabhängigen Quatsch, den das Excel-Format mit sich bringt.

    Per PHP und XSL wurde die Webpage bzw tabelle(n) erstellt.

    Dann sollte es kein Problem sein, dir ein geeignetes XSL zu erstellen, das ausgehend von den vorhandenen XML-Dateien als Ergebnis kein HTML liefert, sondern eine CSV-Datei. Auf die Schnelle hierzu gefunden: http://www.wenzlaff.de/xmltocsv.html (mit Beispiel).

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
  2. Ich suche nun schon lange eine möglichkeit, eine Tabelle die ich  auf einer  Webpage erstellt habe per button click auf der webpage als Excelfile zu speichern.

    Hallo, ich habe sowas vor kurzem gemacht. Wenn ich zuhause bin kann ich dir hier evtl. etwas code posten.

    Du kannst die Werte natürlich einfach als CSV Datei speichern. Dann fehlt dir jedoch jede weitere formatierung.

    Meine Traumlösung ist XML. XML ist im Gegensatz zum "richtigen" Excel-format gut lese- und schreibbar, hat aber im Gegensatz zu CSV formatierungsmöglichkeiten, wie z.b. spaltenbreite, farben...

    Das einzige was man braucht ist eine nach xml exportierte Excel-tabelle. Da nimmt man den oberen teil (header) und den unteren teil und dass dazwischen macht man dynamisch mit php.
    Und mit einer Mime-Typ-Angabe in der PHP-Datei wird das sogar runterladbar. Funktioniert außerdem browserunabhängig und für Excel sowie Openoffice.

    hilfsreich währe zu wissen ob die daten fest in deiner seite hast, oder ob die z.b. per PHP aus ner datenbank geholt werden.

    1. Danke für deine Antwort,

      Die Daten werden ständig aktualisiert, bei jedem Reload also sind evt. neue Daten drin, ist eine art Rapport. Und diese würde ich gerne als Excel Datei speichern, bzw der User soll ohne umstände auf ein button klicken und schon kommt ein Fenster mit "speichern unter", aber als Excelfile bzw Openoffice.

      XML scheint mir auch die bessere Lösung zu sein.

      In diesem Rapport sind viele Zeilen und spalten drin.

      Über einen ungefähren Code wäre ich dankbar, könnte mir sicher weiterhelfen.

      gruss

      1. Hallo, leider hast du nicht geschrieben wie die Werte aktualisiert werden. Also per PHP, oder manuell.
        Meine Möglichkeit basiert auf PHP.

        Hier mal etwas von dem Code:
        http://nopaste.info/a94b5ff896.html

        (Zur besseren Lesbarkeit zeilennummern ausblenden. An manchen Stellen habe ich sachen mit "Text1" oder "AAA" oder so anonymisiert. Das sind meist stellen, wo der Text steht, der in das entsprechende Feld kommt)

        Dieser Teil schreibt erstmal den Header in die variable $output.
        Die \n am Ende der Zeile einzufügen ist wichtig!
        Das vor dem <styles> kannst du einfach übernehmen. Das ist der Standard-anfang wenn man excel-tabellen in xml schreibt.
        in den styles werden unterschiedliche Formate gespeichert die alle einer ID zugeordnet werden (ss:ID=).
        Das können zum Beispiel Ränder der Zellen sein, oder Farben.
        Bei mir haben wie du vieleicht schon siehst, alle Styles eine komplette umrandung und unterschiedliche farben.
        Am problematischten von diesem ersten Teil ist die Zeile:
        <Table ss:ExpandedColumnCount="13" ss:ExpandedRowCount="'.(5+$rowcount).'" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60">

        Hier muss man nämlich angeben, bis zu welcher zeile/spalte die felder gehen. Ich muss z.b. die ganze db abfrage zweimal machen. Einmal um zu schauen, wieviel kommt. Und einmal um die daten einzufügen.

        http://nopaste.info/2675cb7af0.html

        hier habe ich dynamisch daten aus der datenbank hinzugefügt.
        $count wird hier verwendet um die Zeilen abwechselnd anderst zu färben.

        Dann noch alles schnell mit diesem code schliessen:
        $output = $output.
        '  </Table>    '."\n".
        ' </Worksheet>   '."\n".
        '</Workbook>   '."\n";

        Nun steht der XML Code in der Variable $output.
        Möchte man ihn zum download anbieten, gibt man ihn wie folgt aus:

        header("Content-type: application/vnd-ms-excel");
        header("Content-Disposition: attachment; filename=export.xml");

        echo $output;

        Wenn man diese php datei nun verlinkt, geht beim anklicken, das "speichern unter" fenster des browsers auf und die daten werden als datei export.xml gespeichert.

        Es hört sich erstmal recht kompliziert an, ist aber machbar. Am besten verstehst du das alles würde ich sagen, wenn du einfach mal eine Tabelle in Excel machst, wie du sie dir vorstellst, und du diese exportierst. Dann noch etwas rumspielen(zeile/spalten löschen/hinzufügen) und schauen was sich in der datei ändert.

    2. Hallo, ich habe sowas vor kurzem gemacht. Wenn ich zuhause bin kann ich dir hier evtl. etwas code posten.

      Ja, würde mich auch mal interessieren, zumal ich um das ExcelXML-Format bisher einen riesigen Bogen gemacht habe :)

      Meine Traumlösung ist XML. XML ist im Gegensatz zum "richtigen" Excel-format gut lese- und schreibbar, hat aber im Gegensatz zu CSV formatierungsmöglichkeiten, wie z.b. spaltenbreite, farben...

      Das ist das Problem, ohne Spezifikation bist du ziemlich aufgeschmissen (s.u.).

      Das einzige was man braucht ist eine nach xml exportierte Excel-tabelle. Da nimmt man den oberen teil (header) und den unteren teil und dass dazwischen macht man dynamisch mit php.

      Wenn sich die Styles nicht ändern, ist es sicher kein Problem. Schwierig wird es, wenn du Formatierungen, für die es noch keinen Style gibt, selber anlegen musst. Vor diesem Hintergrund halte ich CSV trotz fehlender Formatierungen für die einfachere Lösung.

      Siechfred

      --
      Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
      1. Meine Traumlösung ist XML. XML ist im Gegensatz zum "richtigen" Excel-format gut lese- und schreibbar, hat aber im Gegensatz zu CSV formatierungsmöglichkeiten, wie z.b. spaltenbreite, farben...

        Das ist das Problem, ohne Spezifikation bist du ziemlich aufgeschmissen (s.u.).

        Wenn ich richtig verstehe was du mit spezifikation meinst(Wie muss die Datei aussehen, dass die Tabelle nacher so und so aussieht) dann ist dass nicht sonderlich schwer, da du jede wunschtabelle bauen , diese in xml exportieren und anschauen kannst.

        Wenn sich die Styles nicht ändern, ist es sicher kein Problem. Schwierig wird es, wenn du Formatierungen, für die es noch keinen Style gibt, selber anlegen musst. Vor diesem Hintergrund halte ich CSV trotz fehlender Formatierungen für die einfachere Lösung.

        Also tschuldigung, aber die styles sind wirklich nicht viel schwerer wie eine farbangabe in html. z.B.:
        ---------------------------------------------------------------
        <Style ss:ID="s23">
          <Borders>
            <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
            <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
            <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
            <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
          </Borders>
          <Interior ss:Color="#808080" ss:Pattern="Solid"/>
        </Style>
        ---------------------------------------------------------------
        Style id= einfach fortlaufende nummer. wenn man auf einer seite keinen rand möchte, die entsprechende zeile für top,buttom,right oder left zu löschen müsste man auch hinbekommen.
        Und dass dieses "#808080" da unten wohl die Farbe ist dürfte auch zu erraten sein.

        Das letzendliche Konstrukt bleibt gleich. Und mit Rand+Farbe kann man schon die wichtigsten Funktionen benutzen.

        Sachen wir Formeln oder Zahlenformatierungen sind auch nicht schwerer. Da steht irgendwo ein type="number" oder so ähnlich und das wars.