Création d’un fichier Excel grâce à PHP
Accueil
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.
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’)
Ç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 ^^.
Andre73100 dit : 6 mai 2010 à 11 h 49 min 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 ;) Répondre
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 ;)
Waldo dit : 20 mai 2010 à 15 h 29 min 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 : "$worksheet =& $workbook->addworksheet('Extraction');" le second code en crée plusieurs : "$worksheet =& $workbook->addworksheet('Extraction'.$y);" 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. Répondre
@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.
zipawi dit : 25 mai 2010 à 11 h 49 min 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 Répondre
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
waldo dit : 9 juin 2010 à 10 h 51 min 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. Répondre
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.
high_tech dit : 15 juillet 2010 à 11 h 05 min 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 Répondre
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
Waldo dit : 20 juillet 2010 à 12 h 26 min @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. Répondre
@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.
phil30 dit : 9 août 2010 à 17 h 29 min 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. Répondre
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.
v l. dit : 27 novembre 2010 à 0 h 45 min 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 Répondre
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
waldo2188 dit : 29 novembre 2010 à 9 h 40 min @v l. C’est une chose à essayer. A mon sens, oui il serait possible de faire des modifications, mais je n’ai jamais essayé. Répondre
@v l. C’est une chose à essayer. A mon sens, oui il serait possible de faire des modifications, mais je n’ai jamais essayé.
v l. dit : 29 novembre 2010 à 12 h 40 min 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 : include('class.writeexcel_workbook.inc.php'); include('excel/class.writeexcel_worksheet.inc.php'); include('excel/functions.writeexcel_utility.inc.php'); $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('CP1251'); $data->read("test.xls"); $workbook = & new writeexcel_workbook("test.xls"); $workbook->sheets(0)->write(0, 19, 'Hello'); 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! Répondre waldo2188 dit : 29 novembre 2010 à 17 h 05 min 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. Répondre
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!
waldo2188 dit : 29 novembre 2010 à 17 h 05 min 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. Répondre
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.
v l. dit : 29 novembre 2010 à 17 h 17 min 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 : include(RelativePathClass.'excel/class.writeexcel_workbook.inc.php'); include(RelativePathClass.'excel/class.writeexcel_worksheet.inc.php'); include(RelativePathClass.'excel/functions.writeexcel_utility.inc.php'); $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('CP1251'); $fichier = "Test.xls"; $data->read($fichier); $workbook = &new writeexcel_workbook("Test2.xls"); $worksheet = $data->sheets[0]; $sheet =& $workbook->addworksheet('test2'); for ($i = 1; $i sheets[0]['numRows']; $i++) { for ($j = 1; $j sheets[0]['numCols']; $j++) { $donnees = $worksheet['cells'][$i][$j]; echo $donnees." - i: ".$i." - j: ".$j.""; } } $workbook->close(); Cordialement Répondre Michael dit : 16 octobre 2012 à 16 h 12 min Nice man ! I’m proud of you :-) Répondre
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
Michael dit : 16 octobre 2012 à 16 h 12 min Nice man ! I’m proud of you :-) Répondre
Nice man ! I’m proud of you :-)
v l. dit : 30 novembre 2010 à 10 h 51 min Bonjour, Pour ceux que ça intéresse je met ici la solution de mon problème : include(RelativePathClass.'excel/class.writeexcel_workbook.inc.php'); include(RelativePathClass.'excel/class.writeexcel_worksheet.inc.php'); include(RelativePathClass.'excel/functions.writeexcel_utility.inc.php'); $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('CP1251'); $fichier = "Test.xls"; $data->read($fichier); // On lit le fichier "Test.xls". $workbook = &new writeexcel_workbook("Test2.xls"); // On créé un second fichier nommé "Test2.xls". $sheet = $data->sheets[0]; // On lit la feuille 1 du fichier "Test.xls". $worksheet =& $workbook->addworksheet('test2'); // On créé un feuille sur le fichier "Test2.xls". // On récupère les données par ligne puis par colonnes. for ($i = 1; $i sheets[0]['numRows']; $i++) { for ($j = 1; $j sheets[0]['numCols']; $j++) { // Si on as une données à la ligne et colonne correspondant // alors on l'insère dans une variable puis on l'écrit sur notre nouveau fichier ("Test2.xls"). if (isset($sheet['cells'][$i][$j])) { $donnees = $sheet['cells'][$i][$j]; $worksheet->write($i-1, $j-1, $donnees,''); } } } // On supprime le fichier d'origine (Test.xls). unlink($fichier); // On renomme le nouveau fichier "Test2.xls" en "Test.xls". rename("Test2.xls", "Test.xls"); Merci à waldo2188 pour m’avoir éclairé. Cordialement. Répondre waldo2188 dit : 30 novembre 2010 à 11 h 38 min Grand merci pour ton code ! ;) Répondre
Pour ceux que ça intéresse je met ici la solution de mon problème :
Merci à waldo2188 pour m’avoir éclairé. Cordialement.
waldo2188 dit : 30 novembre 2010 à 11 h 38 min Grand merci pour ton code ! ;) Répondre
Grand merci pour ton code ! ;)
John dit : 28 février 2012 à 0 h 07 min Any ideas on how to use the utf8_decode function in this case? Thanks! Répondre
Any ideas on how to use the utf8_decode function in this case? Thanks!
billel dit : 11 avril 2012 à 15 h 34 min merci pour cette illustration, votre code m’a aidé. Répondre
merci pour cette illustration, votre code m’a aidé.
Charks dit : 2 juillet 2012 à 21 h 03 min Un très grand merci, ça va m’aider à faire mon petit programme. Répondre
Un très grand merci, ça va m’aider à faire mon petit programme.
Badplayer dit : 24 juillet 2012 à 10 h 49 min 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 Répondre
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
chrismaniia dit : 3 juillet 2013 à 10 h 33 min 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! Répondre waldo2188 dit : 3 juillet 2013 à 13 h 28 min Je dirais en comptant le nombre de fichier présent dans le répertoire de stockage? Répondre
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!
waldo2188 dit : 3 juillet 2013 à 13 h 28 min Je dirais en comptant le nombre de fichier présent dans le répertoire de stockage? Répondre
Je dirais en comptant le nombre de fichier présent dans le répertoire de stockage?
Anouk dit : 5 juillet 2013 à 9 h 58 min 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 :/ Répondre Anouk dit : 5 juillet 2013 à 10 h 02 min 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 Répondre waldo2188 dit : 26 juillet 2013 à 9 h 08 min Oui il faut utiliser toute la librairie, c’est plus simple. Répondre
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 :/
Anouk dit : 5 juillet 2013 à 10 h 02 min 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 Répondre
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
waldo2188 dit : 26 juillet 2013 à 9 h 08 min Oui il faut utiliser toute la librairie, c’est plus simple. Répondre
Oui il faut utiliser toute la librairie, c’est plus simple.
ghizlane dit : 23 avril 2015 à 15 h 21 min 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 » Répondre
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 »
Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *
Commentaire
Nom *
E-mail *
Site web
Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées .
English (United States)
Français
.Net Core
Divers
Doctrine
Eclipse
Faites du Web
GWT
Java
JavaScript – AJAX
Jeux
Linux
Mobiles (Android – iPhone)
Outdoor
Outils
PHP
Symfony2
Système : Windows
Ubuntu
Visual Studio
Un café sans Prince sur la crête
Convertir un volume vhdx Hyper-V pour l’utiliser avec KVM ou Proxmox VE
.Net Core exécuter des commandes Bash/Shell
.Net Core application console comment cacher la saisie d’un mot de passe
How to create Nuget Package for .Net Core
septembre 2019 (1)
février 2018 (1)
juillet 2017 (3)
avril 2017 (1)
mars 2017 (1)
juillet 2016 (1)
septembre 2015 (2)
juin 2015 (3)
novembre 2014 (2)
octobre 2013 (4)
janvier 2013 (2)
octobre 2012 (1)
juin 2012 (1)
mai 2012 (1)
février 2012 (1)
janvier 2012 (2)
novembre 2011 (1)
octobre 2011 (1)
septembre 2011 (1)
août 2011 (2)
juin 2011 (1)
avril 2011 (1)
mars 2011 (1)
janvier 2011 (1)
décembre 2010 (1)
novembre 2010 (3)
octobre 2010 (1)
septembre 2010 (3)
juillet 2010 (1)
août 2009 (1)
mai 2009 (1)
avril 2009 (1)
mars 2009 (2)
février 2009 (1)
janvier 2009 (2)
décembre 2008 (3)
octobre 2008 (4)
août 2008 (3)
juillet 2008 (3)
juin 2008 (5)
mai 2008 (2)
avril 2008 (1)
février 2008 (1)
novembre 2007 (1)
septembre 2007 (2)
juillet 2007 (1)
juin 2007 (7)
mai 2007 (2)
avril 2007 (1)
mars 2007 (10)