Zum Fußzeileninhalt springen
EXCEL-TOOLS

Wie man eine Excel-Datei in Java liest (Tutorial)

Was ist Excel?

Microsoft Excel Arbeitsmappe ist eine tabellenkalkulationsbasierte Software, die es ihren Benutzern ermöglicht, Daten effizient zu organisieren und zu speichern. Es speichert und organisiert Daten in tabellarischer Form, d. h. mit Hilfe von Zeilen und Spalten. Die Zelle in einer Excel-Tabelle ist das Feld, das Daten enthält und mit verschiedenen Stilen, Formatierungen und Formeln bearbeitet werden kann.

Wie liest man Excel-Dateien in Java?

Das Lesen einer Excel-Datei kann manchmal kompliziert sein. Das Lesen von Excel-Dateien in Java unterscheidet sich auch ein wenig vom Lesen von Word-Dateien in Java aufgrund der Zellen in Excel. Das JDK bietet keine direkte API zum Lesen oder Schreiben von Microsoft Excel-Dokumenten. Stattdessen müssen wir uns auf die Drittanbieter-Bibliothek Apache POI verlassen.

Apache POI Bibliothek

POI steht für 'Poor Obfuscation Implementation.' Apache POI ist eine Open-Source-Java-Bibliothek, die für das Lesen und Schreiben von Microsoft-Dokumenten entwickelt wurde. Sie bietet eine Möglichkeit, verschiedene Dateiformate basierend auf Microsoft Office zu erstellen und zu bearbeiten. Mit Apache POI sollte man in der Lage sein, eine Reihe von Microsoft Office-Dateiformaten zu erstellen, zu ändern und darzustellen/lesen.

Herunterladen und Installieren der Apache POI-Bibliothek

Um zu beginnen, laden wir die neueste Version der POI JARs herunter. Gehen Sie zu http://poi.apache.org/download.html und laden Sie die neueste ZIP-Datei herunter, die die Java-API zum Lesen einer Excel-Datei in Java enthalten wird.

class="content-img-align-center">
class="center-image-wrapper"> Wie liest man Excel-Dateien in Java, Abbildung 1: Binary Distribution File herunterladen

class="content__image-caption">Apache POI JAR-Dateien herunterladen

Wenn Sie die ZIP-Datei herunterladen, müssen Sie sie entzippen und die folgenden JAR-Dateien zum Klassenpfad Ihres Projekts hinzufügen. Dies wird unten unter Lesen aus einer Excel-Datei erklärt.

class="content-img-align-center">
class="center-image-wrapper"> Wie liest man Excel-Dateien in Java, Abbildung 2: JAR-Dateien

class="content__image-caption">Fügen Sie die Apache POI Jar-Dateien zum Java-Klassenpfad hinzu

Hinweis: Kopieren Sie auch die Dateien aus lib und ooxml-lib zusammen mit den anderen Dateien.

Klassen und Schnittstellen in POI

Folgende Klassen für die Dateiformate XLS und XLSX, die verwendet werden können:

class="content-img-align-center">
class="center-image-wrapper"> Wie liest man Excel-Dateien in Java, Abbildung 3: Apache POI Klassen

class="content__image-caption">Apache POI Klassen

Folgendes ist eine Liste unterschiedlicher Java-Schnittstellen und Klassen in POI zum Lesen von XLS und XLSX-Dateien in Java:

Das Workbook-Interface wird von den Klassen HSSFWorkbook und XSSFWorkbook implementiert:

  • HSSFWorkbook: Dies ist eine Klassenrepräsentation der XLS-Datei.
  • XSSFWorkbook: Dies ist eine Klassenrepräsentation der XLSX-Datei.

Das Sheet-Interface wird von den Klassen HSSFSheet und XSSFSheet implementiert:

  • HSSFSheet: Dies ist eine Klasse, die ein Blatt in einer XLS-Datei darstellt.
  • XSSFSheet: Dies ist eine Klasse, die ein Blatt in einer XLSX-Datei darstellt.

Das Row-Interface wird von den Klassen HSSFRow und XSSFRow implementiert:

  • HSSFRow: Dies ist eine Klasse, die eine Zeile im Blatt einer XLS-Datei darstellt.
  • XSSFRow: Dies ist eine Klasse, die eine Zeile im Blatt einer XLSX-Datei darstellt.

Das Cell-Interface wird von den Klassen HSSFCell und XSSFCell implementiert:

  • HSSFCell: Dies ist eine Klasse, die eine Zelle in einer Zeile einer XLS-Datei darstellt.
  • XSSFCell: Dies ist eine Klasse, die eine Zelle in einer Zeile einer XLSX-Datei darstellt.

Lesen aus einer Excel-Datei

Für unser Beispiel werden wir die folgende Excel-Datei in Java lesen:

class="content-img-align-center">
class="center-image-wrapper"> Wie liest man Excel-Dateien in Java, Abbildung 4: Die zu lesende Excel-Datei

class="content__image-caption">Die zu lesende Excel-Datei

Schritte, um Excel-Dateien in Java zu lesen

  1. Erstellen Sie ein Java-Projekt mit einer beliebigen Java-IDE. Wir werden Netbeans für dieses Projekt verwenden.
  2. Erstellen Sie als Nächstes einen lib-Ordner im Projekt.
  3. Fügen Sie dann die heruntergeladenen JAR-Dateien in den im vorherigen Schritt erstellten lib-Ordner ein.
  4. Setzen Sie den Class-Path, indem Sie mit der rechten Maustaste auf den Projektordner klicken > Build Path > Add External JARs-Dateien > alle obigen JAR-Dateien auswählen > Anwenden und schließen.
  5. Nun erstellen wir eine Klassendatei mit dem Namen ReadExcelFileDemo.
  6. Erstellen Sie eine Excel-Datei mit dem Namen "studentdata.xls" und schreiben Sie die obigen Daten oder beliebige Daten hinein.

Nachfolgend ein Code-Beispiel zum Lesen von Excel-Dateien in Java:

import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.FormulaEvaluator;  
import org.apache.poi.ss.usermodel.Row;  

public class ReadExcelFileDemo  {  
    public static void main(String[] args) throws IOException {  
        // Obtain input bytes from a file  
        FileInputStream fis = new FileInputStream(new File("C:\\demo\\studentdata.xls"));  

        // Creating workbook instance that refers to .xls file  
        HSSFWorkbook wb = new HSSFWorkbook(fis);   

        // Creating a Sheet object to retrieve the object  
        HSSFSheet sheet = wb.getSheetAt(0);  

        // Evaluating cell type   
        FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();  
        for (Row row : sheet) {  
            for (Cell cell : row) {
                switch (formulaEvaluator.evaluateInCell(cell).getCellType()) {  
                    case NUMERIC: // Field that represents numeric cell type  
                        // Getting the value of the cell as a number  
                        System.out.print(cell.getNumericCellValue() + "\t\t");   
                        break;  
                    case STRING: // Field that represents string cell type  
                        // Getting the value of the cell as a string  
                        System.out.print(cell.getStringCellValue() + "\t\t");  
                        break;
                }
            }
            System.out.println();  
        }

        // Closing the workbook to free resources
        wb.close();
    }
}
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.FormulaEvaluator;  
import org.apache.poi.ss.usermodel.Row;  

public class ReadExcelFileDemo  {  
    public static void main(String[] args) throws IOException {  
        // Obtain input bytes from a file  
        FileInputStream fis = new FileInputStream(new File("C:\\demo\\studentdata.xls"));  

        // Creating workbook instance that refers to .xls file  
        HSSFWorkbook wb = new HSSFWorkbook(fis);   

        // Creating a Sheet object to retrieve the object  
        HSSFSheet sheet = wb.getSheetAt(0);  

        // Evaluating cell type   
        FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();  
        for (Row row : sheet) {  
            for (Cell cell : row) {
                switch (formulaEvaluator.evaluateInCell(cell).getCellType()) {  
                    case NUMERIC: // Field that represents numeric cell type  
                        // Getting the value of the cell as a number  
                        System.out.print(cell.getNumericCellValue() + "\t\t");   
                        break;  
                    case STRING: // Field that represents string cell type  
                        // Getting the value of the cell as a string  
                        System.out.print(cell.getStringCellValue() + "\t\t");  
                        break;
                }
            }
            System.out.println();  
        }

        // Closing the workbook to free resources
        wb.close();
    }
}
JAVA

Ausgabe:

Id    Names
1     Zeeshan
2     Shoaib
3     Umar
4     Rizwan
5     Ahsan
Id    Names
1     Zeeshan
2     Shoaib
3     Umar
4     Rizwan
5     Ahsan
SHELL

Die Schritte sind dieselben für das Lesen von XLSX-Dateien, abgesehen von den beiden folgenden Hauptpunkten:

  • Erstens, ändern Sie das Dateiformat in .xlsx. Die gleiche Datei "studentdata" kann verwendet werden, aber mit der .xlsx-Erweiterung.
  • Zweitens gibt es einen Unterschied in der Art, wie wir Java Apache POI importieren. Der Code sieht wie folgt aus:
import java.io.File;  
import java.io.FileInputStream;  
import java.util.Iterator;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.Row;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  

public class XLSXReaderExample  {

    public static void main(String[] args) {  
        try {  
            File file = new File("C:\\demo\\studentdata.xlsx");  
            FileInputStream fis = new FileInputStream(file);  

            // Creating Workbook instance that refers to .xlsx file  
            XSSFWorkbook wb = new XSSFWorkbook(fis);   
            XSSFSheet sheet = wb.getSheetAt(0); 

            // Iterating over rows using iterator
            Iterator<Row> itr = sheet.iterator();
            while (itr.hasNext()) {  
                Row row = itr.next();  

                // Iterating over each column in a row
                Iterator<Cell> cellIterator = row.cellIterator();   
                while (cellIterator.hasNext()) {  
                    Cell cell = cellIterator.next();  
                    switch (cell.getCellType()) {  
                        case NUMERIC: // Field that represents numeric cell type  
                            // Getting the value of the cell as a number  
                            System.out.print(cell.getNumericCellValue() + "\t\t");   
                            break;
                        case STRING: // Field that represents string cell type  
                            // Getting the value of the cell as a string  
                            System.out.print(cell.getStringCellValue() + "\t\t");  
                            break;
                    }
                }
                System.out.println("");  
            }  

            // Closing the workbook to free resources
            wb.close();
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    }
}
import java.io.File;  
import java.io.FileInputStream;  
import java.util.Iterator;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.Row;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  

public class XLSXReaderExample  {

    public static void main(String[] args) {  
        try {  
            File file = new File("C:\\demo\\studentdata.xlsx");  
            FileInputStream fis = new FileInputStream(file);  

            // Creating Workbook instance that refers to .xlsx file  
            XSSFWorkbook wb = new XSSFWorkbook(fis);   
            XSSFSheet sheet = wb.getSheetAt(0); 

            // Iterating over rows using iterator
            Iterator<Row> itr = sheet.iterator();
            while (itr.hasNext()) {  
                Row row = itr.next();  

                // Iterating over each column in a row
                Iterator<Cell> cellIterator = row.cellIterator();   
                while (cellIterator.hasNext()) {  
                    Cell cell = cellIterator.next();  
                    switch (cell.getCellType()) {  
                        case NUMERIC: // Field that represents numeric cell type  
                            // Getting the value of the cell as a number  
                            System.out.print(cell.getNumericCellValue() + "\t\t");   
                            break;
                        case STRING: // Field that represents string cell type  
                            // Getting the value of the cell as a string  
                            System.out.print(cell.getStringCellValue() + "\t\t");  
                            break;
                    }
                }
                System.out.println("");  
            }  

            // Closing the workbook to free resources
            wb.close();
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    }
}
JAVA

Ausgabe:

Id    Names
1     Zeeshan
2     Shoaib
3     Umar
4     Rizwan
5     Ahsan
Id    Names
1     Zeeshan
2     Shoaib
3     Umar
4     Rizwan
5     Ahsan
SHELL

Die IronXL C# Bibliothek

IronXL ist eine eigenständige .NET-Bibliothek, die das Lesen und Bearbeiten von Microsoft Excel-Dokumenten mit C# erleichtert. Es erfordert weder, dass Microsoft Excel installiert ist, noch ist es von Interop abhängig.

Mit IronXL können Entwickler alle Berechnungen im Zusammenhang mit Excel mühelos durchführen, indem sie einfach einige wenige Codezeilen schreiben und mit schneller Leistung. Dies könnte für Aufgaben wie das Hinzufügen von zwei Zellen, das Berechnen der Gesamtsumme einer Spalte, das Hinzufügen einer gesamten Spalte zu einer Excel-Tabelle, das Hinzufügen einer gesamten Zeile zu einer Excel-Tabelle, ein- und mehrreihige Spaltensummen oder viele andere Aufgaben sein, die durch IronXL's hilfreiche Funktionen erleichtert werden.

IronXL unterstützt vollständig das .NET Framework, .NET Core, Mobile, Xamarin, Azure Linux und macOS.

IronXL-Feature-Set

  • Laden, lesen und bearbeiten von Daten aus XLS/XLSX/CSV/TSV.
  • Speichern und Exportieren in XLS/XLSX/CSV/TSV/JSON.
  • System.Data Objekte — Arbeiten mit Excel-Tabellen als System.Data.DataSet und System.Data.DataTable-Objekte.
  • Formeln — arbeitet mit Excel-Formeln.
  • Bereiche — Die Syntax ["A1:B10"] ist einfach zu verwenden.
  • Sortieren — Zeilen, Spalten und Bereiche sortieren.
  • Gestaltung — Visuelle Stile, Schriftart und -größe, Hintergrundmuster, Rahmen, Ausrichtung und Zahlenformate.

Nachfolgend ein Code-Beispiel zum Lesen einer Excel-Datei in C# mit IronXL:

using IronXL;
using System.Linq;

public class ExcelReaderExample
{
    public static void Main(string[] args)
    {
        // Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
        WorkBook workbook = WorkBook.Load("test.xlsx");
        WorkSheet sheet = workbook.WorkSheets.First();

        // Select cells easily in Excel notation and return the calculated value
        int cellValue = sheet["A2"].IntValue;

        // Read from Ranges of cells elegantly
        foreach (var cell in sheet["A2:A10"]) {
            Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
        }
    }
}
using IronXL;
using System.Linq;

public class ExcelReaderExample
{
    public static void Main(string[] args)
    {
        // Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
        WorkBook workbook = WorkBook.Load("test.xlsx");
        WorkSheet sheet = workbook.WorkSheets.First();

        // Select cells easily in Excel notation and return the calculated value
        int cellValue = sheet["A2"].IntValue;

        // Read from Ranges of cells elegantly
        foreach (var cell in sheet["A2:A10"]) {
            Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
        }
    }
}
Imports IronXL
Imports System.Linq

Public Class ExcelReaderExample
	Public Shared Sub Main(ByVal args() As String)
		' Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
		Dim workbook As WorkBook = WorkBook.Load("test.xlsx")
		Dim sheet As WorkSheet = workbook.WorkSheets.First()

		' Select cells easily in Excel notation and return the calculated value
		Dim cellValue As Integer = sheet("A2").IntValue

		' Read from Ranges of cells elegantly
		For Each cell In sheet("A2:A10")
			Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
		Next cell
	End Sub
End Class
$vbLabelText   $csharpLabel

Die Arbeit mit IronXL erleichtert die Arbeit eines Entwicklers erheblich. Sein einfacher und benutzerfreundlicher Code macht Software weniger anfällig für Fehler beim Arbeiten mit Excel-Dateien.

Laden Sie IronXL herunter und verwenden Sie es noch heute mit Ihren Projekten.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen