Créer des fichiers Excel en PHP avec PHPExcel

Il est assez simple d’écrire un fichier CSV pour être lu dans excel avec fputcsv(). Mais cette fonction à des limites. La bibliothèque PHPExcel est très rapide à prendre en main. Si elle manque de documentation claire, elle reste accessible et permet d’avoir accès à un grand nombre de fonctionnalités indispensables.

Important !

Cette bibliothèque est maintenant dépréciée. Vous pouvez utiliser à la place la bibliothèque PhpSpreadsheet  (article à venir)

Installation de PHPExcel

La bibliothèque PHPExcel est à télécharger sur Github.

Inclure la bibliothèque à votre script :

require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel.php'; 

Instanciez  l’objet PHPExcel :

$objPHPExcel = new PHPExcel();

Renseignez les propriétés du document :

$objPHPExcel->getProperties()->setCreator("Charlie Stram");

Activez votre feuille de calcul :

/* Active la feuille sur laquelle nous allons travailler  */
$feuille = $objPHPExcel->getActiveSheet();
$feuille->setTitle('Le nom de ma feuille'); // Pas de caractères spéciaux ici !

Comment ajouter des valeurs à ma feuille Excel ?

Vous avez le choix entre 2 façons de cibler votre cellule :

  1. Soit en ciblant la cellule par son emplacement de type ‘B1’
    [pastacode lang= »php » manual= »%24feuille-%3EsetCellValue(‘B1’%2C’Ma%20valeur’)%3B » message= » » highlight= » » provider= »manual »/]
  2. Soit en ciblant directement la ligne et la colonne souhaitée. Notez que dans ce cas, les lignes commencent à 0 (zéro) et les colonnes à 1.
    [pastacode lang= »php » manual= »%24feuille-%3EsetCellValueByColumnAndRow(1%2C%202%2C%20’Ma%20valeur’)%3B » message= » » highlight= » » provider= »manual »/]

Comment créer un fichier Excel à partir d’un tableau en PHP ?

Prenons par exemple ce tableau tout simple, composé d’un header de 4 colonnes et de 3 lignes de données. Ce tableau peut évidemment provenir de votre base de donnée, bref, de n’importe où à condition qu’il soit bien encodé en UTF-8.

// Le tableau que nous voulons exporter en XLS : 
$header = array('COL 1', 'COL 2', 'COL 3', 'COL 4') ;
$rows[] = array( 'LIGNE 1', 'LIGNE 1', 'LIGNE 1', '1' ) ;
$rows[] = array( 'LIGNE 2', 'LIGNE 2', 'LIGNE 2', '2' ) ;
$rows[] = array( 'LIGNE 3', 'LIGNE 3', 'LIGNE 3', '3' ) ;

On s’économise quelques boucles, car PHPExcel va s’occuper de gérer notre tableau avec la fonction fromArray() qui attend 4 paramètres dont les 3 premiers sont obligatoires :

  1. $source (array) le tableau contenant les données,
  2. $nullValue (mixed) la valeur en cas de cellule vide
  3. $startCell (string) l’emplacement sur lequel démarrer l’insertion de nos données.
  4. $strictNullComparison (bool) Applique une comparaison stricte en cas de cellule vide
$feuille->fromArray($header, NULL, 'A1', true); 
$feuille->fromArray($rows, NULL, 'A2', true);

Comment enregistrer mon fichier excel ?

Vous pouvez enregistrer le fichier dans un répertoire de votre serveur, ou bien le forcer à se télécharger après génération.

Enregistrer le fichier excel :

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$file = 'fichier.xlsx';
$objWriter->save($file);

Ou télécharger le fichier excel automatiquement après génération :

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:inline;filename=fichier.xlsx ');
$objWriter->save('php://output');
exit ;

Comment modifier la largeur d’une cellule ou d’une colonne ?

Vous pouvez régler la largeur d’une cellule de cette manière :

$feuille->getColumnDimension('B')->setWidth(50);
$feuille->getColumnDimension('D')->setWidth(50);

Comment modifier l’apparence des cellules ?

Vous pouvez également agir sur le style, les bordures, le background et le format des données de vos cellules grâce à getStyle(). Vous pouvez cibler une cellule en particulier (‘D’) ou plusieurs cellules comme dans l’exemple suivant.

Cet exemple est complet, vous n’avez qu’à ajouter les personnalisations qui vous intéressent :

$my_style = $feuille->getStyle('D1:D10');

$my_style->applyFromArray(array(
// Personnaliser les polices
'font'=>array(
'bold'=>true,
//'italic'=>true,
//'underline'=>true,
//'strike' => true,
//'name'=>Arial,
'size'=>14,
'color'=>array('rgb'=>'FFFFFF') //soit rgb ou argb
),

// Personnaliser les fonds
'fill'=>array(
'type'=>'solid', // solid, linear, path, darkDown, darkGray, darkGrid, darkHorizontal, darkTrellis, etc.
'color'=>array('rgb'=>'1588B8') //soit rgb ou argb
),

// Personnaliser le format d'affichage
'numberformat'=>array(
'code'=>'##0.00_-', // 0, 0.00, #,##0.00, #,##0.00_-, 0%, 0.00%, d/m/y, h:mm, [$EUR ]#,##0.00_-, etc.
),

// Personnaliser l'alignement dans la cellule
'alignment'=>array(
'wrap'=>true, // Passage automatique à la ligne
'horizontal'=> 'center', // general, left, right, center ou justify
'vertical'=> 'top' // bottom, top, 'center', ou justify
),

// Personnaliser les bordures
'borders'=>array( // top, bottom, left, right ou allborders
'top' =>array( 'style'=>'hair', // none, dashDot, dashDotDot, dashed, dotted, double, hair, medium, mediumDashDot, mediumDashDotDot, mediumDashed, slantDashDot, thick, thin
'color'=>array('rgb' => 'E9602C')),
'bottom' =>array( 'style'=>'hair',
'color'=>array('rgb' => '0E345B')),
'left' =>array( 'style'=>'double',
'color'=>array('rgb' => '0E345B')),
'right' =>array( 'style'=>'mediumDashed',
'color'=>array('rgb' => '0E345B'))
),

));
 

A noter que vous pouvez définir le style par défaut de toute votre feuille comme ceci :

$feuille->getDefaultStyle() ->applyFromArray( [Votre tableau comme vu précédemment] );

Si cet article "Créer des fichiers Excel en PHP avec PHPExcel" vous a aidé, si vous avez des questions ou des améliorations à proposer, n'hésitez pas à me laisser un commentaire en bas de page !
Charlie Stram,
Développeur web freelance

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *