Formatter un fichier Excel avec PHP
Certains clients me demandent parfois des exports en Excel dans leurs back-office. Loin d’être compliqué cet export demande tout de même quelques manipulations.
Rien de bien compliqué néanmoins, puisque une fonction et un header permettent de s’affranchir de cet exercice en moins de temps qu’il n’en faut.
Certes cette méthode affiche un avertissement lors de la première ouverture, mais il faut savoir qu’Excel gère très bien les tableaux. Le fichier s’ouvre donc parfaitement avec les versions XP et 2007.
Pour le header du fichier, c’est très simple :
header("Content-Type: application/vnd.ms-excel;");
Le formatage du tableau permet d’utiliser la plupart des formatage disponibles dans Excel :
<table> <tr> <td>Texte</td> <td style='mso-number-format:\@'>On formate un texte</td> </tr> <tr> <td>Nombre sur 3 décimales ( 2.345 )</td> <td style='mso-number-format:"0\.000"'>2.345678</td> </tr> <tr> <td>Nombre séparé par un espace, avec 3 décimales ( 1 234.567 )</td> <td style='mso-number-format:\#\ \#\#0\.000'>1234.56789</td> </tr> <tr> <td>Une date ( 06/09/2009 )</td> <td style='mso-number-format:"dd\/mm\/yyyy"'>2009-09-06 13:37:45</td> </tr> </table>
Voilà, il suffit juste ensuite de produire une simple boucle pour obtenir des exports de données vers Excel.
En utilisant les headers, les colspans, les rowspans, etc, on peux rapidement obtenir des exports beaucoup plus poussés.
Les couleurs de textes et les fonds de cellules sont aussi utilisables.
Sinon, quand on a besoin de faire des trucs plus complexes, je recommande l’excellente librairie PHPExcel…
On peut tout faire, ou presque : gestion de plusieurs feuilles, styles du texte ( couleur, police ), des cellules ( bordures, couleur de fond…) , fusion des cellules, gestion des images, liens hypertextes… etc etc.
Un petit lien pour les flemmards : http://www.codeplex.com/PHPExcel
Elle est intéressante, mais un peu usine à gaz pour de simples exports clients :p
Pourquoi ne pas plutôt utiliser le format csv plutôt que html ? C’est encore plus simple et plus light, non ?!
Tout simplement car tu ne pourrais pas appliquer de formatage, tel que le fond de la cellule, ou une couleur de texte par exemple.
Ou alors créer des entêtes avec des cellules groupées… etc.