Excel-Dateien in Java lesen: Ein Schritt-für-Schritt Tutorial
Hier ist ein ausführliches Tutorial, wie du Excel-Dateien mit Java auslesen kannst. Da Java von Haus aus keine native Unterstützung für Excel-Dateien bietet, verwenden wir die am weitesten verbreitete Bibliothek: Apache POI.
In diesem Tutorial lernst du, wie du Daten aus einer .xlsx oder .xls Datei extrahierst und in der Konsole ausgibst.
1. Voraussetzungen
Bevor du startest, musst du die Apache POI Bibliothek zu deinem Projekt hinzufügen.
Wenn du Maven nutzt:
Füge diese Abhängigkeiten in deine pom.xml ein:
<dependencies>
<!-- Für .xlsx Dateien (OOXML) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Logging (wird von POI benötigt) -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.19.0</version>
</dependency>
</dependencies>
2. Die Kern-Konzepte von Apache POI
Um eine Excel-Datei zu verstehen, nutzt POI folgende Klassen:
- Workbook: Repräsentiert die gesamte Excel-Datei.
- Sheet: Repräsentiert ein einzelnes Arbeitsblatt.
- Row: Eine Zeile im Arbeitsblatt.
- Cell: Eine einzelne Zelle in einer Zeile.
3. Der Java-Code
Hier ist ein vollständiges Beispiel, das eine Datei namens beispiel.xlsx einliest und alle Zellenwerte ausgibt.
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.IOException;
public class ExcelReader {
public static void main(String[] args) {
// Pfad zur Excel-Datei
String excelFilePath = "beispiel.xlsx";
try {
// 1. Datei öffnen
Workbook workbook = WorkbookFactory.create(new File(excelFilePath));
// 2. Das erste Arbeitsblatt auswählen (Index 0)
Sheet sheet = workbook.getSheetAt(0);
// Hilfsklasse zum Formatieren von Zellwerten (Zahlen, Daten etc.)
DataFormatter dataFormatter = new DataFormatter();
System.out.println("Inhalt der Excel-Datei:\n");
// 3. Über alle Zeilen iterieren
for (Row row : sheet) {
// 4. Über alle Zellen der aktuellen Zeile iterieren
for (Cell cell : row) {
// Zellwert als String formatieren (so wie er in Excel aussieht)
String cellValue = dataFormatter.formatCellValue(cell);
System.out.print(cellValue + "\t | ");
}
System.out.println(); // Zeilenumbruch nach jeder Zeile
}
// 5. Ressourcen schließen
workbook.close();
} catch (IOException e) {
System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. Erläuterung der wichtigsten Schritte
Die WorkbookFactory
Anstatt manuell zwischen HSSFWorkbook (für altes .xls) und XSSFWorkbook (für neues .xlsx) zu unterscheiden, erkennt WorkbookFactory.create() das Format automatisch.
Der DataFormatter
Das ist ein "Geheimtipp". Zellen in Excel können Zahlen, Formeln, Datumsangaben oder Texte enthalten. Der DataFormatter wandelt alles intelligent in einen String um, so wie du es in Excel sehen würdest (inklusive Währungssymbolen oder Datumsformatierung).
Iteration
Wir nutzen hier die "For-Each"-Schleife, die Apache POI für Sheet und Row bereitstellt. Das macht den Code sehr leserlich.
5. Umgang mit verschiedenen Datentypen (Optional)
Wenn du die Daten nicht nur als Text anzeigen, sondern damit rechnen möchtest, kannst du den Typ manuell prüfen:
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue());
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.print(cell.getDateCellValue());
} else {
System.out.print(cell.getNumericCellValue());
}
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue());
break;
case FORMULA:
System.out.print(cell.getCellFormula());
break;
default:
System.out.print(" ");
}
6. Häufige Fehler
- FileNotFoundException: Stelle sicher, dass die Datei im Projektordner liegt oder gib den absoluten Pfad an (z.B.
C:/Users/Name/Documents/test.xlsx). - Abhängigkeiten fehlen: Wenn du eine
NoClassDefFoundErrorerhältst, fehlen meistens diepoi-ooxml-schemasodercommons-collections4Bibliotheken (Maven löst dies automatisch). - Datei ist geöffnet: Wenn die Excel-Datei gerade in Microsoft Excel geöffnet ist, kann Java manchmal nicht darauf zugreifen. Schließe die Datei vor dem Ausführen des Programms.
Zusammenfassung
Mit Apache POI und der WorkbookFactory ist das Lesen von Excel-Dateien in Java sehr komfortabel. Für einfache Leseaufgaben ist der DataFormatter dein bester Freund, um komplexe Zelltypen schnell als Text zu erhalten.