Excel-Dateien erzeugen mit PHP und XML

23. Juni 2009 um 08:35 Uhr von Wolfgang Stengel zu XML, PHP
Die Aufgabe Excel-Dateien erstellen zu müssen kennt jeder Entwickler. Es gibt auch bereits eine Reihe von Möglichkeiten wie sich das bewerkstelligen lässt, von CSV-Dateien über PEAR-Libraries bis hin zu COM-Schnittstellen im Windows-Bereich. Eine weitere interessante Möglichkeit besteht darin XML-Dateien zu erzeugen. Dies hat natürlich wie alle anderen Möglichkeiten Vor- und Nachteile, die zwei größten Vorteile sind dass man trotz formatierter Zellen streamen kann und dass man sich benötigte neue Formatierungen leicht am von Excel erzeugtem XML abgucken kann, da das Format menschlich lesbar ist. Der Hauptnachteil ist dass diese Methode nicht mit Excel älter als 2000 funktioniert. Außerdem ist die Datenmenge höher ist im Vergleich zu nativen Excel-Dateiformaten.

Speichert man aus Excel heraus eine Datei mit dem Dateityp "XML-Kalkulationstabelle (*.xml)" wird eine XML-Datei erzeugt die sich mit jedem Texteditor betrachten und intuitiv verstehen lässt. Dieses Format kann dann mit PHP nachgebaut werden und in einer Datei gespeichert oder direkt über den Browser gestreamt werden. Mit dem Content-Type-Header application/vnd.ms-excel können die Daten direkt in Excel geöffnet werden. Viele Tags im XML sind sogar überflüssig wie z.B. DocumentProperties, OfficeDocumentSettings, ExcelWorkbook oder WorksheetOptions.

Der interessante Teil beginnt mit dem Tag Worksheet, der den Arbeitsblattname als Attribut enthält. Darin befindet sich ein Table-Tag der wiederum Row-Tags enthält. Davon eingeschlossen sind dann letzendlich die Zellen des Arbeitsblatts in Cell-Tags. Diese lassen sich mit Styles formatieren die ähnlich wie bei HTML/CSS separat im Header der Datei definiert werden. Wenn man ein ganz bestimmtes Layout benötigt kann das in Excel gebaut, gespeichert und dann im XML analysiert und nachgebaut werden.

Vorteile der Methode:
  • Einfache Erzeugung durch echo oder fwrite()
  • Hochflexibel durch menschliche Lesbarkeit und die Möglichkeit Formatierungen am Original abzulesen
  • Ausgabe als Stream möglich (praktisch bei großen Datenmengen die nicht komplett im Hauptspeicher gehalten werden können)
Nachteile:
  • Höhere Datenmenge durch XML-Overhead
  • Excel kann das XML-Format erst ab Version 2000 lesen
Bei Gelegenheit werde ich versuchen das Ganze in ein paar Klassen vernünftig zu kapseln. Stay tuned.
PHP Wolfgang Stengel