Travailler avec Excel en PHP : bibliothèques PhpSpreadsheet et PhpOffice
Dans le développement web moderne, il est souvent nécessaire d'exporter des données au format Excel, d'importer des rapports ou de traiter des tableaux côté serveur. PHP propose plusieurs bibliothèques puissantes pour travailler avec les fichiers .xlsx, .xls et .ods. Dans cet article, nous examinerons en détail PhpSpreadsheet — une bibliothèque moderne et active qui a remplacé l'ancienne PHPExcel.
Qu'est-ce que PhpSpreadsheet ?
PhpSpreadsheet est une bibliothèque pour lire, écrire et modifier des feuilles de calcul dans divers formats : Excel, OpenDocument, CSV, HTML et PDF. Elle est écrite en PHP pur, ne nécessite pas l'installation d'extensions supplémentaires (à l'exception des extensions standard zip et xml) et prend en charge toutes les fonctionnalités principales d'Excel : styles, formules, graphiques, mise en forme conditionnelle, plusieurs feuilles et bien plus encore.
Installation
L'installation se fait via Composer :
composer require phpoffice/phpspreadsheetAprès l'installation, un dossier vendor avec l'autoloading apparaît dans le projet. Pour commencer, il suffit d'inclure l'autoloader :
require 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;Création d'un fichier Excel simple
Examinons un exemple de base : créons un fichier avec des en-têtes et quelques lignes de données.
// Création d'un nouvel objet Spreadsheet$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Définition des en-têtes$sheet->setCellValue('A1', 'Nom') ->setCellValue('B1', 'Email') ->setCellValue('C1', 'Date d\\'inscription');
// Remplissage avec des données$sheet->setCellValue('A2', 'Ivan Ivanov') ->setCellValue('B2', 'ivan@example.com') ->setCellValue('C2', '2024-01-15');
$sheet->setCellValue('A3', 'Maria Petrova') ->setCellValue('B3', 'maria@example.com') ->setCellValue('C3', '2024-02-20');
// Sauvegarde du fichier$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');
echo "Le fichier users.xlsx a été créé avec succès !";Après l'exécution du script, un fichier users.xlsx apparaîtra à la racine du projet, qui peut être ouvert dans Excel ou Google Sheets.
Lecture d'un fichier Excel existant
PhpSpreadsheet permet de lire facilement les données de n'importe quel format. Exemple de chargement et d'affichage du contenu :
$inputFileName = 'users.xlsx';$spreadsheet = \\PhpOffice\\PhpSpreadsheet\\IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
// Lecture de toutes les lignes$data = $sheet->toArray();
foreach ($data as $row) { echo implode(' | ', $row) . "";}La méthode toArray() retourne un tableau bidimensionnel, où le premier élément est une ligne avec les indices 0,1,2… Vous pouvez accéder aux cellules par adresse : $sheet->getCell('A2')->getValue().
Gestion des styles et du formatage
L'un des points forts de PhpSpreadsheet est la gestion flexible de l'apparence du tableau.
$styleArray = [ 'font' => [ 'bold' => true, 'size' => 12, 'color' => ['argb' => 'FF2E4057'], ], 'fill' => [ 'fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'startColor' => ['argb' => 'FFD9E2EC'], ], 'borders' => [ 'allBorders' => [ 'borderStyle' => \\PhpOffice\\PhpSpreadsheet\\Style\\Border::BORDER_THIN, ], ],];
// Application du style à la plage$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Largeur automatique des colonnesforeach (range('A','C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}Export de données depuis la base de données vers Excel
Il est souvent nécessaire d'exporter les résultats d'une requête SQL. Exemple avec PDO :