Symfony: Export nach Excel oder OpenOffice
Wenn man eine Datenbankanwendung programmiert, wird man in der Regel auch damit konfrontiert Daten in andere Anwendungen exportieren zu müssen. Ein beliebtes Exportformat, neben PDFs, sind dabei Tabellenkalkulations-Programme (was für ein Wort…). Mit PHP bzw. serverbasierten Webanwendungen ist das ganze gar nicht mal kompliziert und kann ohne zusätzliche Bibliotheken oder ähnlichem gemacht werden. In diesem Beitrag zeige ich mal, wie das in Symfony aussehen kann.
Das Prinzip hinter dem ganze ist recht trivial. Man ändert einfach den MIME-Type mit der das Dokument gesendet wird. Für ein Excel-Dokument würde das ganze in der actions.class.php und der entsprechenden Methode für die Exportfunktion so aussehen:
$this->getResponse()->setContentType('application/msexcel');
und für OpenOffice Calc:
$this->getResponse()->setContentType('application/vnd.oasis.opendocument.spreadsheet');
Ich persönlich würde generlell die Excel-Version empfehlen, weil mit der kommt auch OpenOffice klar
Nun legen wir noch den Dateinamen fest, der übermittelt werden soll:
$this->getResponse()->setHttpHeader('Content-Disposition', 'inline; filename="Export.xls"');
Als nächstes muss das Layout der Seite abgeschaltet werden, weil das wollen wir ja nicht in der Excel (oder OO Calc) Datei haben. Wenn man viele verschiedene Exports macht, kann man sich gegebenenfalls ja ein eigenes Exportlayout anlegen. Aber hier machen wir es mal ganz einfach und schalten das normale Layout einfach ab:
$this->setLayout(false);
Nun zum eigentlichen, dem Inhalt der exportiert werden soll. Für die Bildschirmausgabe packen wir ja meistens Daten aus der Datenbank einfach in eine HTML-Tabelle, ist ja das Naheliegenste. Für den Export brauchen wir die Daten nicht in ein spezielles Format packen, sondern wir geben sie als stinknormale unformatierte HTML-Tabelle über das Template zu unserer Action aus:
<table>
<thead>
<tr>
<th>Spaltenüberschrift 1</th>
<th>Spaltenüberschrift 2</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $account->getSpalte1() ?></td>
<td><?php echo $account->getSpalte2() ?></td>
</tr>
</tbody>
</table>
Das wars dann im Grunde schon, wenn die Action jetzt ausgeführt wird, wird einem der Browser entweder vorschlagen Excel oder Calc zu öffnen um die Datei anzuzeigen oder er wird sie abspeichern wollen.
Related posts:


