Arbeiten mit Excel in PHP: Bibliotheken PhpSpreadsheet und OpenSpout

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Excel in PHP: Überblick über die besten Bibliotheken

Die Verarbeitung von Tabellenkalkulationen ist eine häufige Aufgabe in der Webentwicklung. Für PHP gibt es mehrere bewährte Werkzeuge zum Erstellen, Lesen und Bearbeiten von Excel-Dateien. In diesem Artikel betrachten wir zwei Schlüsselbibliotheken: PhpSpreadsheet (Nachfolger des beliebten PHPExcel) und die leichte OpenSpout, die für schnelles Schreiben und Lesen großer Dateien konzipiert ist.



1. Installation über Composer

Beide Bibliotheken werden mit dem Standard-Paketmanager Composer installiert. Führen Sie im Terminal im Projektstammverzeichnis aus:

# Für PhpSpreadsheet (voll funktionsfähige Arbeit mit Excel)composer require phpoffice/phpspreadsheet

# Für OpenSpout (hohe Leistung bei großen Datenmengen)composer require openspout/openspout

Nach der Installation binden Sie den Autoloader am Anfang des Skripts ein:

require_once __DIR__ . '/vendor/autoload.php';


2. PhpSpreadsheet: Erstellung und Styling von Excel-Dateien

Die Bibliothek unterstützt die Formate XLSX, XLS, ODS, CSV und andere. Sie ermöglicht die Verwaltung von Stilen, das Zusammenführen von Zellen, das Einfügen von Bildern und Formeln.

Beispiel: Erstellung eines einfachen Berichts

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

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

// Überschriften$sheet->setCellValue('A1', 'Produkt');$sheet->setCellValue('B1', 'Anzahl');$sheet->setCellValue('C1', 'Preis, EUR');

// Daten$data = [ ['Laptop', 5, 45000], ['Monitor', 10, 15000], ['Tastatur', 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++;}

// Summenformel$sheet->setCellValue("A{$row}", 'Gesamt');$sheet->setCellValue("C{$row}", "=SUM(C2:C" . ($row-1) . ")");

// Styling der Überschriften$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);

// Automatische Spaltenbreiteforeach (range('A', 'C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}

// Speichern$writer = new Xlsx($spreadsheet);$writer->save('report.xlsx');echo "Datei report.xlsx erstellt!";


Lesen einer vorhandenen XLSX-Datei

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: Schnelle Arbeit mit großen Tabellen

OpenSpout ist für das Streaming-Schreiben und -Lesen optimiert. Es unterstützt keine Stile und Formeln, ist aber ideal für den Export von Tausenden von Datenzeilen (z. B. Datenbankexport).

Beispiel: Schreiben von 10.000 Zeilen in CSV/XLSX

use OpenSpout\\Writer\\XLSX\\Writer;use OpenSpout\\Common\\Entity\\Row;

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

// Überschriften$headerRow = Row::fromValues(['ID', 'Name', 'Email']);$writer->addRow($headerRow);

for ($i = 1; $i <= 10000; $i++) { $row = Row::fromValues([$i, "User{$i}", "user{$i}@example.com"]); $writer->addRow($row);}

$writer->close();echo "Export abgeschlossen!";


Zeilenweises Lesen einer großen XLSX-Datei

use OpenSpout\\Read                    

Empfehlungen