IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction à PHPExcel

Image non disponible


précédentsommairesuivant

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 :

 
Sélectionnez
$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.

 
Sélectionnez
$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.

 
Sélectionnez
$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.

 
Sélectionnez
$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 :

 
Sélectionnez
$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 :

 
Sélectionnez
$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 :

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

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.

 
Sélectionnez
$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.

 
Sélectionnez
$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

 
Sélectionnez
$sheet->duplicateStyleArray(array(
     'alignment'=>array(
              'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER), 'A21:F37');

Les autres styles de PHPExcel_Style_Alignment

Pour la rotation du texte, il suffit de passer l'angle voulu dans la méthode rotation().

 
Sélectionnez
$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'

 
Sélectionnez
$sheet->duplicateStyleArray(array(
     'alignment'=>array(
              'wrap'=>true), 'A21:F37');

Ajuster les cellules : 'shrinkToFit'

 
Sélectionnez
$sheet->duplicateStyleArray(array(
     'alignment'=>array(
              'shrinkToFit'=>true), 'A21:F37');

Tout en même temps :

 
Sélectionnez
$sheet->duplicateStyleArray(array(
     'alignment'=>array(
            'shrinkToFit'=>true,
      'wrap'=>true,
      'rotation'=>90,
      'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER)
, 'A21:F37');

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 :

 
Sélectionnez
$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'.

 
Sélectionnez
$sheet->getStyle('B2')->getBorders()->applyFromArray(
      array(
        'allborders' => array(
          'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
          'color' => array(
            'rgb' => '808080'
          )
        )
      )
  );

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 :

 
Sélectionnez
$sheet->getStyle('A9')->applyFromArray(array(

      'fill'=>array(
        'type'=>PHPExcel_Style_Fill::FILL_SOLID,
        'color'=>array(
          'argb'=>'FFCC99'))));

Voici un exemple avec un dégradé :

 
Sélectionnez
$sheet->getStyle('B2')->getFill()->applyFromArray(
      array(
        'type'    => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
        'rotation'  => 0,
        'startcolor' => array(
          'rgb' => '000000'
        ),
        'endcolor'  => array(
          'argb' => 'FFFFFFFF'
        )
      )
  );

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.

 
Sélectionnez
$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);

précédentsommairesuivant

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.