Arbeiten mit Excel in PHP: Bibliotheken PhpSpreadsheet und PhpOffice
In der modernen Webentwicklung besteht häufig die Notwendigkeit, Daten in das Excel-Format zu exportieren, Berichte zu importieren oder Tabellen serverseitig zu verarbeiten. PHP bietet mehrere leistungsstarke Bibliotheken für die Arbeit mit .xlsx-, .xls- und .ods-Dateien. In diesem Artikel betrachten wir ausführlich PhpSpreadsheet – eine moderne und aktiv weiterentwickelte Bibliothek, die die veraltete PHPExcel abgelöst hat.
Was ist PhpSpreadsheet?
PhpSpreadsheet ist eine Bibliothek zum Lesen, Schreiben und Bearbeiten von Tabellenkalkulationen in verschiedenen Formaten: Excel, OpenDocument, CSV, HTML und PDF. Sie ist in reinem PHP geschrieben, erfordert keine zusätzlichen Erweiterungen (außer den Standard-Erweiterungen zip und xml) und unterstützt alle wesentlichen Excel-Funktionen: Stile, Formeln, Diagramme, bedingte Formatierung, mehrere Blätter und vieles mehr.
Installation
Die Installation erfolgt über Composer:
composer require phpoffice/phpspreadsheetNach der Installation erscheint im Projekt ein Ordner vendor mit Autoloading. Um zu beginnen, genügt es, den Autoloader einzubinden:
require 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;Erstellen einer einfachen Excel-Datei
Betrachten wir ein grundlegendes Beispiel: Wir erstellen eine Datei mit Überschriften und einigen Datenzeilen.
// Neues Spreadsheet-Objekt erstellen$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Überschriften setzen$sheet->setCellValue('A1', 'Name') ->setCellValue('B1', 'E-Mail') ->setCellValue('C1', 'Registrierungsdatum');
// Mit Daten füllen$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');
// Datei speichern$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');
echo "Datei users.xlsx erfolgreich erstellt!";Nach dem Ausführen des Skripts erscheint im Stammverzeichnis des Projekts die Datei users.xlsx, die in Excel oder Google Sheets geöffnet werden kann.
Lesen einer vorhandenen Excel-Datei
PhpSpreadsheet ermöglicht das einfache Lesen von Daten aus jedem Format. Beispiel zum Laden und Ausgeben des Inhalts:
$inputFileName = 'users.xlsx';$spreadsheet = \\PhpOffice\\PhpSpreadsheet\\IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
// Alle Zeilen lesen$data = $sheet->toArray();
foreach ($data as $row) { echo implode(' | ', $row) . "";}Die Methode toArray() gibt ein zweidimensionales Array zurück, wobei das erste Element eine Zeile mit den Indizes 0,1,2… ist. Sie können auf Zellen auch über die Adresse zugreifen: $sheet->getCell('A2')->getValue().
Arbeiten mit Stilen und Formatierung
Eine der Stärken von PhpSpreadsheet ist die flexible Steuerung des Erscheinungsbilds der Tabelle.
$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, ], ],];
// Stil auf den Bereich anwenden$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Automatische Spaltenbreiteforeach (range('A','C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}Datenexport aus der Datenbank nach Excel
Häufig müssen Ergebnisse einer SQL-Abfrage exportiert werden. Beispiel mit PDO: