Letzte Woche habe ich hier bereits darüber geschrieben, wie man mit dem MS-Excel Stream Handler Excel Dateien erstellen kann, nun habe ich hier noch eine andere, viel umfangreichere Lösung.
Die Lösung nennt sich PHPExcel und kommt von CodePlex. Die "Installation" ist sehr simpel, ZIP Datei herunterladen und die PHP-Dateien auf dem Server speichern. Im Script, das die Excel Datei schreiben soll dann die Dateien PHPExcel.php und PHPExcel/IOFactory.php einbinden.
Die ganze Klasse ist viel zum Umfangreich um hier komplet beschrieben zu werden, ich beschränke mich lediglich auf das schreiben eines Excel Files ohne Formatierung. Wer etwas Farbe ins speil bringen will, oder Formeln, Rahmen usw. benutzen will führt sich am besten die sehr ausführliche Dokumentation zu gemüte.
Wenn die beiden Dateien eingebunden sind, muss man als erstes eine Instanz der Klasse erstellen und kann danach gewisse Dokumenteigenschaften wie den Ersteller Titel usw. schreiben.
Beim nächsten Schritt definiert man, in welches Worksheet man schreiben will. Ich habe bei diesem Beispiel nur ein Sheet und so kann ich auch nur das anwählen.
Nun kann man die gewünschten Daten in die Datei schreiben. Die Methode erwartet zwei Parameter. Zum einen das Feld, in das geschrieben werden soll und der Wert, der geschrieben werden soll. Das Feld muss im Format A1 angegeben werden, also genau wie im Excel.
Nun kann man noch den Titel des aktuellen Worksheets definieren. Wird nichs angegebn wird einfach der Filename benutzt.
Zum Schluss müssen die Daten noch in eine Datei geschrieben werden. Dazu erstellt man erstmal eine neue Instanz der IOFactory und gibt dort an, welchen Dateityp die Datei haben soll. Also Excel 2007, Excel 5 usw. Ich habe aus Kompatibilitätsgründen Excel 5 gewählt.
Und so sieht das ganze Script aus:
Die Lösung nennt sich PHPExcel und kommt von CodePlex. Die "Installation" ist sehr simpel, ZIP Datei herunterladen und die PHP-Dateien auf dem Server speichern. Im Script, das die Excel Datei schreiben soll dann die Dateien PHPExcel.php und PHPExcel/IOFactory.php einbinden.
<?
require_once("includes/PHPExcel.php");
require_once("includes/PHPExcel/IOFactory.php");
?>
Die ganze Klasse ist viel zum Umfangreich um hier komplet beschrieben zu werden, ich beschränke mich lediglich auf das schreiben eines Excel Files ohne Formatierung. Wer etwas Farbe ins speil bringen will, oder Formeln, Rahmen usw. benutzen will führt sich am besten die sehr ausführliche Dokumentation zu gemüte.
Wenn die beiden Dateien eingebunden sind, muss man als erstes eine Instanz der Klasse erstellen und kann danach gewisse Dokumenteigenschaften wie den Ersteller Titel usw. schreiben.
<?
// neue instanz erstellen
$xls=new PHPExcel();
// dokumenteigenschaften schreiben
$xls->getProperties()->setCreator("David Lienhard")
->setLastModifiedBy("David Lienhard")
->setTitle("Test")
->setSubject("Test");
?>
Beim nächsten Schritt definiert man, in welches Worksheet man schreiben will. Ich habe bei diesem Beispiel nur ein Sheet und so kann ich auch nur das anwählen.
<?
// das erste worksheet anwaehlen
$sheet=$xls->setActiveSheetIndex(0);
?>
Nun kann man die gewünschten Daten in die Datei schreiben. Die Methode erwartet zwei Parameter. Zum einen das Feld, in das geschrieben werden soll und der Wert, der geschrieben werden soll. Das Feld muss im Format A1 angegeben werden, also genau wie im Excel.
<?
// den wert test in das Feld A1 schreiben
$sheet->setCellValue("A1","test");
?>
Nun kann man noch den Titel des aktuellen Worksheets definieren. Wird nichs angegebn wird einfach der Filename benutzt.
<?
// den namen vom Worksheet 1 definieren
$xls->getActiveSheet()->setTitle("Titel");
?>
Zum Schluss müssen die Daten noch in eine Datei geschrieben werden. Dazu erstellt man erstmal eine neue Instanz der IOFactory und gibt dort an, welchen Dateityp die Datei haben soll. Also Excel 2007, Excel 5 usw. Ich habe aus Kompatibilitätsgründen Excel 5 gewählt.
<?
// eine writer instanz erstellen
// das dateiformat ist hier excel5
// alt, aber von allen excel versionen lesbar
$writer=PHPExcel_IOFactory::createWriter($xls,"Excel5");
// die daten speichern
$writer->save("filename.xls");
?>
Und so sieht das ganze Script aus:
<?
// neue instanz erstellen
$xls=new PHPExcel();
// dokumenteigenschaften schreiben
$xls->getProperties()->setCreator("David Lienhard")
->setLastModifiedBy("David Lienhard")
->setTitle("Test")
->setSubject("Test");
// das erste worksheet anwaehlen
$sheet=$xls->setActiveSheetIndex(0);
// den wert test in das Feld A1 schreiben
$sheet->setCellValue("A1","test");
// den namen vom Worksheet 1 definieren
$xls->getActiveSheet()->setTitle("Titel");
// eine writer instanz erstellen
// das dateiformat ist hier excel5
// alt, aber von allen excel versionen lesbar
$writer=PHPExcel_IOFactory::createWriter($xls,"Excel5");
// die daten speichern
$writer->save("filename.xls");
?>
