Création d’un fichier Excel grâce à PHP
Créer des fichier au format CSV est à la porté de tout le monde ( avec un minimum de recherche sur internet ).
Par contre créer un vrais fichier Excel, la c’est un peu plus difficile.
Mais Johann Hanne a trouvé la solution! Il a créer un ensemble de classe nommées « writeexcel ». Comme son nom l’indique il est fait pour créer et écrire des fichiers de type Excel et cela dynamiquement avec PHP. C’est pas beau ça ;p ?
Ça fonctionne plutôt bien, son seul défaut à l’heure actuelle, c’est qu’il ne supporte pas l’UTF-8.
Donc si votre site est en UTF-8 n’oubliez pas la fonction utf8_decode.
Pour télécharger writeexcel c’est ici.
Ou par la (au cas où le site de l’auteur tombe)
Alors comment ça marche?
Il faut juste les fichiers suivant :
– class.writeexcel_workbook.inc.php
– class.writeexcel_worksheet.inc.php
ceux-ci font partie de la librairie writeexcel.
require_once "writeexcel/class.writeexcel_workbook.inc.php"; require_once "writeexcel/class.writeexcel_worksheet.inc.php"; //On indique ensuite un emplacement sur le serveur, là où; sera stocké le fichier $fname = "../../files/tmp/extraction.xls"; /** * on instancie la classe principal de writeexcel. * la classe « writeexcel_workbook » permet de créer le fichier excel en lui même. * La fonction addworksheet de la class « writeexcel_workbook » permet de créer une feuille au sein du fichier Excel ( Vous savez les petit onglet en bas à droite ) */ $workbook =& new writeexcel_workbook($fname); // on lui passe en paramètre le chemin de notre fichier $worksheet =& $workbook->addworksheet('Extraction'); //le paramètre ici est le nom de la feuille /** * Ici on va définir un format pour les colonnes de A à D */ $worksheet->set_column('A:D', 30); // le 30 représente la largeur de chaque colonne $heading =& $workbook->addformat(array('bold' => 1, // on met le texte en gras 'color' => 'black', // de couleur noire 'size' => 12, // de taille 12 'merge' => 1, // avec une marge 'fg_color' => 0x33 // coloration du fond des cellules)); $headings = array('Nom', 'Prénom', 'société', 'Email', 'Pays'); //définition du texte pour chaque célulles $worksheet->write_row('A1', $headings, $heading); On intègre notre texte et les le format de cellule. // Le premier paramètre correspond à la cellule où l'on souhaite commencer à intégrer les différent paramètre. for($x = 2; $x <= 10; $x++) { $worksheet->write("A".$x,'un text'); // ici on va écrire une célule bien définie $worksheet->write("B".$x,'un text'); $worksheet->write("C".$x,'un text'); $worksheet->write("D".$x,'un text'); $worksheet->write("E".$x,'un text'); } $workbook->close(); // on ferme le fichier Excel créer
Voici une version pour créer plusieurs onglets dans un fichier Excel.
La différence avec le script au-dessus, c’est que nous allons créer plusieurs « workbook » grâce à la fonction $workbook->addworksheet(‘Nom de l’onglet’)
require_once "writeexcel/class.writeexcel_workbook.inc.php"; require_once "writeexcel/class.writeexcel_worksheet.inc.php"; //On indique ensuite un emplacement sur le serveur, là où sera stocké le fichier $fname = "./extraction.xls"; /** * on instancie la classs principal de writeexcel. * la classe « writeexcel_workbook » permet de créer le fichier excel en lui même. */ $workbook =& new writeexcel_workbook($fname); // on lui passe en paramètre le chemin de notre fichier for($y=0; $y<=2; $y++) { // La fonction addworksheet de la classe « writeexcel_workbook » permet de créer une feuille au sein du fichier Excel ( Vous savez les petit onglet en bas à droite ) // Pour créer plusieurs onglet il faut ré-appeler la fonction addworksheet. // Cela permettra d'ajouter une autre feuille au fichier excel $worksheet =& $workbook->addworksheet('Extraction'.$y); //le paramètre ici est le nom de la feuille /** * Ici on va définir un format pour les colonnes de A à D */ $worksheet->set_column('A:D', 30); // le 30 représente la largeur de chaque colonne $heading =& $workbook->addformat(array('bold' => 1, // on met le texte en gras 'color' => 'black', // de couleur noire 'size' => 12, // de taille 12 'merge' => 1, // avec une marge 'fg_color' => 0x33 // coloration du fond des cellules)); $headings = array('Nom', 'Prénom', 'société', 'Email', 'Pays'); //définition du texte pour chaque cellules $worksheet->write_row('A1', $headings, $heading); //On intègre notre texte et les le format de cellule. // le premier paramètre correspond à la cellule où l'on souhaite commencer à intégrer les différent paramètre. for($x = 2; $x <= 10; $x++) { $worksheet->write("A".$x,'un text'.$y); // ici on va écrire une cellules bien définie $worksheet->write("B".$x,'un text'.$y); $worksheet->write("C".$x,'un text'.$y); $worksheet->write("D".$x,'un text'.$y); $worksheet->write("E".$x,'un text'.$y); } } $workbook->close(); // on ferme le fichier Excel créer
Ça y est c’est fait.
Bien sur je vous est présenté ça de manière succincte.
Grâce à la librairie writeexcel il est possible de faire bien des choses, comme intégrer des formule mathématiques, et bien d’autre.
Alors maintenant vous n’avez plus d’excuse quand on vous demandera un générateur de fichier Excel en PHP ^^.
Salut,
J’aurais une petite questions : Le code que tu cite au dessus, on le met ou et comment, je ne comprends pas…
Merci d’avance ;)
Salut,
@Andre73100, tu le pose en vrac où tu veux.
Les deux blocs de code sont indépendants.
Le premier permet de créer un seul onglet :
le second code en crée plusieurs :
Maintenant le code en lui même peut être placé dans une fonction, class, dans un fichier .php
J’espère avoir répondu à la question, sinon n’hésite pas à y apporter des précisions.
Bonjour, est-il possible de créer des graphiques sur les fichiers excel? sachant que les données servant à la production de ces graphiques sont stockées dans une base de données en MySQL!
Merci
zipawi*,
J’avoue que je n’est sais rien, et comme cette classe n’est plus supporté et que sont auteur n’a jamais rédiger de doc, je ne peu vraiment pas te répondre.
Par contre il existe JpGraph (http://jpgraph.net/) qui permet de généré des graphique en image, que tu peux insérer dans ton fichier excel.
Bonjour tous le monde,
j’ai un problème avec cette lib, j’espère pouvoir trouvé une solution ici.
voila j’utilise cette lib pour générer un fichier Excel à partir des données d’une BD, le soucis c’est que mes données sont sous format html c’est en fait le resultat d’une sauvgarde d’un editeur wisywigs, alors quand j’obtiens mon fichier j’ai des données qui sont pas formaté genre j’obtiens dans la colonne A2 par exemple lorem islem tolem
@hight_teck
Du fait du peu de documentation sur cette librairie, je te conseille vivement d’utiliser phpExcel : http://phpexcel.codeplex.com/.
C’est la librairie utilisé par PhpMyAdmin.
Bonjour,
savez vous s’il est possible de créer des graphiques via writeexcel ?
En ce qui me concerne j’utilise PhpExcel pour créer des feuilles excel via php mais je n’ai pas trouvé comment y insérer des graphiques.
Merci de votre aide.
Bonjour tout le monde,
Je voudrais savoir : Est-il possible de modifier un fichier Excel existant avec la librairie WriteExcel ?
Si oui, comment ?
Merci d’avance
@v l.
C’est une chose à essayer. A mon sens, oui il serait possible de faire des modifications, mais je n’ai jamais essayé.
Ok waldo2188.
Tu as une petite idée ou pas ? Car je nage un peu!!lol.
J’ai essayé de faire quelque chose dans ce gout la :
mais j’ai ce message d’erreur :
Fatal error: Call to a member function write() on a non-object in D:portailpicacontenugestion_expexpertise_contestationtest.php on line 22
Si quelqu’un à une idée de comment je peux faire pour résoudre ce problème : je suis preneur!!
Merci d’avance!
Là comme ça, non pas vraiment…
Par contre tu peux certainement déjà essayer de créer un fichier excel temporaire.
Et un fois que tu as fini tes modifications, tu enregistre ton fichier temporaire, supprime le vrais et enfin renomme le temporaire.
Ça fait bidouille comme démarche, mais beaucoup d’applications utilisent cette méthode.
Tu as lu dans mes pensées ?lol.
Car c’est totalement ça que j’essaye de mettre en place.
Pour le moment j’arrive à créer un nouveau fichier, récupérer les données de l’ancien fichier mais pour les récrire au bon endroit, je bloque un peu. Voici mon code :
Cordialement
Nice man ! I’m proud of you :-)
Bonjour,
Pour ceux que ça intéresse je met ici la solution de mon problème :
Merci à waldo2188 pour m’avoir éclairé.
Cordialement.
Grand merci pour ton code ! ;)
Any ideas on how to use the utf8_decode function in this case? Thanks!
merci pour cette illustration, votre code m’a aidé.
Un très grand merci, ça va m’aider à faire mon petit programme.
Bonjour,
Comment puis-je définir une cellule au format texte ?
En fait, je dois stocker une référence de type 000365695 (9 chiffres avec 3 zéros au début), mais si je fais un simple
$worksheet->write('B2', $ref);
les zéros disparaissent car la cellule est formatée par défaut en nombre.
Merci d’avance pour votre aide !
Laurent
Bonjour,
Très bon script, ca fonctionne avec pleins d’erreurs mais a merveille.
J’ai une petite question, comment faire pour créer un nouveau dossier à chaque fois que j’appelle cette page de script.
ex : extraction.xls
extraction1.xls
extraction2.xls
…
Merci d’avance pour votre aide!
Je dirais en comptant le nombre de fichier présent dans le répertoire de stockage?
Bonjour !
Ma question va peut être paraître stupide mais est ce qu’on est obligé d’utiliser PhpExcel pour exécuter ce code , ou bien les classes writeexcel sont accessibles sans ca ?
J’ai tenté de récupérer ce script mais il a beaucoup d’erreurs chez moi :/
Excusez, je viens de lire en haut qu’il fallait les télécharger !
(Promis j’apprendrais a mieux lire la prochaine fois !)
merci quand meme
Oui il faut utiliser toute la librairie, c’est plus simple.
bonjour,
s’il vous plait, je veux générer un fichier Excel avec (PHPExcel), et je veux le remplir par des données d’un tableau.mais j’ai un prbleme de remplissage du fichier , voila mon code
$pdl = array();
for($k=0;$ksetCellValue(‘A’.$IndexLigne, $pdl[‘nom’]);
$feuille->setCellValue(‘B’.$IndexLigne, $pdl[‘etage’]);
$feuille->setCellValue(‘C’.$IndexLigne, $pdl[‘matricule’]);
$feuille->setCellValue(‘D’.$IndexLigne, $pdl[‘commune’]);
$feuille->setCellValue(‘E’.$IndexLigne, $pdl[‘pdl’]);
$feuille->setCellValue(‘F’.$IndexLigne, $pdl[‘gestionnaire’]);
$feuille->setCellValue(‘G’.$IndexLigne, $pdl[‘date_resiliation’]);
$feuille->setCellValue(‘H’.$IndexLigne, $pdl[‘semaine_libre’]);
$feuille->setCellValue(‘I’.$IndexLigne, $pdl[‘situation_compteur’]);
$feuille->setCellValue(‘J’.$IndexColumn,$IndexLigne, $pdl[‘tel’]);
$feuille->setCellValue(‘K’.$IndexColumn,$IndexLigne, $pdl[‘mail’]);
}
}
et voila l’erreur:
Fatal error: Uncaught exception ‘PHPExcel_Exception’ with message ‘Invalid cell coordinate AM FOURTIER BENOIT’ in
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Cell.php:558 Stack trace: #0
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1227): PHPExcel_Cell::coordinateFromString(‘AM FOURTIER BEN…’) #1
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1186): PHPExcel_Worksheet->_createNewCell(‘AM FOURTIER BEN…’) #2
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1095): PHPExcel_Worksheet->getCell(‘AM FOURTIER BEN…’) #3
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Controllers\Rechercher.php(91): PHPExcel_Worksheet->setCellValue(‘AM FOURTIER BEN…’, ‘M FOURTIER BENO…’) #4 {main} thrown in
C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Cell.php on line 558
« merci d’avance »