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)
Allez, on est partis

: 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 : PHP1
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 : PHP1
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...
C'est un peu brut comme code, mais on va l'expliquer.
Code : PHP1
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 : PHP1
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...
C'est en fermant tout cela qu'on évite les problèmes de saturation de la RAM. Enfin, voilà le code :
Code : PHP1
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 !
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 : PHP1
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 :
- 1 => Noir
- 2 => Blanc
- 3 => Rouge
- 4 => Vert
- 5 => Bleu
- 6 => Jaune
- 7 => Violet
- 8 => Turquoise
En faisant une boucle de 1 à 56, vous trouverez toutes les couleurs disponibles.
Modifier l'écriture
Code : PHP1
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 :
- Italic => écriture italique
- Underline => écriture soulignée
Pour la police, vous pouvez mettre de type
Times New Roman.
Modifier la taille du texte
Code : PHP1 | $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 ?
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 : PHP1
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.
- 0 => pas de bordure
- 1 => continue
- 2 => pointillés
- 3 => pointillés (différents du 2)
- 4 => alternance de traits courts et longs
- 5 => alternance de traits courts et longs (différente du 4)
- 6 => gros traits avec des coupures
- 9 => encadré double
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 : PHP1 | $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 : PHP1 | $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 : PHP1 | $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 ?
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é) :
- la réouverture de fichiers
- la mise en place un graphique
- comment faire une mise en page et imprimer.
D'ici là, amusez-vous bien.
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 !