Php Excel

Embed Size (px)

Citation preview

Introduction PHPExcel

par Ernaelsten Grard (MaitrePylos)Date de publication : 05/02/2009 Dernire mise jour : 14/07/2010

Nous allons voir dans cet article une bibliothque oriente objet (PHP 5), la gnration de feuilles de calcul sous diffrents formats d'exportation et/ou d'enregistrement. Cette bibliothque tant assez consquente, et mon apprentissage de celle-ci ne faisant que de commencer, nous aurons un article construit au fil du temps.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Avant-propos................................................................................................................................................................ 4 PHPExcel................................................................................................................................................................ 4 1.1 - Tlchargement........................................................................................................................................4 1.2 - Spcificits................................................................................................................................................4 1.3 - Test sur ..................................................................................................................................................4 Premier fichier.............................................................................................................................................................. 6 2.1 - MaitrePylos en A1......................................................................................................................................... 6 2.2 - Dans un autre format.................................................................................................................................... 7 2.2.1 - Excel5.................................................................................................................................................... 7 2.2.2 - PDF........................................................................................................................................................7 2.2.3 - HTML..................................................................................................................................................... 8 2.2.4 - CSV....................................................................................................................................................... 8 2.2.5 - Excel 2007 - compatible 2003.............................................................................................................. 8 2.3 - Afficher le tableur...........................................................................................................................................8 2.3.1 - Excel 2007 sur le navigateur................................................................................................................ 8 Excel 5......................................................................................................................................................... 9 PDF.............................................................................................................................................................. 9 CSV.............................................................................................................................................................. 9 HTML............................................................................................................................................................9 Pour la suite...crons nos outils................................................................................................................................ 10 3.1 - Etendre PHPExcel....................................................................................................................................... 10 3.2 - Petit exemple............................................................................................................................................... 12 3.3 - Les formules................................................................................................................................................ 12 3.4 - Multi feuilles (sheets)...................................................................................................................................12 Mise en forme............................................................................................................................................................ 14 4.1 - La classe de style "Font".............................................................................................................................14 4.1.1 - MaitrePylos en vert............................................................................................................................. 14 4.1.2 - applyFromArray................................................................................................................................... 15 4.2 - PHPExcel_Style........................................................................................................................................... 16 4.2.1 - applyFromArray de PHPExcel_Style...................................................................................................16 4.2.1.1 - Format de cellule..............................................................................................................................17 4.2.1.2 - Alignement de la cellule................................................................................................................... 18 4.2.1.3 - Les autres styles de PHPExcel_Style_Alignment............................................................................ 18 4.3 - Les bordures................................................................................................................................................19 4.3.1 - Toutes les bordures.............................................................................................................................20 4.4 - Le fond de la cellule....................................................................................................................................20 4.5 - Les images.................................................................................................................................................. 21 Style par dfaut..........................................................................................................................................................23 5.1 - Dupliquer le style.........................................................................................................................................23 Les formats de cellules..............................................................................................................................................25 6.1 - PHPExcel_Cell_DataType........................................................................................................................... 25 Vite dit........................................................................................................................................................................ 26 7.1 - Fusion de cellules........................................................................................................................................26 7.2 - Largeur de colonne..................................................................................................................................... 26 7.3 - Hauteur de ligne.......................................................................................................................................... 26 7.4 - Taille de la page.......................................................................................................................................... 26 7.5 - Orientation de la page.................................................................................................................................27 7.6 - Freeze Pane................................................................................................................................................ 28 Ca existe aussi.......................................................................................................................................................... 29 Travailler avec l'existant.............................................................................................................................................30 8 - Lire un fichier Excel........................................................................................................................................30 8.1 - Ecrire dans un fichier existant !...................................................................................................................31 8.2 - Connatre son fichier....................................................................................................................................32 8.2.1 - Le nom des sheets............................................................................................................................. 32 8.2.2 - L'index des sheets.............................................................................................................................. 32 8.3 - Fusionner plusieurs fichiers Excel...............................................................................................................32 8.3.1 - Utiliser plusieurs fois le mme sheet.................................................................................................. 33 Extraire des images................................................................................................................................................... 34-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Conclusion..................................................................................................................................................................35 Merci..................................................................................................................................................................... 35 Liens......................................................................................................................................................................35

-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Avant-proposLors de la rdaction de l'article sur Spreadsheet_Excel_Writer en PHP , Yogui , m'avait demand si j'allais faire un parallle avec la classe PHPExcel . Ne connaissant pas cette classe, je n'avais pas rpondu positivement cette demande. Et je ne vais toujours pas le faire ici, parce que nous ne sommes pas faire un parallle, mais bien dcouvrir un outil puissant qui va nous rendre de grands services dans la gnration de nos tableurs.

PHPExcelPHPExcel va nous proposer la gnration des formats suivants : Excel 2007 Excel 2007 - compatible Excel 2003 Excel 5 - via la librairie Spreadsheet_Excel_Writer PDF - via la librairie FPDF CSV HTML

En plus, PHPExcel va affiner nos tableurs avec des lments tel que : Formater les cellules. Ajouter des formules Ajouter des images Protger les donnes, les cellules ....

1.1 - TlchargementPour commencer, nous allons tlcharger la librairie PHPExcel , ce fichier comporte la librairie dans le rpertoire ./ Classes, nous avons galement l'API dans le rpertoire ./Documentation , ainsi qu'un rpertoire ./Tests avec un certain nombre d'exemples. Il faut extraire le rpertoire ./Classes et le dposer dans le rpertoire de votre Web serveur.

1.2 - SpcificitsPHPExcel ne fonctionne qu'avec PHP 5 et rclame des extensions spcifiques pour fonctionner correctement. Ces extensions sont : Zip GD XML

Vous pouvez vrifier que vous avez ces extensions avec la fonction.phpinfo();

1.3 - Test sur ....J'ai test tous les exemples sur diffrents OS et tableurs.

-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

O0o 2.4 / Debian O0o 3.0 / Debian Excel 2007 /VirtualBox/Windows XP Excel 2007 /Windows Serveur 2003

On peut retrouver quelques diffrences entre les versions de tableurs, notamment au niveau des couleurs de remplissage des cellules, ou encore dans les bordures, Ooo 2.4 ne reconnat pas les formats type Dash Dot (BORDER_DASHDOT). Sur le serveur 2003 en production avec PHP 5.2.6 , j'ai t confront un souci de dll ( "php_zip.dll"), cela tronque le fichier. Sur le forum de PHPExcel il est conseill de tlcharger une autre version de php_zip.dll, notamment sur http:// snaps.php.net

-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Premier fichierNous allons voir comment crer notre premier fichier au format Excel 2007

2.1 - MaitrePylos en A1include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; $workbook = new PHPExcel; $sheet = $workbook->getActiveSheet(); $sheet->setCellValue('A1','MaitrePylos'); $writer = new PHPExcel_Writer_Excel2007($workbook); $records = './fichier.xlsx'; $writer->save($records);

Ce code enregistre un fichier nomm 'fichier.xlsx' sur le disque dur du serveur, il n'apparatra pas sur le navigateur. Il faut d'abord inclure les fichiers ncessaires la gnration du tableurinclude 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php';

Ensuite nous instancions notre objet PHPExcel$workbook = new PHPExcel;

Nous activons la feuille sur laquelle nous allons travailler (la feuille par dfaut), grce la mthode ->getActiveSheet().$sheet = $workbook->getActiveSheet();

Lors de l'instanciation de notre objet PHPExcel, le constructeur a galement instanci diverses classes, notamment la classe PHPExcel_Worksheet et la mthode getActiveSheet nous donnes donc la main sur cet objet. Nous remplissons notre premire cellule avec la mthode ->setCellValue()$sheet->setCellValue('A1','MaitrePylos');

Vous remarquerez que, pour dsigner la cellule, la mthode ->setCellValue() accepte son nom de tableau double entre. Il existe une autre mthode pour dsigner la cellule que l'on veut modifier.

-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

$sheet->setCellValueByColumnAndRow(1, 4, 'MaitrePylos');

Cette mthode prend trois paramtres : La ligne La colonne La valeur Notez que dans le cas de cette mthode, la ligne commence partir de zro(0), et la colonne commence un (1). Enfin pour crer le fichier, nous devons instancier un objet writer, spcifique au type de tableau que nous voulons gnrer.$writer = new PHPExcel_Writer_Excel2007($workbook);

Nous donnons un nom notre fichier, et l'enregistrons

$records = './fichier.xlsx'; $writer->save($records);

Vous prterez une attention toute particulire l'extension du fichier, en l'occurrence ici "xlsx".

2.2 - Dans un autre formatPour enregistrer le fichier dans un autre format, il faut juste 3 modifications au script prcdent

2.2.1 - Excel5include 'PHPExcel/Writer/Excel5.php'; ... $writer = new PHPExcel_Writer_Excel5(); ... $records = './fichier.xls';

2.2.2 - PDFinclude 'PHPExcel/Writer/PDF.php'; ... $writer = new PHPExcel_Writer_PDF(); $writer->setSheetIndex(0);//Une seule feuille possible ... $records = './fichier.pdf';

Dans la gnration des fichiers de types PDF, HTML, il n'est possible que de travailler sur une seule feuille, et nous devons lui indiquer laquelle, via la mthode ->setSheetIndex()-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

2.2.3 - HTMLinclude 'PHPExcel_Writer/HTML.php'; ... $writer = new PHPExcel_Writer_HTML(); $writer->setSheetIndex(0);//Une seule feuille possible ... $records = './fichier.html';

2.2.4 - CSVinclude 'PHPExcel/Writer/CSV.php'; ... $writer = new PHPExcel_Writer_CSV(); $writer->setDelimiter(",");//l'oprateur de sparation est la virgule $writer->setSheetIndex(0);//Une seule feuille possible ... $records = './fichier.csv';

Dans le cadre d'un fichier de type CSV, il faut en plus noter le sparateur, ce qui est le rle de la mthode ->setDelimiter().

2.2.5 - Excel 2007 - compatible 2003Pour assurer une compatibilit avec Excel 2003, il suffit de mettre la mthode ->setOffice2003Compatibility(), true.$writer = new PHPExcel_Writer_Excel2007($workbook); $writer->setOffice2003Compatibility(true); $records = './fichier.xlsx'; $writer->save($records);

2.3 - Afficher le tableurIl est galement possible de gnrer un tableur et de l'afficher plutt que de l'enregistrer. Pour se faire, il faut passer les enttes la sortie standard.

2.3.1 - Excel 2007 sur le navigateurinclude 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; $workbook = new PHPExcel; $sheet = $workbook->getActiveSheet(); $sheet->setCellValue('A1','MaitrePylos'); $writer = new PHPExcel_Writer_Excel2007($workbook); header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

-8Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) header('Content-Disposition:inline;filename=Fichier.xlsx '); $writer->save('php://output');

Ici, le fichier va demander tre ouvert via votre logiciel de tableur. Les autres possibilits sont :

Excel 5header('Content-type: application/vnd.ms-excel');

PDFheader('Content-type: application/pdf');

CSVheader('Content-type: text/csv');

HTMLheader('Content-type: text/html');

-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Pour la suite...crons nos outilsPour la suite de cet article, je me baserai sur l'affichage du tableur. Afin de ne pas rcrire l'ensemble des codes, je vais tendre la classe PHPExcel, et commencer crer des outils personnaliss pour la gnration des fichiers.

3.1 - Etendre PHPExcelSoit la nouvelle classe suivante :/** * Classe tendue de PHPExcel. * Cette classe permet la gnration dynamique * de fichier tableur suivant diffrent format. * * @copyright 2008 MaitrePylos Technologies (Formatux.be) * @author Ernaelsten Gerard * @license GPL * @version Release: 0.1 */ require 'PHPExcel.php'; class MaitrePylosExcel extends PHPExcel { public function __construct() { parent::__construct(); } /** * Mthode englobant une fonction switch pour le choix du format de tableur. * @method affiche * @param String $format * @param String $nomFichier * @example $workbook->affiche('Excel2007','MonFichier'); */ public function affiche($format = 'Excel5',$nomFichier = 'Tableur'){ switch($format){ case 'Excel2007' : include 'PHPExcel/Writer/Excel2007.php'; $writer = new PHPExcel_Writer_Excel2007($this); $ext = 'xlsx'; $header = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; //supprime le pr-calcul $writer->setPreCalculateFormulas(false); break; case 'Excel2003' : include 'PHPExcel/Writer/Excel2007.php'; $writer = new PHPExcel_Writer_Excel2007($this); $writer->setOffice2003Compatibility(true); $ext = 'xlsx'; $header = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; //supprime le pr-calcul $writer->setPreCalculateFormulas(false); break; case 'Excel5' : include 'PHPExcel/Writer/Excel5.php'; $writer = new PHPExcel_Writer_Excel5($this); $ext = 'xls'; $header = 'application/vnd.ms-excel'; break; case 'CSV' : include 'PHPExcel/Writer/CSV.php'; $writer = new PHPExcel_Writer_CSV($this); $writer->setDelimiter(",");//l'oprateur de sparation est la virgule - 10 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'csv'; $header = 'text/csv'; break; case 'PDF' : include 'PHPExcel/Writer/PDF.php'; $writer = new PHPExcel_Writer_PDF($this); $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'pdf'; $header = 'application/pdf'; break; case 'HTML' : include 'PHPExcel/Writer/HTML.php'; $writer = new PHPExcel_Writer_HTML($this); $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'html'; $header = 'text/html'; break; } header('Content-type:'.$header); header('Content-Disposition:inline;filename='.$nomFichier.'.'.$ext); $writer->save('php://output');

}

/** * Mthode englobant une fonction switch pour le choix du format de tableur. * @method enregistre * @param String $format * @param String $nomFichier * @example $workbook->enregistre('Excel2007','MonFichier'); */ public function enregistre($format = 'Excel5',$nomFichier = 'Tableur'){ switch($format){ case 'Excel2007' : include 'PHPExcel/Writer/Excel2007.php'; $writer = new PHPExcel_Writer_Excel2007($this); $ext = 'xlsx'; //supprime le pr-calcul $writer->setPreCalculateFormulas(false); break; case 'Excel2003' : include 'PHPExcel/Writer/Excel2007.php'; $writer = new PHPExcel_Writer_Excel2007($this); $writer->setOffice2003Compatibility(true); $ext = 'xlsx'; //supprime le pr-calcul $writer->setPreCalculateFormulas(false); break; case 'Excel5' : include 'PHPExcel/Writer/Excel5.php'; $writer = new PHPExcel_Writer_Excel5($this); $ext = 'xls'; break; case 'CSV' : include 'PHPExcel/Writer/CSV.php'; $writer = new PHPExcel_Writer_CSV($this); $writer->setDelimiter(",");//l'oprateur de sparation est la virgule $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'csv'; break; case 'PDF' : include 'PHPExcel/Writer/PDF.php'; $writer = new PHPExcel_Writer_PDF($this); $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'pdf'; break; case 'HTML' : include 'PHPExcel/Writer/HTML.php'; - 11 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) $writer = new PHPExcel_Writer_HTML($this); $writer->setSheetIndex(0);//Une seule feuille possible $ext = 'html'; break; } $writer->save($nomFichier.'.'.$ext); } }

3.2 - Petit exempleNous utiliserons cette classe de cette faon :

include 'MaitrePylosExcel.php'; $workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $sheet->setCellValue('A1','MaitrePylos'); $workbook->affiche('Excel2007','MonPremierFichier');

Vous prterez attention au fait que dans l'article j'utilise la variable $sheet, qui sera le remplacement de $workbook->getActiveSheet(), dans les exemples fournis par l'application, ils utiliseront plus l'criture $workbook->getActiveSheet()->getFont(), or je privilgie $sheet->getFont(), gardez bien cela l'esprit.

3.3 - Les formulesPour introduire des formules dans le fichier , il suffit de passer en argument la dite formule.

include 'MaitrePylosExcel.php'; $workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $sheet->setCellValue('A1',4); $sheet->setCellValue('A2',5); $sheet->setCellValue('A3','=SUM(A1:A2)'); $workbook->affiche('Excel2007','MaPremiereFormule');

3.4 - Multi feuilles (sheets)Ici nous allons voir comment faire pour avoir plusieurs feuilles dans le tableur. Le fait d'avoir plusieurs feuilles ne vous permettra pas de gnrer le tableur dans les formats suivants :

- 12 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

PDF CSV HTML

Ces format ne permettant que la gnration d'une seule feuille. Lors de la cration de votre document, une feuille est automatiquement cre, et nous en prenons possession avec la mthode getActiveSheet().

include 'MaitrePylosExcel.php'; $workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $workbook->affiche('Excel2007','MaPremiereFormule');

Pour donner un nom cette feuille, on utilise la mthode setTitle()$sheet->setTitle('feuille 1');

Pour crer de nouvelles feuilles, nous utiliserons la mthode createSheet() de la classe PHPExcel, qui elle mme instancie la classe PHPExcel_WoorkSheet./********************************************************* * * Cration de la deuxime feuille *******************************************************/ //cration de la nouvelle feuille $sheet2 = $workbook->createSheet(); //nom de la feuille $sheet2->setTitle('feuille 2');

/********************************************************* * * Cration de la troisme feuille *******************************************************/ $sheet3 = $workbook->createSheet(); $sheet3->setTitle('feuille 3'); /********************************************************* * * Cration de la quatrime feuille *******************************************************/ $sheet4 = $workbook->createSheet(); $sheet4->setTitle('feuille 4');

- 13 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Mise en formePHPExcel nous offre 8 classes pour mettre en forme nos cellules : PHPExcel_Style PHPExcel_Style_Fill PHPExcel_Style_Font PHPExcel_Style_Border PHPExcel_Style_Borders PHPExcel_Style_Alignment PHPExcel_Style_NumberFormat PHPExcel_Style_Protection

Nous n'allons pas voir l'ensemble des classes, mais nous verrons les 2-3 approches qu'il est possible de faire, ensuite je vous renvoie vers la documentation officielle, pour explorer plus en avant l'ensemble des classes.

4.1 - La classe de style "Font"Dans la classe PHPExcel_Style_Font, les mthodes importantes sont les suivantes : setName() setBold() setItalic() setUnderline() setStriketrough() getColor() setSize() setSuperScript() setSubScript()

La plupart de celles-ci sont assez explicites.

4.1.1 - MaitrePylos en vert...Nous allons mettre en forme une cellule en fonction des critres suivants : En gras De taille 12 De police 'Arial' De couleur Verte

Pour ce faire il suffit d'crire le code suivant :$workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $styleA1 = $sheet->getStyle('A1'); $styleFont = $styleA1->getFont(); $styleFont->setBold(true); $styleFont->setSize(12); $styleFont->setName('Arial'); $styleFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN); $sheet->setCellValue('A1','MaitrePylos'); $workbook->affiche('Excel2007','MonPremierFichier'); - 14 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Nous allons passer en revue ce code bien comprendre ce qu'il se passe.$styleA1 = $sheet->getStyle('A1');

getStyle() est une mthode de la classe PHPExcel_Worksheet qui instancie la classe PHPExcel_Style (que nous verrons plus tard), on lui passe en paramtre la cellule vise.$styleFont = $styleA1->getFont();

getFont() est donc une mthode de la classe PHPExcel_Style, qui instancie la classe PHPExcel_Style_Font. A partir de cette instanciation nous pouvons utiliser les mthodes de PHPExcel_Style_Font.$styleFont->setBold(true);//passage true de faon activer la graisse. $styleFont->setSize(12);//taille de la police $styleFont->setName('Arial');//nom de la police $styleFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN);

Pour la couleur, c'est un peu plus compliqu, il faut repasser par une nouvelle classe PHPExcel_Style_Color Celle-ci dfini un certain nombre de constantes que voici : Constante Valeur

COLOR_BLACK COLOR_WHITE COLOR_RED COLOR_DARKRED COLOR_BLUE COLOR_DARKBLUE COLOR_GREEN COLOR_DARKGREEN COLOR_YELLOW COLOR_DARKYELLOW

'FF000000' 'FFFFFFFF' 'FFFF0000' 'FF800000' 'FF0000FF' 'FF000080' 'FF00FF00' 'FF008000' 'FFFFFF00' 'FF808000'

Ainsi que deux mthodes : setARGB(), que vous connaissez dj (voir exemple ci-dessus) et qui prend en paramtre une des constantes. setRGB(), qui, elle prend en paramtre le code HTML de la couleur :$styleFont->getColor()->setRGB('FF00FF00');

4.1.2 - applyFromArrayIl y a moyen d'allger ce code. En effet, la classe PHPExcel_Style_Font propose une mthode applyFromArray() qui prend un tableau en paramtre afin de ne pas utiliser les setter et getter de la classe et de rendre le code plus lisible. Les mots cls de ce tableau sont : name bold italic

- 15 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

underline strike color size superScript subScript

Les noms sont fort proches des mthodes, et pour cause, elles utiliseront celles-ci, pour dfinir notre style de cellule. Notre nouveau code sera donc :$styleA1 = $sheet->getStyle('A1'); $styleFont = $styleA1->getFont() ->applyFromArray(array( 'bold'=>true, 'size'=>12, 'name'=>Arial, 'color'=>array( 'rgb'=>'FF00FF00')));

Ce simple tableau remplace tous les appels aux mthodes de PHPExcel_Style_Font, puisqu'il le fait lui-mme. Vous remarquerez que color demande un nouveau tableau, parce que la classe PHPExcel_Style_Color galement une mthode applyFromArray, avec soit rgb ou argb.

4.2 - PHPExcel_StylePHPExcel_Style est la classe qui nous permet de travailler avec les autres classes de 'style'. Quand nous appelons la mthode getStyle(), en fait nous instancions la classe PHPExcel_Style, celle-ci dispose de mthodes nous permettant d'instancier les autres classes de styles, les mthodes sont : getFill() getFont() getBorders() getAlignment() getNumberFormat() getProtection()

Chaque mthode instancie la classe par rapport son nom : - getFont() instancie PHPExcel_Style_Font. - getAlignment() instancie PHPExcel_Style_Alignment. ...

4.2.1 - applyFromArray de PHPExcel_StylePHPExcel_Style dispose galement d'une mthode applyFromArray contenant le tableau suivant : fill font borders alignment numberformat protection

Notre code deviendra ds lors :

- 16 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

$styleA1 = $sheet->getStyle('A1'); $styleA1->applyFromArray(array( 'font'=>array( 'bold'=>true, 'size'=>12, 'name'=>Arial, 'color'=>array( 'rgb'=>'FF00FF00')) ));

4.2.1.1 - Format de celluleOn veut parfois obtenir un format d'affichage spcifique pour une cellule, comme par exemple les dates, on pourrait vouloir le format " yy-mm-dd" ou encore " dd/mm/yyyy". Pour cela la classe PHPExcel_Style_NumberFormat, vient notre secours et ce de la mme faon que vu au chapitre 4, traitant de la mise en forme.$sheet->getStyle('B43')->getNumberFormat()->applyFromArray( array( 'code' => PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY ) ); $sheet->setCellValue('B43', '=TODAY()');

De nouveau de faon trs simple, la librairie PHPExcel, nous permet de dfinir un format prcis, grce un certain nombre de constantes prdfinies. Constante Valeur FORMAT_GENERAL 'General' FORMAT_NUMBER '0' FORMAT_NUMBER_00 '0.00' FORMAT_NUMBER_COMMA_SEPARATED1'#,##0.00' FORMAT_NUMBER_COMMA_SEPARATED2'#,##0.00_-' FORMAT_PERCENTAGE '0%' FORMAT_PERCENTAGE_00 '0.00%' FORMAT_DATE_YYYYMMDD 'yy-mm-dd' FORMAT_DATE_DDMMYYYY 'dd/mm/yy' FORMAT_DATE_DMYSLASH 'd/m/y' FORMAT_DATE_DMYMINUS 'd-m-y' FORMAT_DATE_DMMINUS 'd-m' FORMAT_DATE_MYMINUS 'm-y' FORMAT_DATE_DATETIME 'd/m/y h:mm' FORMAT_DATE_TIME1 'h:mm AM/PM' FORMAT_DATE_TIME2 'h:mm:ss AM/PM' FORMAT_DATE_TIME3 'h:mm' FORMAT_DATE_TIME4 'h:mm:ss' FORMAT_DATE_TIME5 'mm:ss' FORMAT_DATE_TIME6 'h:mm:ss' FORMAT_DATE_TIME7 'i:s.S' FORMAT_DATE_TIME8 'h:mm:ss;@' FORMAT_DATE_YYYYMMDDSLASH 'yy/mm/dd;@' FORMAT_CURRENCY_USD_SIMPLE '"$"#,##0.00_-' FORMAT_CURRENCY_USD '$#,##0_-' FORMAT_CURRENCY_EUR_SIMPLE '[$EUR ]#,##0.00_-'- 17 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Il peut paratre fastidieux de retenir toutes ces constantes, ou de devoir aller dans l'API pour retrouver le format qui nous convient. Dans ce cas, il suffit de passer un string en paramtre plutt qu'une constante.$sheet->getStyle('B43')->getNumberFormat()->applyFromArray( array( 'code' => 'dd/mm/yyyy' ) );

4.2.1.2 - Alignement de la cellulePour aligner nos cellules nous avons deux mthodes de la classe PHPExcel_Style_Alignment : setHorizontal() - prenant en paramtre : Constantes HORIZONTAL_GENERAL HORIZONTAL_LEFT HORIZONTAL_RIGHT HORIZONTAL_CENTER HORIZONTAL_JUSTIFY setVertical() - prenant en paramtre : Constante VERTICAL_BOTTOM VERTICAL_TOP VERTICAL_CENTER VERTICAL_JUSTIFY Voici un exemple d'utilisation$sheet->duplicateStyleArray(array( 'alignment'=>array( 'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER), 'A21:F37');

'general' 'left' 'right' 'center' 'justify'

Valeur

'bottom' 'top' 'center' 'justify'

Valeur

4.2.1.3 - Les autres styles de PHPExcel_Style_AlignmentPour la rotation du texte , il suffit de passer l'angle voulu dans la mthode rotation().$sheet->duplicateStyleArray(array( 'alignment'=>array( 'rotation'=>90), 'A21:F37');

Si vous utilisez une version infrieure Excel 2007, seules les valeurs "0,90,180,270" seront acceptes La passage automatique la ligne : 'Wrap'$sheet->duplicateStyleArray(array( - 18 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) 'alignment'=>array( 'wrap'=>true), 'A21:F37');

Ajuster les cellules : 'shrinkToFit'$sheet->duplicateStyleArray(array( 'alignment'=>array( 'shrinkToFit'=>true), 'A21:F37');

Tout en mme temps :$sheet->duplicateStyleArray(array( 'alignment'=>array( 'shrinkToFit'=>true, 'wrap'=>true, 'rotation'=>90, 'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER) , 'A21:F37');

4.3 - Les borduresLes bordures possdent deux classes PHPExcel_Style_Border et PHPExcel_Style_Borders. PHPExcel_Style_Borders dfinit notamment quatre mthodes : getLeft() getRight() getTop() getBottom()

Ces mthodes instancient un objet de la classe PHPExcel_Style_Border, qui permet de dfinir le style de bordure (via des constantes dfinies), et le style de couleur de la bordure via les mthodes de la classe PHPExcel_Style_Color dont j'ai dj parl plus haut. Voici un petit exemple :$styleA11 = $sheet->getStyle('A11'); $styleA11->applyFromArray(array( 'borders'=>array( 'top'=>array( 'style'=>PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT), 'bottom'=>array( 'style'=>PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT, 'color'=>array( 'rgb' => '808080')))));

Les constantes dfinies sont les suivantes :

- 19 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Constante BORDER_NONE BORDER_DASHDOT BORDER_DASHDOTDOT BORDER_DASHED BORDER_DOTTED BORDER_DOUBLE BORDER_HAIR BORDER_MEDIUM BORDER_MEDIUMDASHDOT BORDER_MEDIUMDASHDOTDOT BORDER_MEDIUMDASHED BORDER_SLANTDASHDOT BORDER_THICK BORDER_THIN

Valeur 'none' 'dashDot' 'dashDotDot' 'dashed' 'dotted' 'double' 'hair' 'medium' 'mediumDashDot' 'mediumDashDotDot' 'mediumDashed' 'slantDashDot' 'thick' 'thin'

4.3.1 - Toutes les borduresDfinir chaque ligne peut tre vite fastidieux, il est possible de dfinir les 4 cts de la cellule en un seule array(), grce au mot cl 'allborders'.$sheet->getStyle('B2')->getBorders()->applyFromArray( array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, 'color' => array( 'rgb' => '808080' ) ) ) );

4.4 - Le fond de la celluleNous pourrions avoir besoin de mettre une cellule en couleur, pour ce faire nous utiliserons la classe PHPExcel_Style_Fill. Cette classe nous permet de dfinir le style de fond, si elle doit tre solide,linaire, etc. En fonction du style choisi, nous pourrons dfinir une rotation, un dgrad ou une couleur de fond. Les dgrads ne fonctionnent que sur Excel 2007. Comme pour les autres mthodes, une srie de constantes sont dfinies, pour le style de fond de la cellule.

- 20 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Constante FILL_NONE FILL_SOLID FILL_GRADIENT_LINEAR FILL_GRADIENT_PATH FILL_PATTERN_DARKDOWN FILL_PATTERN_DARKGRAY FILL_PATTERN_DARKGRID FILL_PATTERN_DARKHORIZONTAL FILL_PATTERN_DARKTRELLIS FILL_PATTERN_DARKUP FILL_PATTERN_DARKVERTICAL FILL_PATTERN_GRAY0625 FILL_PATTERN_GRAY125 FILL_PATTERN_LIGHTDOWN FILL_PATTERN_LIGHTGRAY FILL_PATTERN_LIGHTGRID FILL_PATTERN_LIGHTHORIZONTAL FILL_PATTERN_LIGHTTRELLIS FILL_PATTERN_LIGHTUP FILL_PATTERN_LIGHTVERTICAL FILL_PATTERN_MEDIUMGRAY

'none' 'solid' 'linear' 'path' 'darkDown' 'darkGray' 'darkGrid' 'darkHorizontal' 'darkTrellis' 'darkUp' 'darkVertical' 'gray0625' 'gray125' 'lightDown' 'lightGray' 'lightGrid' 'lightHorizontal' 'lightTrellis' 'lightUp' 'lightVertical' 'mediumGray'

Valeur

Pour la couleur, c'est toujours la classe PHPExcel_Style_Color, qui fournit les mthodes. Exemple :$sheet->getStyle('A9')->applyFromArray(array( 'fill'=>array( 'type'=>PHPExcel_Style_Fill::FILL_SOLID, 'color'=>array( 'argb'=>'FFCC99'))));

Voici un exemple avec un dgrad :$sheet->getStyle('B2')->getFill()->applyFromArray( array( 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 0, 'startcolor' => array( 'rgb' => '000000' ), 'endcolor' => array( 'argb' => 'FFFFFFFF' ) ) );

4.5 - Les imagesIl est galement possible d'insrer des images dans notre document. La classe est PHPExcel_Worksheet_Drawing.

- 21 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Je n'ai l'heure actuelle encore jamais test cette classe. Le code est sorti tout droit des exemples fournis avec la librairie.$objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setName('PHPExcel logo'); $objDrawing->setDescription('PHPExcel logo'); $objDrawing->setPath('./images/phpexcel_logo.gif'); $objDrawing->setHeight(36); $objDrawing->setCoordinates('D24'); $objDrawing->setOffsetX(-10); $objDrawing->setWorksheet($sheet);

- 22 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Style par dfautLa classe PHPExcel_Worksheet nous offre une mthode qui permet d'appliquer un style tout le tableur par dfaut. Ce style dfini par dfaut pourra soit tre complt, soit remplac en fonction des besoins.include 'MaitrePylosExcel.php'; $workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $sheet->getDefaultStyle() ->applyFromArray(array( 'font'=>array( 'name' => 'Arial', 'size' => 12, 'bold' => true), 'alignment'=>array( 'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER), 'borders' => array( 'allborders'=>array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT)) ) ); $workbook->affiche('Excel2007','MonPremierFichier');

Par dfaut donc mon tableur sera fix comme suit : La police Arial sera de taille 12 en gras. Le contenu des cellules sera centr horizontalement. Les cellules seront encadres par des bordures.

5.1 - Dupliquer le styleDans la classe PHPExcel_Worksheet, nous avons une mthode qui nous permet de dupliquer le style appliqu une cellule.$sheet->duplicateStyle($styleA1,'E5:F6');

Nous appliquons le style de la cellule A1 aux cellules E5-E6-F5-F6, et voici un petit code pour vrifier nos dires.

include 'MaitrePylosExcel.php'; $workbook = new MaitrePylosExcel(); $sheet = $workbook->getActiveSheet(); $styleA1 = $sheet->getStyle('A1'); $styleA1->applyFromArray(array( 'font'=>array( 'bold'=>true, 'size'=>12, 'name'=>Arial, 'color'=>array( 'rgb'=>'FF00FF00')) - 23 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) )); $sheet->duplicateStyle($styleA1,'E5:F6'); $sheet->setCellValue('A1','MaitrePylos'); $sheet->setCellValue('E5','MaitrePylos'); $sheet->setCellValue('E6','MaitrePylos'); $sheet->setCellValue('F5','MaitrePylos'); $sheet->setCellValue('F6','MaitrePylos'); $workbook->affiche('Excel2007','MonPremierFichier');

Vous pouvez galement propager directement un style vers un ensemble de cellules via la mthode duplicateStyleArray(), dans le code suivant, nous allons appliquer un style aux cellules allant de A3 jusqu' E3.$sheet->duplicateStyleArray( array( 'font' => array( 'bold' => true ), 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT, ), 'borders' => array( 'top' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ), 'fill' => array( 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 90, 'startcolor' => array( 'argb' => 'FFA0A0A0' ), 'endcolor' => array( 'argb' => 'FFFFFFFF' ) ) ), 'A3:E3' );

- 24 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Les formats de cellulesPar dfaut les cellules prennent le format qui leur t envoy par les mthodes setCellValue et setCellValueByColumnAndRow

6.1 - PHPExcel_Cell_DataTypeCette classe va nous permettre de fixer le type de donnes, grce aux mthodes setCellValueExplicit() et setCellValueByColumnAndRowExplicit(). Ces deux mthodes prennent un troisime argument dfinissant le type de la cellule.$sheet->setCellValue('A1','MaitrePylos',PHPEcel_Cell_DataType::TYPE_STRING);

Nous dfinissons ici explicitement une cellule en A1 contenant 'MaitrePylos' et la cellule sera fixe au type string. Les diffrents types dfinis sont : Constante TYPE_STRING TYPE_FORMULA TYPE_NUMERIC TYPE_BOOL TYPE_NULL TYPE_INLINE TYPE_ERROR Valeur

's' 'f' 'n' 'b' 's' 'inlineStr' 'e'

- 25 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Vite dit 7.1 - Fusion de cellules//on fusionne les cellules de A1 D1 $sheet->mergeCells('A1:D1');

7.2 - Largeur de colonne$sheet->getColumnDimension('A')->setWidth(28);

7.3 - Hauteur de ligne$sheet->getRowDimension('2')->setRowHeight(70);

7.4 - Taille de la page$sheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);

Les formats possibles sont :

- 26 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Type Letter paper (8.5 in. by 11 in.) Letter small paper (8.5 in. by 11 in.) Tabloid paper (11 in. by 17 in.) Ledger paper (17 in. by 11 in.) Legal paper (8.5 in. by 14 in.) Statement paper (5.5 in. by 8.5 in.) Executive paper (7.25 in. by 10.5 in.) A3 paper (297 mm by 420 mm) A4 paper (210 mm by 297 mm) A4 small paper (210 mm by 297 mm) A5 paper (148 mm by 210 mm) B4 paper (250 mm by 353 mm) B5 paper (176 mm by 250 mm) Folio paper (8.5 in. by 13 in.) Quarto paper (215 mm by 275 mm) Standard paper (10 in. by 14 in.) Standard paper (11 in. by 17 in.) Note paper (8.5 in. by 11 in.) Envelope (3.875 in. by 8.875 in.) Envelope (4.125 in. by 9.5 in.) Envelope (4.5 in. by 10.375 in.) Envelope (4.75 in. by 11 in.) Envelope (5 in. by 11.5 in.) C paper (17 in. by 22 in.) Etc..

Constante PAPERSIZE_LETTER 1 PAPERSIZE_LETTER_SMALL2 PAPERSIZE_TABLOID PAPERSIZE_LEDGER PAPERSIZE_LEGAL PAPERSIZE_STATEMENT PAPERSIZE_EXECUTIVE PAPERSIZE_A3 PAPERSIZE_A4 PAPERSIZE_A4_SMALL PAPERSIZE_A5 PAPERSIZE_B4 PAPERSIZE_B5 PAPERSIZE_FOLIO PAPERSIZE_QUARTO 3 4 5 6 7 8 9 10 11 12 13 14 15

Valeur

PAPERSIZE_STANDARD_1 16 PAPERSIZE_STANDARD_2 17 PAPERSIZE_NOTE 18 PAPERSIZE_NO9_ENVELOPE 19 PAPERSIZE_NO10_ENVELOPE 20 PAPERSIZE_NO11_ENVELOPE 21 PAPERSIZE_NO12_ENVELOPE 22 PAPERSIZE_NO14_ENVELOPE 23 PAPERSIZE_C 24

Vour retrouverez l'ensemble des formats dans le fichier PHPExcel_Worksheet_PageSetup.php

7.5 - Orientation de la page$sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);

Les orientations possibles sont :

- 27 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Constante ORIENTATION_DEFAULT ORIENTATION_LANDSCAPE ORIENTATION_PORTRAIT

'default' 'landscape' 'portrait'

Valeur

7.6 - Freeze PanePour geler une celule//mettre la cellule en paramtres. $sheet->freezePane('A2');

- 28 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Ca existe aussiPHPExcel offre vraiment une panoplie de possibilits, cet article n'tant qu'une approche sommaire, je vous laisse le soin d'aller plus loin dans l'exploration de ces classes. Vous pourriez dcouvrir notamment : La protection des documents et cellules Les enttes et pieds de pages Les zones d'impression Les sauts de page Les mtas informations sur les cellules/fichiers Tout ce que je n'ai pas lu ou aperu :)

- 29 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Travailler avec l'existantSuite la publication de cet article, une des demandes tait de savoir si on pouvait modifier un fichier Excel existant ? La rponse est oui ! Et nous allons voir comment faire, pour lire le fichier, rcuprer les donnes et en ajouter ou modifier.

8 - Lire un fichier ExcelLa premire action faire est de lire le fichier Excel. Pour ce faire nous allons crer un environnement de travail correct pour les exemples. PHPExcel respectant la convention de nommage de PEAR, cela va nous faciliter la travail, en effet je vais partir du principe que nous travaillons dans le rpertoire 'Classes', fourni par l'archive de PHPExcel. Au coeur de ce rpertoire nous allons crer un fichier 'read.php' avec le contenu suivant:$path = './'; set_include_path(get_include_path() . PATH_SEPARATOR . $path); function __autoload($classe) { $fichier = str_replace ( '_', # Caractre remplacer. DIRECTORY_SEPARATOR, # Caractre de remplacement. $classe # Cible du remplacement. ) . '.php' ; require_once($fichier) ; # Chargement de la classe. }

$objet = new PHPExcel_Reader_Excel5(); $excel = $objet->load('Exemple14.xls'); $writer = new PHPExcel_Writer_Excel5($excel); $writer->save('autreFichier.xls');

Voici quelques explications de ce code. On prcise d'abord o on travaille, la racine des classes.$path = './'; set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Ensuite, on met en place la fonction autoload standard de la SPL. Cela nous vitera de mettre en place les require's ncessaire.function __autoload($classe) { $fichier = str_replace ( '_', # Caractre remplacer. DIRECTORY_SEPARATOR, # Caractre de remplacement. $classe # Cible du remplacement. ) . '.php' ; require_once($fichier) ; # Chargement de la classe. }

- 30 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

On instancie un objet de lecture de PHPExcel$objet = new PHPExcel_Reader_Excel5();

Ici j'ai pris le plis de travailler avec un fichier Excel non XML (.xls), mais nous disposons des possiblites suivantes : CSV Excel2003(XML) Excel2007 Excel5 SYLK OoCalc

Ensuite nous lisons le fichier Excel, pour les exemples, je me base sur un fichier (le 14) gnr par les dmos de PHPExcel$excel = $objet->load('Exemple14.xls');

Nous disposons donc d'un objet, possdant le contenu de notre fichier Excel. A partir de ce moment nous pouvons travailler sur le fichier Excel. Une fois le travail termin nous l'enregistrons ou crons un nouveau document.$writer = new PHPExcel_Writer_Excel5($excel); $writer->save('autreFichier.xls')

Ici nous avons tous simplement enregistrer le fichier sous un autre nom Pour faciliter le travail avec cette librairie, les dveloppeurs de PHPExcel, ont mis en place un pattern factory.$objet = PHPExcel_IOFactory::createReader('Excel5'); $excel = $objet->load('Exemple14.xls'); $writer = PHPExcel_IOFactory::createWriter($excel); $writer->save('Exemple14.xls');

8.1 - Ecrire dans un fichier existant !Un des aspects les plus intressant est de pouvoir crire dans un fichier existant. Cela se fait trs facilement, en fait de la mme faon que de crer un document, il faut juste signaler PHPExcel o l'on veut crire !$objet = PHPExcel_IOFactory::createReader('Excel5'); $excel = $objet->load('Exemple14.xls'); $sheet = $excel->getSheet(0); $sheet->setCellValue('A50', 'MaitrePylos'); $writer = PHPExcel_IOFactory::createWriter($excel);

- 31 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) $writer->save('Exemple14.xls');

Ici nous devons donc savoir sur quelles feuilles travailler$sheet = $excel->getSheet(0);

La mthode getSheet(), renvoie donc un sheet index, mais si nous connaissons son nom, il est galement possible de la rcuprer$sheet = $excel->getSheetByName('Invoice');

Ensuite nous crivons dedans$sheet->setCellValue('A35', 'MaitrePylos');

8.2 - Connatre son fichier.Dans la perspective o vous ne connatriez pas le fichier avec lesquel vous travaillez, il est possible de rcuprer une serie d'information sur ce fichier.

8.2.1 - Le nom des sheetsLa mthode getSheetNames() retourne un tableau contenant le nom des sheet$name_sheet = $excel->getSheetNames();

8.2.2 - L'index des sheetsLa mthode getSheetCount() retourne le nombre de sheet suivant son index$count_sheet = $excel->getSheetCount();

8.3 - Fusionner plusieurs fichiers ExcelMaintenant que nous savons lire un fichier Excel, rien ne nous empche d'en fusionner plusieurs$objet1 = new PHPExcel_Reader_Excel5(); $excel1 = $objet1->load('Exemple14.xls'); $objet2 = new PHPExcel_Reader_Excel5(); $excel2 = $objet2->load('autreFichier.xls'); $writer = new PHPExcel(); //insertion des sheet du premier fichier for ($i=0;$igetSheetCount();$i++){ $writer->addSheet($excel1->getSheet($i)); } //insertion des sheet du second fichier for ($i=0;$igetSheetCount();$i++){ $writer->addSheet($excel2->getSheet($i)); } - 32 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos) //je modifie un sheet pour voir la diffrence $sheet = $writer->getSheet(3); $sheet->setCellValue('A50', 'MaitrePylos'); $save = new PHPExcel_Writer_Excel5($writer); $save->save('Exemple_gg.xls');

8.3.1 - Utiliser plusieurs fois le mme sheetOn peut vouloir dupliquer le mme sheet, dans ce cas il faut utiliser la mthode copy de l'objet Reader$objet1 = new PHPExcel_Reader_Excel5(); $excel1 = $objet1->load('Exemple14.xls'); $sheet1 = $excel1->getSheet(0); $sheet2 = $sheet1->copy(); $sheet2->setTitle('Cloned Worksheet'); $writer = new PHPExcel(); $writer->addSheet($sheet1); $writer->addSheet($sheet2); $sheet2 = $writer->getSheet(2); $sheet2->setCellValue('A2', 2); $save = new PHPExcel_Writer_Excel5($writer); $save->save('bugResult1.xls');

Nous avons ici copi deux fois le mme sheet Une autre possiblit est d'utiliser la fonction Clone de PHP$objet1 = new PHPExcel_Reader_Excel5(); $excel1 = $objet1->load('Exemple14.xls'); $sheet1 = $excel1->getSheet(0); $sheet2 = clone $sheet1; $sheet2->setTitle('Cloned Worksheet'); $writer = new PHPExcel(); $writer->addSheet($sheet1); $writer->addSheet($sheet2); $sheet2 = $writer->getSheet(2); $sheet2->setCellValue('A2', 2); $save = new PHPExcel_Writer_Excel5($writer); $save->save('bugResult1.xls');

Mes essais concernant cette seconde mthode ne sont pas trs concluants quand le sheet que l'on veut copier contient des images. En effet lors de la copie je perd toute trace des images. Dans ce cas, je prfre raliser une fusion de deux fichiers, en utilisant deux fois le mme fichier d'origine. Je terminerai ici ce paragraphe sur la lecture des fichiers.

- 33 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

Extraire des imagesLors d'changes sur le forum, @objectifweb un posteur,nous a soumis une difficult qu'il rencontrait, c'est dire extraire des photos d'un fichier existant. Il nous orient sur une solution, que l'on peut retrouver dans les archives de PHPExcel. A la lecture d'un fichier Excel, une des mthodes qui recense les images est getDrawingCollection(). Dans un premier temps crer un rpertoire / images pour recpetionner toutes les images, ensuite il faut boucler sur getDrawingCollection() et crer les images avec la fonction image/jpeg/gif() de PHP$objet1 = new PHPExcel_Reader_Excel5(); $excel1 = $objet1->load('Exemple14.xls'); $sheet1 = $excel1->getSheet(0); foreach ($sheet1->getDrawingCollection() as $drawing) { // $drawing->getCoordinates(); // we have an ordinary drawing (case xlsx) if ($drawing instanceof PHPExcel_Worksheet_Drawing) { $filename = $drawing->getPath(); copy($filename, 'images/' . $drawing->getIndexedFilename()); // we have a memory drawing (case xls) } else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { $image = $drawing->getImageResource(); // save image to disk $renderingFunction = $drawing->getRenderingFunction(); switch ($renderingFunction) { case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG: imagejpeg($image, 'images/' . $drawing->getIndexedFilename()); break; case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF: imagegif($image, 'images/' . $drawing->getIndexedFilename()); break; case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG: case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT: imagepng($image, 'images/' . $drawing->getIndexedFilename()); break;

}

}

}

- 34 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.

Introduction PHPExcel par Ernaelsten Grard (MaitrePylos)

ConclusionPour finir, je dirais que nous avons l une librairie qui va nous rendre de grands services dans le dveloppement de nos activits. Ils ne nous reste plus qu' injecter des donnes venant de nos bases de donnes.

MerciQue soient remercis ici tous ceux qui m'ont apport une aide prcieuse la confection de cet article (Frdrique, Yogui, Celira....). Je voudrais aussi remercier Magali Contensin et Ccile Odero du CNRS, pour leur article sur PHPExcel paru dans le Phpsolutions du mois de mai 2008, s'il vous est possible de vous procurer cet article, je vous en conseille la lecture.

LiensPHPExcel Spreadsheet_Excel_Writer en PHP Spreadsheet_Excel_Writer FPDF http://snaps.php.net/

- 35 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.