Tutorial: Excel-Dateien in Java generieren (mit Apache POI)
Dieses Tutorial zeigt dir Schritt für Schritt, wie du mit Java professionelle Excel-Dateien (.xlsx) erstellst. Wir verwenden dafür die Bibliothek Apache POI, den Industriestandard für die Bearbeitung von Microsoft-Office-Dokumenten in Java.
In diesem Guide lernst du, wie du ein Projekt aufsetzt, Daten in Zellen schreibst, Formatierungen anwendest und die Datei speicherst.
1. Voraussetzungen
- Java Development Kit (JDK): Version 8 oder höher.
- Build-Tool: Maven oder Gradle (empfohlen).
2. Abhängigkeiten hinzufügen
Zuerst musst du die Apache POI Bibliotheken zu deinem Projekt hinzufügen.
Für Maven (pom.xml):
<dependencies>
<!-- Apache POI für .xlsx (OOXML) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
</dependencies>
3. Grundkonzepte von Apache POI
Bevor wir coden, hier die wichtigsten Klassen:
- Workbook: Die gesamte Excel-Datei. Wir nutzen
XSSFWorkbookfür.xlsx. - Sheet: Ein einzelnes Tabellenblatt.
- Row: Eine Zeile im Blatt (beginnend bei Index 0).
- Cell: Eine einzelne Zelle in einer Zeile (beginnend bei Index 0).
4. Beispiel-Code: Eine einfache Excel-Datei erstellen
Hier ist ein vollständiges Beispiel, das eine Liste von Mitarbeitern in eine Excel-Datei schreibt.
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelGenerator {
public static void main(String[] args) {
// 1. Workbook erstellen (das Dokument)
try (Workbook workbook = new XSSFWorkbook()) {
// 2. Tabellenblatt erstellen
Sheet sheet = workbook.createSheet("Mitarbeiterliste");
// 3. Header-Zeile erstellen (Index 0)
Row headerRow = sheet.createRow(0);
// Styling für den Header
CellStyle headerStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
headerStyle.setFont(font);
// Zellen für den Header füllen
String[] columns = {"ID", "Name", "Abteilung", "Gehalt"};
for (int i = 0; i < columns.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns[i]);
cell.setCellStyle(headerStyle);
}
// 4. Beispieldaten hinzufügen
Object[][] mitarbeiterDaten = {
{1, "Max Mustermann", "IT", 55000.50},
{2, "Erika Musterfrau", "Marketing", 62000.00},
{3, "John Doe", "Sales", 48000.00}
};
int rowNum = 1;
for (Object[] daten : mitarbeiterDaten) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue((int) daten[0]);
row.createCell(1).setCellValue((String) daten[1]);
row.createCell(2).setCellValue((String) daten[2]);
row.createCell(3).setCellValue((double) daten[3]);
}
// 5. Spaltenbreite automatisch anpassen
for (int i = 0; i < columns.length; i++) {
sheet.autoSizeColumn(i);
}
// 6. Datei schreiben
try (FileOutputStream fileOut = new FileOutputStream("Mitarbeiter.xlsx")) {
workbook.write(fileOut);
System.out.println("Excel-Datei erfolgreich erstellt: Mitarbeiter.xlsx");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. Wichtige Formatierungen
Zahlenformate (z. B. Währung)
Damit Zahlen als Währung angezeigt werden, musst du ein DataFormat verwenden:
CellStyle currencyStyle = workbook.createCellStyle();
DataFormat df = workbook.createDataFormat();
currencyStyle.setDataFormat(df.getFormat("#,##0.00 €"));
Cell gehaltZelle = row.createCell(3);
gehaltZelle.setCellValue(55000.50);
gehaltZelle.setCellStyle(currencyStyle);
Farben und Rahmen
CellStyle styledCell = workbook.createCellStyle();
styledCell.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
styledCell.setFillPattern(FillPatternType.SOLID_FOREGROUND);
styledCell.setBorderBottom(BorderStyle.THIN);
6. Best Practices
- Try-with-Resources: Nutze immer
try (Workbook workbook = ...)und denFileOutputStreaminnerhalb eines Try-Blocks, damit alle Streams automatisch geschlossen werden. Dies verhindert Speicherlecks. - SXSSFWorkbook für große Dateien: Wenn du Hunderttausende von Zeilen generieren musst, nutze
SXSSFWorkbook(Streaming-Variante von Apache POI). Es verbraucht deutlich weniger RAM, da es Daten zwischendurch auf die Festplatte schreibt. - Indizes: Denke daran, dass Spalten und Zeilen in POI bei 0 beginnen.
Fazit
Mit Apache POI ist das Erstellen von Excel-Dateien in Java sehr flexibel. Du kannst nicht nur einfache Tabellen erstellen, sondern auch Formeln einfügen, Diagramme generieren und komplexe Designs umsetzen. Für die meisten Standardaufgaben reicht das obige Grundgerüst völlig aus.