Travailler avec Excel en PHP : 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 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/openspout

Aprè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                    

Recommendations