Mise en forme▲
PHPExcel nous offre huit 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.
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.
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.
À partir de cette instanciation, nous pouvons utiliser les méthodes de PHPExcel_Style_Font.
$styleFont
->
setBold(true);
//passage à true de façon à 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 définit 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
'
);
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 a également une méthode applyFromArray, avec soit rgb ou argb.
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.
…
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 :
Format de cellule▲
On veut parfois obtenir un format d'affichage spécifique pour une cellule, 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
'
)
);
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
Les autres styles de PHPExcel_Style_Alignment▲
Pour la rotation du texte, il suffit de passer l'angle voulu dans la méthode rotation().
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'
Ajuster les cellules : 'shrinkToFit'
$sheet
->
duplicateStyleArray(array(
'
alignment
'
=>
array(
'
shrinkToFit
'
=>
true),
'
A21:F37
'
);
Tout en même temps :
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' |
Toutes les bordures▲
Définir chaque ligne peut être vite fastidieux, il est possible de définir les quatre côtés de la cellule en une seule array(), grâce au mot clé 'allborders'.
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é :
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
);