Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Lecture du tutoriel

Générer un fichier Excel via php

Auteur : Gregbeacher
Créé : le 14/05/2007 13:42:40
Modifié : le 23/10/2007 14:30:31
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Comment exporter des données de mon site web php en fichiers Excel ?

Eh bien voici un petit tutoriel pour vous montrer comment générer un fichier Excel à partir d'un serveur PHP.
Le tout en utilisant les fonctionnalités de PHP 5.

Votre serveur PHP doit être sous Windows et vous devez posséder Office.

Quel intérêt ?

Transmettre des tableaux sous forme de fichiers, de pouvoir faire des calculs ou des graphes dans Excel en récupérant des informations de votre base de données (par exemple)...

Quel niveau de programmation en php ?

Simplement de connaître les bases du PHP, et éventuellement la programmation objet en PHP, notamment les symboles '->' (j'y reviens plus tard, pour ceux qui ne connaissent pas)!

Bonne lecture à tous ! :)
Sommaire du chapitre :

Remplir les cellules

Allez, on est partis o_O : n'hésitez pas à utiliser les codes, ils sont testés et validés avec Easyphp 2.0 (version bêta).

Pour remplir les cellules, trois étapes sont nécessaires : initialiser le processus, remplir les cellules, et arrêter les processus en cours d'exécution !

Tous ces morceaux de codes doivent se trouver entre des balises PHP. Vous savez ça ressemble à ça : <? et ?>


Initialiser le processus



Tout d'abord, on utilise la fonction define pour n'avoir à changer qu'une seule fois le fichier (si on veut le changer).

Code : PHP
1
2
// On définie une constante FILENAME comprenant le nom du fichier à générer et son emplacement.
define("FILENAME","C:/mon_repertoire/fichier.xls");

Bien : maintenant, on pourra utiliser FILENAME, et non pas C:/Mon_repertoire/fichier.xls.
Mais avant de se lancer dans de grands projets , il faut vérifier si le fichier existe déjà ou non.
Pour cela, on utilise cette petite instruction if !

Code : PHP
1
2
3
4
if(file_exists(FILENAME))  // On vérifie que le fichier existe.   
{
        unlink(FILENAME);  // Suppression du fichier précédemment créé s'il existe.
}


Après ces deux étapes de préparation, pour ne pas avoir de soucis, il n'y a plus qu'à mettre en route la machine... :lol:
C'est un peu brut comme code, mais on va l'expliquer.

Code : PHP
1
2
3
4
5
6
$excel=new COM("Excel.application"); //Instanciation de l'objet COM
$excel->sheetsinnewworkbook=1;//1 seule feuille de calcul dans le document
$excel->Workbooks->Add();//Ajout d'un classeur
$book=$excel->Workbooks(1);//$book contient le classeur actif
$sheet=$book->Worksheets(1);//$sheet contient la feuille active (comme son nom l'indique, feuille en anglais)
$sheet->Name="Nom de votre feuille";//Attribution d'un nom à la feuille

En fait, on utilise un objet (ou une classe) COM (Component Object Model) : c'est un objet public, donc disponible sur votre système Windows. (J'ai testé sur un Windows XP pro). C'est parce qu'on utilise la programmation objet qu'on utilise le petit symbole '->'.
En effet, il nous permet d'aller chercher des fonctions ou des variables à l'intérieur de la classe déclarée (pour nous, c'est $excel). En procédant ainsi, on paramètre notre classeur Excel avec le nombre et le nom des feuilles. Donc, dans votre programme, n'hésitez pas à changer : Nom de votre feuille.

Et voilà, notre classeur Excel est prêt ! On peut donc le remplir... ;) Vous trouverez toutes les infos sur les classes dans les tutoriels de C++ ou de PHP.


Remplir les cellules



Voici comment procéder pour chaque cellule de la feuille active ($sheet).

Code : PHP
1
2
$cell=$sheet->Range('B1'); // On sélectionne la case B1
$cell->value=$variable; // On met la valeur de <gras>$variable</gras> dans la cellule B1, peu importe le type.

$cell correspond à la cellule, libre à vous de le nommer autrement. Dans ce cas, on crée une cellule B1 dans notre feuille courante... A cette cellule, on assigne la valeur $variable.

Une fois de plus, on remarquera l'opérateur '->' qui paramètre notre feuille et notre cellule. :-°
Mais cette fois est la bonne : on sait mettre des éléments dans notre tableau Excel !


Fermeture et sauvegarde



Alors quand on ouvre une porte, on doit la fermer (logique, non ? ). Eh bien ici, c'est un peu pareil : on ouvre le fichier Excel (ainsi que la feuille et le classeur), donc, on doit tout fermer.
On pense aussi à enregistrer toutes nos modifications... :p
C'est en fermant tout cela qu'on évite les problèmes de saturation de la RAM. Enfin, voilà le code :

Code : PHP
1
2
3
4
5
6
$book->saveas(FILENAME);//Sauvegarde du fichier
unset($sheet);//Libération de $sheet
unset($book);//Libération de $book
$excel->Workbooks->Close();//Fermeture du classeur
$excel->Quit();//On quitte Excel
unset($excel);//Libération de l'instance $excel


Ces dernières lignes sont vraiment importantes, elles permettent de sauvegarder les modifications effectuées dans la feuille. Mais aussi de mettre fin au processus ouvert par la partie d'initialisation.

Si vous avez des problèmes avec votre algorithme (s'il y a un ou plusieurs messages d'erreurs), alors le processus EXCEL.EXE ne sera pas fermé. Il faut alors le fermer manuellement dans la barre des tâches.
Si vous ne le faites pas, votre PC va ralentir...


Voilà, nous y sommes déjà, nous savons remplir un tableau Excel !
Rassurez-vous : c'est toujours le début qui est difficile, ça ira mieux après ça.

Un petit exemple pour bien finir



Si vous voulez vous entraîner, voici un code qui remplira vos cellules...

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
 
define("FILENAME","C:/tests.xls");
 
if(file_exists(FILENAME))
{
        unlink(FILENAME);
}
 
 
        $excel=new COM("Excel.application");//Instanciation de l'objet COM
        $excel->sheetsinnewworkbook=1;//Une seule feuille dans le document
        $excel->Workbooks->Add();//Ajout d'un classeur
        $book=$excel->Workbooks(1);//$book contient le classeur actif
        $sheet=$book->Worksheets(1);//$sheet contient la feuille active
        $sheet->Name="Graphique";//Attribution d'un nom à la feuille
 
        $cell=$sheet->Range('A1'); 
        $cell->value='Personne'; //Titre de mes colonnes
        $cell=$sheet->Range('B1');
        $cell->value='Nombre Questions'; //Nombre de questions qu'on a posées
        
 
for ($i=2;$i<7;$i++)
{
        $cell=$sheet->Range('A'.$i);
        $cell->value='Zéro'.($i-1); // Zéros2 jusquà Zéros6
        $cell=$sheet->Range('B'.$i);
        $cell->value=2*$i; // de 4 à 12 questions
}
        
        $book->saveas(FILENAME);//Enregistrement du document
        unset($sheet);//Libération de $sheet
        unset($book);//Libération de $book
        $excel->Workbooks->Close();//Fermeture du classeur
        $excel->Quit();//On quitte Excel
        unset($excel);//Libération de l'objet $excel
?>


Vous devrez obtenir un tableau avec deux colonnes et 6 lignes !

Travailler les cellules

Maintenant que vous savez remplir aisément vos feuilles Excel, on va les décorer un peu. C'est-à-dire les encadrer, mettre le texte en gras, le centrer, et même fusionner les cellules.

Modifier le texte



La couleur



On travaille à chaque fois sur une cellule. Je vous conseille donc de mettre ce code directement après avoir rentré la valeur de la cellule.

Code : PHP
1
2
$cell->Font->ColorIndex=$valeur; //couleur du texte
$cell->Interior->ColorIndex=$valeur; //Couleur de fond de cellule

$nombre est une valeur numérique de 1 à 56. Voici les plus courantes :

En faisant une boucle de 1 à 56, vous trouverez toutes les couleurs disponibles.


Modifier l'écriture



Code : PHP
1
2
$cell->Font->bold = true; //Met en gras le texte (bold)
$cell->font->Name="Arial"; //utilise la police Arial

Sur le même principe que le gras, on a aussi :
Pour la police, vous pouvez mettre de type Times New Roman.

Modifier la taille du texte



Code : PHP
1
$cell->Font->Size = 15;  // Votre texte sera de taille 15

La taille de base est 10, et la hauteur des colonnes s'adaptent automatiquement (sauf si on l'impose, mais on en parle juste après) à la taille du texte ; sympa, non ? :euh:
Vous pouvez aller jusqu'à la taille de 72...


Travail sur les cellules



Créer un encadré



Il faut ici définir trois paramètres pour encadrer nos cellules : la taille, le style et la couleur. Voilà comment procéder :

Code : PHP
1
2
3
$cell->Borders->LineStyle=$STYLE; // On choisit le type de bordure (traits pleins, pointillés...);
$cell->Borders->Weight=$TAILLE; // On choisit la taille de la bordure
$cell->borders->ColorIndex=$COLOR; // On choisit la couleur de la bordure


Les trois variables $STYLE, $TAILLE et $COLOR sont des variables numériques.
La valeur de $TAILLE va de 1 à 4, et 2.5 me semble être la taille standard.
$COLOR prend les même valeur que pour le texte (de 1 à 56).
$STYLE correspond au type d'encadrement.

Pour les autres, faites également une boucle... (Je n'ai pas trouvé de différences avec les autres !)
Modifier la taille peut modifier le style. :( Je vous conseille d'utiliser la taille uniquement avec l'encadré continu.


Modifier la largeur et la longueur des cellules



Sans utiliser de clic de souris, voilà la syntaxe du code : ^^

Code : PHP
1
$cell->EntireColumn->AutoFit; // La largeur de la colonne s'adapte en fonction de l'intérieur de la cellule

Vous pouvez remplacer le paramètre AutoFit par une valeur numérique à deux chiffres après la virgule en utilisant : ColumnWidth=30. Ce qui donne :
Code : PHP
1
$cell->EntireColumn->ColumnWidth=30; // On met une largeur de colone précise

Cette valeur est du même ordre que celle qu'on rentre dans Excel.
Pour modifier les lignes, utilisez RowHeight à la place de EntireColum. Et procéder comme pour les colonnes !

Fusionner des cellules


Dans beaucoup de forums ou de sites, il est déconseillé d'utiliser la fusion des cellules.
Je n'arrive pas encore à encadrer des cellules fusionnées, donc prudence...

Code : PHP
1
$cell=$sheet->Range('A1 : A5')->Merge; // On fusionne les cellules A1, A2, A3, A4, A5

Comme vous pouvez le constater, on met dans la fonction Range() la cellule de départ et la cellule d'arrivée. Pour fusionner une ligne, on utilise donc Range('A4: Z4').
De même, en écrivant Range('A1:B2'), on fusionne en un carré de 2 x 2. C'est presque magique, non ? :magicien:


Un petit exemple pour la route...



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
define("FILENAME","C:/tests.xls");
 
        if(file_exists(FILENAME))
        {
                unlink(FILENAME);
        }
        
        /************************************
        Ouverture des fichiers
        ************************************/
        $excel=new COM("Excel.application");//Instanciation de l'objet COM
        $excel->sheetsinnewworkbook=1;//Une seule feuille dans le document
        $excel->Workbooks->Add();//Ajout d'un classeur
        $book=$excel->Workbooks(1);//$book contient le classeur actif
        $sheet=$book->Worksheets(1);//$sheet contient la feuille active
        $sheet->Name="Graphique";//Attribution d'un nom à la feuille
 
        
        
        /************************************
        Ecriture dans les cellules
        ************************************/
        $cell=$sheet->Range('A1'); 
        $cell->value='Personne'; //Titre de mes colonnes
        $cell->Font->ColorIndex=2; //couleur du texte
        $cell->Interior->ColorIndex=7; //Couleur de fond de cellule 
        $cell->Font->bold = true; // On met en gras
        $cell->Font->Italic= true; // On met en italique
        $cell->Font->Size = 15; // Taille 15
        $cell->Borders->LineStyle=9; //  Encadré double
        $cell->EntireColumn->ColumnWidth=30; // On met une largeur de colonne précise
        $cell=$sheet->Range('B1');
        $cell->value='Nombre de questions'; //Nombre de questions qu'on m'a posé
        $cell->Font->ColorIndex=2; //couleur du texte
        $cell->Interior->ColorIndex=7; //Couleur de fond de cellule
        $cell->Font->bold = true; // On met en gras
        $cell->Font->Italic= true; // On met en italique
        $cell->Font->Size = 15; // Taille 15
        $cell->Borders->LineStyle=9; //  Encadré double
        $cell->EntireColumn->ColumnWidth=30; // On met une largeur de colonne précise
        
for ($i=2;$i<7;$i++)
{
        $cell=$sheet->Range('A'.$i);
        $cell->value='Zéro'.($i-1); // Zéros2 jusquà Zéros6
        $cell->Font->Size = 12; // Taille 12
        $cell->Borders->LineStyle=9; //  Encadré double
        $cell=$sheet->Range('B'.$i);
        $cell->value=2*$i; // de 4 à 12 questions
        $cell->Font->Size = 12; // Taille 12
        $cell->Borders->LineStyle=9; //  Encadré double
}
 
        /************************************
        Fermeture totale
        ************************************/
        $book->saveas(FILENAME);//Enregistrement du document
        unset($sheet);//Libération de $sheet
        unset($book);//Libération de $book
        $excel->Workbooks->Close();//Fermeture du classeur
        $excel->Quit();//On quitte Excel
        unset($excel);//Libération de l'objet $excel


Et toutes les autres fonctionnalités d'Excel ???

Je dois vous faire une confidence... Comment j'ai trouvé toutes ces sources ?!?
Simplement sur des forums ou des sites traitant du Visual Basic (VB). En effet, Excel et VB sont très liés : vous pouvez faire du VB sous Excel (Alt + F11). Je vous rassure, je n'ai jamais utilisé ce langage ; cependant, leur opérateur de classe (chez nous, le '->') est simplement un point (.) ! >_<
Pour le moment, si vous cherchez d'autres fonctionnalités, recherchez avec Google de cette facon : "Excel.application + fonctionalités".

Je vous apprendrai, quand je maitriserai davantage le sujet (et quand j'aurai tout testé) :

D'ici là, amusez-vous bien. :soleil:

Et voilà : votre initiation à l'exportation est terminée...
Pas si compliqué que ça, si ?

Je me ferais un plaisir de vous aider si vous avez de petits soucis à mettre tout cela en place.

Amusez-vous bien !
Auteur : Gregbeacher
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 382 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.1572s (0.1458s)