Travailler avec Excel en PHP : les bibliothèques PhpSpreadsheet et OpenSpout

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Excel en PHP : aperçu des bibliothèques PhpSpreadsheet et OpenSpout



Travailler avec des feuilles de calcul Excel est l'une des tâches les plus courantes en développement web PHP. Qu'il s'agisse de générer des rapports, d'importer des données depuis des systèmes comptables ou d'exporter des statistiques pour les clients, il est impossible de se passer d'outils pour les formats .xlsx et .xls. Dans cet article, nous examinerons deux des bibliothèques PHP les plus populaires : PhpSpreadsheet (successeur du célèbre PHPExcel) et OpenSpout (une alternative légère pour les fichiers volumineux).



PhpSpreadsheet — un outil puissant et fonctionnel



PhpSpreadsheet est une bibliothèque du projet PHPOffice qui permet de lire, créer et modifier des fichiers Excel (XLSX, XLS, ODS, CSV et autres). Elle prend en charge la stylisation des cellules, les formules, les graphiques, la mise en forme conditionnelle et même le travail avec les macros.



Installation de PhpSpreadsheet

L'installation se fait via Composer :

composer require phpoffice/phpspreadsheet


Exemple : création d'un fichier Excel simple

<?phprequire 'vendor/autoload.php';

use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;

$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();

// Remplir les données$sheet->setCellValue('A1', 'ID');$sheet->setCellValue('B1', 'Nom');$sheet->setCellValue('C1', 'Email');$sheet->setCellValue('A2', 1);$sheet->setCellValue('B2', 'Ivan Petrov');$sheet->setCellValue('C2', 'ivan@example.com');

// Stylisation de l'en-tête$styleArray = [ 'font' => ['bold' => true, 'size' => 14], 'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleArray);

// Sauvegarder le fichier$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');echo "Le fichier users.xlsx a été créé !";?>


Lecture d'un fichier Excel existant

<?phprequire 'vendor/autoload.php';

use PhpOffice\\PhpSpreadsheet\\IOFactory;

$inputFileName = 'users.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();

foreach ($sheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $rowData = []; foreach ($cellIterator as $cell) { $rowData[] = $cell->getValue(); } echo implode(' | ', $rowData) . "<br>";}?>


OpenSpout — légèreté et rapidité pour les grandes données



OpenSpout est une bibliothèque conçue pour travailler avec de grands volumes de données (des centaines de milliers de lignes). Contrairement à PhpSpreadsheet, elle ne charge pas tout le fichier en mémoire, mais le traite en flux. Cela la rend idéale pour l'export/import de rapports volumineux. OpenSpout prend en charge les formats XLSX, CSV et ODS.



Installation d'OpenSpout

composer require openspout/openspout


Exemple : export de 100 000 lignes en XLSX

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Writer\\XLSX\\Writer;

$writer = new Writer();$writer->openToFile('big_export.xlsx');

// En-têtes$writer->addRow(['ID', 'Nom', 'Email']);

for ($i = 1; $i <= 100000; $i++) { $writer->addRow([$i, "Utilisateur $i", "user$i@example.com"]);}

$writer->close();echo "Le fichier big_export.xlsx avec 100 000 lignes a été créé !";?>


Lecture d'un fichier volumineux avec OpenSpout

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Reader\\XLSX\\Reader;

$reader = new Reader();$reader->open('big_export.xlsx');

foreach ($reader->getSheetIterator() as $sheet) { foreach ($sheet->getRowIterator() as $row) { $cells = $row->getCells(); echo implode(' | ', array_map(function($cell) { return $cell->getValue(); }, $cells)) . "<br>"; }}?>

Recommendations