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 :
"$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.
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 :
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:\portail\pica\contenu\gestion_exp\expertise_contestation\test.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 :
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
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.
Grand merci pour ton code ! ;)