Excel-Dateien in Java lesen: Ein Schritt-für-Schritt Tutorial

Melden

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

  1. FileNotFoundException: Stelle sicher, dass die Datei im Projektordner liegt oder gib den absoluten Pfad an (z.B. C:/Users/Name/Documents/test.xlsx).
  2. Abhängigkeiten fehlen: Wenn du eine NoClassDefFoundError erhältst, fehlen meistens die poi-ooxml-schemas oder commons-collections4 Bibliotheken (Maven löst dies automatisch).
  3. 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.

0