Générer des fichiers Excel (XLS) avec PHP
Que ce soit pour extraire des informations d'une base de données (ex: MySQL) ou pour les convertir à partir d'un autre format, l'écriture de multiples fichiers Excel par un script de manière automatisée peut s'avérer utile, voire indispensable lorsqu'on vous demande plusieurs centaines de fichiers.
Pour ceci, PHPIndex a publié un mini article PHP et Excel : point de situation, qui date un peu certes mais qui faute de mieux présente des solutions manipulation de fichiers Excel depuis PHP.
Après tri selon les critères les plus courants (générer des fichiers binaires véritablement au format Excel natif, utiliser une librairie facile à installer), PHP_Writeexcel se démarque du lot. A l'aide de deux includes, la création de l'objet writeexcel_workbook (classeur) est à votre portée, ainsi que l'ajout de worksheet (feuilles) à ce classeur. Les cellules sont remplissables par ce type d'instruction : $worksheet->write(x, y, $valeur, $format);
où x et y représentent les coordonnées de la cellule dans la feuille de calcul, $valeur le contenu texte de la cellule et $format le format de la cellule.
Il ne faut pas s'attendre à pouvoir définir des formats exceptionnels mais ils sont suffisants dans la plupart des cas. Couleur de fond, police, bordures, alignement du texte, etc. Il est aussi possible de définir la hauteur des lignes ou la largeur des colonnes, voire de fusionner plusieurs cellules entre elles. Les exemples fournis sont un bon point de départ, même si on peut regretter une documentation absente.
La moulinette est performante et ne peut que faire gagner du temps. Il suffit d'envoyer un petit header("Content-Type: application/x-msexcel"); pour obliger le navigateur à considérer le fichier dans le bon type (affichage ou téléchargement), ou bien de demander au script de l'écrire sur le disque. Après test en situation réelle, une centaine de classeurs comportant chacun une page basique munie d'un tableau de données de taille 6x40, sont générés en 20 secondes.
8 juin 2004 à 08:13
Super, il fallait bien faire le point cette fonctionnalité est vraiment très utile. Merci !
24 juin 2004 à 15:10
Moi aussi, je pensais que c’était bien (et cela le semble).
J’ai essayé de l’utiliser mais je n’arrive pas…
J’ai l’erreur suivante :
open_basedir restriction in effect. File is in wrong directory in …
J’ai juste fait un copier/coller pour l’instant.
Et chaque démo que j’essaie, j’ai la même erreur.
Comment faire epour ne pas écrire sur le serveur ???
14 octobre 2004 à 14:45
Il suffit de générer une page comme ça et ça marche tout seul avec excel > 2000
<?
header("Content-Type: application/force-download; name=\"$NomFichier\"");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"$NomFichier\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");?>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40&...
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-latin-1" />
<meta name="ProgId" content="Excel.Sheet" />
<meta name="Generator" content="Microsoft Excel 9" />
<style>
<!–//
td.xleuro {
mso-style-parent:style0;
mso-number-format:"\#\,\#\#0\.00\\ \0022\20AC\0022";
}
//–>
</style>
</head>
<body>
<table x:str="true" border="1" cellpadding="0" cellspacing="0">
<tr>
<th>Numero</th>
<th>Montant</th>
<th>France Telecom</th>
<th>Orange</th>
<th>Wanadoo</th>
<th>Canal</th>
</tr>
<tr>
<td x:num= »>1234567892</td>
<td class=’xleuro’ x:num= »>125</td>
<td class=’xleuro’ x:num= »>50</td>
<td class=’xleuro’ x:num= »>50</td>
<td class=’xleuro’ x:num= »>25</td>
<td class=’xleuro’ x:num= »>Moi</td>
</tr>
<tr>
<td x:num= »>1234567893</td>
<td class=’xleuro’ x:num= »>130</td>
<td class=’xleuro’ x:num= »>10</td>
<td class=’xleuro’ x:num= »>10</td>
<td class=’xleuro’ x:num= »>10</td>
<td class=’xleuro’ x:num= »>Machin</td>
</tr>
</table>
</body>
</html>
14 octobre 2004 à 14:48
J’oubliais
a la place de x:num on peut utiliser x:func ou x:str etc
les feuilles peuvent être avec des formules etc.
pour les classeurs il faut faire des fichier html dans un dossier et fournir un fichier xml qui contient la liste du contenu.
11 avril 2005 à 15:21
étonnant comme c’est simple en regard du résultat,
mais ou trouver tous ces paramétres et leur syntaxe?
x:func, x:str , des choses du genre:
mso-number-format:"\#\,\#\#0\.00\\ \0022\20AC\0022";
(je suppose que ça parle d’euro ?)
les couleurs de cellule…
merci d’avance
18 avril 2005 à 14:54
‘llo :-)
>> "mais ou trouver tous ces paramétres et leur syntaxe?"
je crois qu’il y a un peu de doc à ce sujet sur http://www.agoric.com/sources/so... :-)
26 août 2005 à 17:12
Merci pour le billet ca va m’être très utile ^^
30 août 2005 à 14:26
Génération simple d’un fichier XLS
Voici un petit exemple qui va générer un fichier xls :
$dir = « /data/ »;
$nomFichier = « test.xls »;
30 août 2005 à 14:27
Génération simple d’un fichier XLS
Etant donné que certaines personnes ne savait pas comment convertir un fichier .csv en .xls ( -_-; ), j’ai donc parcouru le web via Google afin de « trouver une petite solution ».
Je suis donc tombé sur un petit blog (
23 septembre 2005 à 11:56
Salut,
J’arrive à générer des fichiers excel mais il par contre quand je met des images elles se superposent avec le reste du document.
30 janvier 2007 à 13:45
J’utilise PHP writeexcel et il limite la taille des cellules à 255 caracteres. Quelqu’un a une idée ou a déja eu le meme problème ?
12 février 2007 à 10:53
Salut à tous, j’arrive a générer un fichier excel mais j’aimerai colorer des lignes.
J’ai utiliser : bg_color mais ca marche pas.
$center2 =& $workbook->addformat(array(‘align’ => ‘center’, ‘bg_color’ => ‘FFFF00’));
1 mars 2007 à 11:28
Bonjour à tous, j’ai utilisé les librairies excel, et tout marche bien, sauf que je n’arrive pas à faire la pagination.
Si quelqu’un a des idée je suis preneur :)
Merci d’avance !!
5 avril 2007 à 10:43
Claude va voir là
search.cpan.org/src/JMCNA…
J’ai fait une belle feuille mais je n’arrive pas à formater mon pied de page (taille police et couleur)
Si y quelqu’un qui sais je suis preneur.
@+ Stan
27 décembre 2007 à 18:01
j’ai besoin d’un syllabus d’Excel
16 janvier 2008 à 16:35
Bonjour, je voudrais lier une cellule d’une feuille à une autre. Exemple j’ai 2 feuilles, "feuil1" et "feuil2", je veux que le contenu A1 de feuil1 soit lié dans B2 de feuil2. Alors dans la cellule B2 (de feuil2) je met ‘=feuil1!A1’, tout s’exécute bien, mais quand j’ouvre le fichier avec Excel2002 j’obtiens des erreurs de plantage et j’ai 0 dans la cellule B2. Est-ce que quelqu’un a déja eu ce genre de problème?
20 juin 2008 à 12:28
Salut a tous,
j’ai un petit souci, lorsque je lance ma page php et qu’un fichier est créé, il va automatiquement dans mon repertoire tmp meme quand je ferme mon fichier.
A chaque fois que je relance la page j’ai une sorte de compteur qui s’incremente du genre : Fichier-1 puis Fichier-2….et en + les fichiers s’entassent dans le repertoire tmp…
De plus, quand je fais fichier->enregistrer sous, ça me l’enregistre en tant que page web.
Cmt faire pour changer tt ça svp??
Merci d’avance