Travailler avec Excel en PHP : aperçu des meilleures bibliothèques
Le traitement des feuilles de calcul est l'une des tâches courantes en développement web. En PHP, il existe plusieurs outils éprouvés pour créer, lire et modifier des fichiers Excel. Dans cet article, nous examinerons deux bibliothèques clés : PhpSpreadsheet (successeur du populaire PHPExcel) et la légère OpenSpout, conçue pour l'écriture et la lecture rapides de fichiers volumineux.
1. Installation via Composer
Les deux bibliothèques s'installent avec le gestionnaire de paquets standard Composer. Exécutez dans le terminal à la racine du projet :
# Pour PhpSpreadsheet (fonctionnalité complète pour Excel)composer require phpoffice/phpspreadsheet
# Pour OpenSpout (haute performance sur de grandes données)composer require openspout/openspoutAprès l'installation, incluez l'autoloader au début du script :
require_once __DIR__ . '/vendor/autoload.php';2. PhpSpreadsheet : création et stylisation de fichiers Excel
La bibliothèque prend en charge les formats XLSX, XLS, ODS, CSV et autres. Elle permet de gérer les styles, fusionner les cellules, insérer des images et des formules.
Exemple : création d'un rapport simple
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;use PhpOffice\\PhpSpreadsheet\\Style\\Alignment;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// En-têtes$sheet->setCellValue('A1', 'Produit');$sheet->setCellValue('B1', 'Quantité');$sheet->setCellValue('C1', 'Prix, €');
// Données$data = [ ['Ordinateur portable', 5, 45000], ['Moniteur', 10, 15000], ['Clavier', 20, 2500],];$row = 2;foreach ($data as $item) { $sheet->setCellValue("A{$row}", $item[0]); $sheet->setCellValue("B{$row}", $item[1]); $sheet->setCellValue("C{$row}", $item[2]); $row++;}
// Formule de total$sheet->setCellValue("A{$row}", 'Total');$sheet->setCellValue("C{$row}", "=SUM(C2:C" . ($row-1) . ")");
// Stylisation des en-têtes$styleHeader = [ 'font' => ['bold' => true, 'size' => 12], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], 'fill' => ['fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'color' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleHeader);
// Largeur automatique des colonnesforeach (range('A', 'C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}
// Sauvegarde$writer = new Xlsx($spreadsheet);$writer->save('report.xlsx');echo "Fichier report.xlsx créé !";Lecture d'un fichier XLSX existant
use PhpOffice\\PhpSpreadsheet\\IOFactory;
$inputFileName = 'example.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
$highestRow = $sheet->getHighestRow();$highestColumn = $sheet->getHighestColumn();
for ($row = 1; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray("A{$row}:{$highestColumn}{$row}", NULL, TRUE, FALSE); echo implode(', ', $rowData[0]) . "<br>";}3. OpenSpout : travail rapide avec de grands tableaux
OpenSpout est optimisé pour l'écriture et la lecture en flux. Il ne prend pas en charge les styles ni les formules, mais est idéal pour exporter des milliers de lignes de données (par exemple, l'extraction d'une base de données).
Exemple : écriture de 10 000 lignes en CSV/XLSX
use OpenSpout\\Writer\\XLSX\\Writer;use OpenSpout\\Common\\Entity\\Row;
$writer = new Writer();$writer->openToFile('big_export.xlsx');
// En-têtes$headerRow = Row::fromValues(['ID', 'Nom', 'Email']);$writer->addRow($headerRow);
for ($i = 1; $i <= 10000; $i++) { $row = Row::fromValues([$i, "Utilisateur{$i}", "utilisateur{$i}@example.com"]); $writer->addRow($row);}
$writer->close();echo "Export terminé !";Lecture ligne par ligne d'un grand fichier XLSX
use OpenSpout\\Read Aussi dans la bibliothèque
gRPC pour JavaScript (Node.js) : bibliothèques et exemples de code
Client Elasticsearch pour Node.js : @elastic/elasticsearch
Journalisation pour TypeScript : la bibliothèque Winston
Configuration des applications C# (.NET) : bibliothèques et approches
Surveillance des applications Swift : bibliothèques pour iOS et macOS