Arbeiten mit Excel in PHP: Überblick über die Bibliotheken PhpSpreadsheet und OpenSpout
Das Arbeiten mit Excel-Tabellen ist eine der häufigsten Aufgaben in der Webentwicklung mit PHP. Ob es um die Generierung von Berichten, den Import von Daten aus Buchhaltungssystemen oder den Export von Statistiken für Kunden geht – ohne Werkzeuge für die Formate .xlsx und .xls kommt man nicht aus. In diesem Artikel betrachten wir zwei der beliebtesten PHP-Bibliotheken: PhpSpreadsheet (Nachfolger des berühmten PHPExcel) und OpenSpout (eine leichte Alternative für große Dateien).
PhpSpreadsheet – ein leistungsstarkes und funktionsreiches Werkzeug
PhpSpreadsheet ist eine Bibliothek des Projekts PHPOffice, mit der Sie Excel-Dateien (XLSX, XLS, ODS, CSV und andere) lesen, erstellen und ändern können. Sie unterstützt Zellenstyling, Formeln, Diagramme, bedingte Formatierung und sogar die Arbeit mit Makros.
Installation von PhpSpreadsheet
Die Installation erfolgt über Composer:
composer require phpoffice/phpspreadsheetBeispiel: Erstellen einer einfachen Excel-Datei
<?phprequire 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Daten ausfüllen$sheet->setCellValue('A1', 'ID');$sheet->setCellValue('B1', 'Name');$sheet->setCellValue('C1', 'E-Mail');$sheet->setCellValue('A2', 1);$sheet->setCellValue('B2', 'Ivan Petrov');$sheet->setCellValue('C2', 'ivan@example.com');
// Überschrift stylen$styleArray = [ 'font' => ['bold' => true, 'size' => 14], 'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Datei speichern$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');echo "Datei users.xlsx wurde erstellt!";?>Lesen einer vorhandenen Excel-Datei
<?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 – Leichtigkeit und Geschwindigkeit für große Datenmengen
OpenSpout ist eine Bibliothek, die für die Arbeit mit großen Datenmengen (Hunderttausende von Zeilen) entwickelt wurde. Im Gegensatz zu PhpSpreadsheet lädt sie nicht die gesamte Datei in den Speicher, sondern verarbeitet sie streamend. Dies macht sie ideal für den Export/Import umfangreicher Berichte. OpenSpout unterstützt die Formate XLSX, CSV und ODS.
Installation von OpenSpout
composer require openspout/openspoutBeispiel: Export von 100.000 Zeilen in XLSX
<?phprequire 'vendor/autoload.php';
use OpenSpout\\Writer\\XLSX\\Writer;
$writer = new Writer();$writer->openToFile('big_export.xlsx');
// Überschriften$writer->addRow(['ID', 'Name', 'E-Mail']);
for ($i = 1; $i <= 100000; $i++) { $writer->addRow([$i, "Benutzer $i", "user$i@example.com"]);}
$writer->close();echo "Datei big_export.xlsx mit 100.000 Zeilen wurde erstellt!";?>Lesen einer großen Datei mit 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>"; }}?> Auch in der Bibliothek
Ardalis.SmartEnum für C# (.NET): Vollständige Anleitung mit Beispielen
Arbeit mit Kafka in Rust: Bibliotheken rdkafka und Franz