Introduction à PHPExcel
Date de publication : 05/02/2009 , Date de mise à jour : 14/07/2010
Mise en forme
4.1. La classe de style "Font"
4.1.1. MaitrePylos en vert...
4.1.2. applyFromArray
4.2. PHPExcel_Style
4.2.1. applyFromArray de PHPExcel_Style
4.2.1.1. Format de cellule
4.2.1.2. Alignement de la cellule
4.2.1.3. Les autres styles de PHPExcel_Style_Alignment
4.3. Les bordures
4.3.1. Toutes les bordures
4.4. Le fond de la cellule
4.5. Les images
Mise en forme
PHPExcel 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 méthodes 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 critères 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 ' );
|
Nous allons passer en revue ce code bien comprendre ce qu'il se passe.
$ styleA1 = $sheet ->getStyle (' A1 ' );
|
getStyle() est une méthode de la classe PHPExcel_Worksheet qui instancie la classe PHPExcel_Style (que nous verrons plus tard), on lui passe en paramètre la cellule visée.
$ styleFont = $styleA1 ->getFont ();
|
getFont() est donc une méthode de la classe PHPExcel_Style, qui instancie la classe PHPExcel_Style_Font.
A partir de cette instanciation nous pouvons utiliser les méthodes de PHPExcel_Style_Font.
$styleFont ->setBold (true );
$styleFont ->setSize (12 );
$styleFont ->setName (' Arial ' );
$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 défini un certain nombre de constantes que voici :
Constante |
Valeur |
COLOR_BLACK |
'FF000000' |
COLOR_WHITE |
'FFFFFFFF' |
COLOR_RED |
'FFFF0000' |
COLOR_DARKRED |
'FF800000' |
COLOR_BLUE |
'FF0000FF' |
COLOR_DARKBLUE |
'FF000080' |
COLOR_GREEN |
'FF00FF00' |
COLOR_DARKGREEN |
'FF008000' |
COLOR_YELLOW |
'FFFFFF00' |
COLOR_DARKYELLOW |
'FF808000' |
Ainsi que deux méthodes :
setARGB(), que vous connaissez déjà (voir exemple ci-dessus) et qui prend en paramètre une des constantes.
setRGB(), qui, elle prend en paramètre le code HTML de la couleur :
$styleFont ->getColor ()- > setRGB(' FF00FF00 ' );
|
4.1.2. applyFromArray
Il y a moyen d'alléger ce code. En effet, la classe PHPExcel_Style_Font propose une méthode applyFromArray() qui prend un tableau en paramètre afin de ne pas utiliser les setter et getter de la classe et de rendre le code plus lisible.
Les mots clés de ce tableau sont :
- name
- bold
- italic
- underline
- strike
- color
- size
- superScript
- subScript
Les noms sont fort proches des méthodes, et pour cause, elles utiliseront celles-ci, pour définir 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 méthodes de PHPExcel_Style_Font, puisqu'il le fait lui-même.
Vous remarquerez que color demande un nouveau tableau, parce que la classe PHPExcel_Style_Color à également une méthode applyFromArray, avec soit rgb ou argb.
4.2. PHPExcel_Style
PHPExcel_Style est la classe qui nous permet de travailler avec les autres classes de 'style'.
Quand nous appelons la méthode getStyle(), en fait nous instancions la classe PHPExcel_Style, celle-ci dispose de méthodes nous permettant d'instancier les autres classes de styles,
les méthodes sont :
- getFill()
- getFont()
- getBorders()
- getAlignment()
- getNumberFormat()
- getProtection()
Chaque méthode instancie la classe par rapport à son nom :
- getFont() instancie PHPExcel_Style_Font.
- getAlignment() instancie PHPExcel_Style_Alignment.
...
4.2.1. applyFromArray de PHPExcel_Style
PHPExcel_Style dispose également d'une méthode applyFromArray contenant le tableau suivant :
- fill
- font
- borders
- alignment
- numberformat
- protection
Notre code deviendra dès lors :
$ 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 cellule
On veut parfois obtenir un format d'affichage spécifique 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 même façon 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 façon très simple, la librairie PHPExcel, nous permet de définir un format précis, grâce à un certain nombre de constantes prédéfinies.
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_-' |
Il peut paraître 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 paramètre plutôt qu'une constante.
$sheet ->getStyle (' B43 ' )- > getNumberFormat()- > applyFromArray(
array (
' code ' = > ' dd/mm/yyyy '
)
);
|
4.2.1.2. Alignement de la cellule
Pour aligner nos cellules nous avons deux méthodes de la classe PHPExcel_Style_Alignment :
setHorizontal() - prenant en paramètre :
Constantes |
Valeur |
HORIZONTAL_GENERAL |
'general' |
HORIZONTAL_LEFT |
'left' |
HORIZONTAL_RIGHT |
'right' |
HORIZONTAL_CENTER |
'center' |
HORIZONTAL_JUSTIFY |
'justify' |
setVertical() - prenant en paramètre :
Constante |
Valeur |
VERTICAL_BOTTOM |
'bottom' |
VERTICAL_TOP |
'top' |
VERTICAL_CENTER |
'center' |
VERTICAL_JUSTIFY |
'justify' |
Voici un exemple d'utilisation
$sheet ->duplicateStyleArray (array (
' alignment ' = > array (
' horizontal ' = > PHPExcel_Style_Alignment: : HORIZONTAL_CENTER), ' A21:F37 ' );
|
4.2.1.3. Les autres styles de PHPExcel_Style_Alignment
Pour la rotation du texte , il suffit de passer l'angle voulu dans la méthode rotation().
$sheet ->duplicateStyleArray (array (
' alignment ' = > array (
' rotation ' = > 90 ), ' A21:F37 ' );
|
|
Si vous utilisez une version inférieure à Excel 2007, seules les valeurs "0,90,180,270" seront acceptées
|
La passage automatique à la ligne : 'Wrap'
$sheet ->duplicateStyleArray (array (
' alignment ' = > array (
' wrap ' = > true ), ' A21:F37 ' );
|
Ajuster les cellules : 'shrinkToFit'
$sheet ->duplicateStyleArray (array (
' alignment ' = > array (
' shrinkToFit ' = > true ), ' A21:F37 ' );
|
Tout en même temps :
$sheet ->duplicateStyleArray (array (
' alignment ' = > array (
' shrinkToFit ' = > true ,
' wrap ' = > true ,
' rotation ' = > 90 ,
' horizontal ' = > PHPExcel_Style_Alignment: : HORIZONTAL_CENTER)
, ' A21:F37 ' );
|
4.3. Les bordures
Les bordures possèdent deux classes PHPExcel_Style_Border et PHPExcel_Style_Borders.
PHPExcel_Style_Borders définit notamment quatre méthodes :
- getLeft()
- getRight()
- getTop()
- getBottom()
Ces méthodes instancient un objet de la classe PHPExcel_Style_Border, qui permet de définir le style de bordure (via des constantes définies), et le style de couleur de la bordure
via les méthodes de la classe PHPExcel_Style_Color dont j'ai déjà 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 définies sont les suivantes :
Constante |
Valeur |
BORDER_NONE |
'none' |
BORDER_DASHDOT |
'dashDot' |
BORDER_DASHDOTDOT |
'dashDotDot' |
BORDER_DASHED |
'dashed' |
BORDER_DOTTED |
'dotted' |
BORDER_DOUBLE |
'double' |
BORDER_HAIR |
'hair' |
BORDER_MEDIUM |
'medium' |
BORDER_MEDIUMDASHDOT |
'mediumDashDot' |
BORDER_MEDIUMDASHDOTDOT |
'mediumDashDotDot' |
BORDER_MEDIUMDASHED |
'mediumDashed' |
BORDER_SLANTDASHDOT |
'slantDashDot' |
BORDER_THICK |
'thick' |
BORDER_THIN |
'thin' |
4.3.1. Toutes les bordures
Définir chaque ligne peut être vite fastidieux, il est possible de définir les 4 côtés de la cellule en un seule array(), grâce 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 cellule
Nous pourrions avoir besoin de mettre une cellule en couleur, pour ce faire nous utiliserons la classe PHPExcel_Style_Fill.
Cette classe nous permet de définir le style de fond, si elle doit être solide,linéaire, etc.
En fonction du style choisi, nous pourrons définir une rotation, un dégradé ou une couleur de fond.
|
Les dégradés ne fonctionnent que sur Excel 2007.
|
Comme pour les autres méthodes, une série de constantes sont définies, pour le style de fond de la cellule.
Constante |
Valeur |
FILL_NONE |
'none' |
FILL_SOLID |
'solid' |
FILL_GRADIENT_LINEAR |
'linear' |
FILL_GRADIENT_PATH |
'path' |
FILL_PATTERN_DARKDOWN |
'darkDown' |
FILL_PATTERN_DARKGRAY |
'darkGray' |
FILL_PATTERN_DARKGRID |
'darkGrid' |
FILL_PATTERN_DARKHORIZONTAL |
'darkHorizontal' |
FILL_PATTERN_DARKTRELLIS |
'darkTrellis' |
FILL_PATTERN_DARKUP |
'darkUp' |
FILL_PATTERN_DARKVERTICAL |
'darkVertical' |
FILL_PATTERN_GRAY0625 |
'gray0625' |
FILL_PATTERN_GRAY125 |
'gray125' |
FILL_PATTERN_LIGHTDOWN |
'lightDown' |
FILL_PATTERN_LIGHTGRAY |
'lightGray' |
FILL_PATTERN_LIGHTGRID |
'lightGrid' |
FILL_PATTERN_LIGHTHORIZONTAL |
'lightHorizontal' |
FILL_PATTERN_LIGHTTRELLIS |
'lightTrellis' |
FILL_PATTERN_LIGHTUP |
'lightUp' |
FILL_PATTERN_LIGHTVERTICAL |
'lightVertical' |
FILL_PATTERN_MEDIUMGRAY |
'mediumGray' |
Pour la couleur, c'est toujours la classe PHPExcel_Style_Color, qui fournit les méthodes.
Exemple :
$sheet ->getStyle (' A9 ' )- > applyFromArray(array (
' fill ' = > array (
' type ' = > PHPExcel_Style_Fill: : FILL_SOLID,
' color ' = > array (
' argb ' = > ' FFCC99 ' ))));
|
Voici un exemple avec un dégradé :
$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 images
Il est également possible d'insérer des images dans notre document.
La classe est PHPExcel_Worksheet_Drawing.
|
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 );
|
Ce document est issu de http://www.developpez.com et reste la
propriété exclusive de son auteur.
La copie, modification et/ou
distribution par quelque moyen que ce soit est soumise à l'obtention
préalable de l'autorisation de l'auteur.