Przejdź do treści stopki
NARZęDZIA EXCEL

Jak odczytać plik Excel w Javie (samouczek)

Czym jest Excel?

Skoroszyt Microsoft Excel to oprogramowanie oparte na arkuszach kalkulacyjnych, które pozwala użytkownikom efektywnie organizować i przechowywać dane. Przechowuje i porządkuje dane w formie tabelarycznej, tj. przy użyciu wierszy i kolumn. Komórka w arkuszu kalkulacyjnym Excel to pole zawierające dane, które można modyfikować za pomocą różnych stylów, formatowania i formuł.

Jak odczytywać pliki Excel w Javie?

Odczytywanie pliku Excel może być czasami skomplikówane. Odczytywanie plików Excel w Javie różni się nieco od odczytywania plików WORD w Javie ze względu na komórki programu Excel. JDK nie udostępnia bezpośredniego interfejsu API do odczytu lub zapisu dokumentów Microsoft Excel. Zamiast tego musimy polegać na bibliotece zewnętrznej Apache POI.

Biblioteka Apache POI

POI to skrót od "Poor Obfuscation Implementation" (słaba implementacja zaciemniania kodu). Apache POI to biblioteka Java typu open source przeznaczona do odczytu i zapisu dokumentów Microsoft. Oferuje sposób na tworzenie i manipulowanie różnymi formatami plików opartymi na pakiecie Microsoft Office. Korzystając z Apache POI, powinno się móc tworzyć, modyfikować oraz wyświetlać/odczytywać operacje na szeregu formatów plików Microsoft Office.

Pobierz i zainstaluj bibliotekę Apache POI

Na początek pobierzemy najnowszą wersję plików JAR POI. Przejdź do strony http://poi.apache.org/download.html i pobierz najnowszy plik ZIP, który zawiera interfejs API Java do odczytu plików Excel w języku Java.

How to Read Excel Files in Java, Figure 1: Download Binary Distribution File

Pobierz pliki JAR Apache POI

Po pobraniu pliku ZIP należy go rozpakować i dodać następujące pliki JAR do ścieżki klasy projektu. Zostało to wyjaśnione w sekcji Odczytywanie z pliku Excel poniżej.

How to Read Excel Files in Java, Figure 2: JAR Files

Dodaj pliki jar Apache POI do ścieżki klasy Java

Uwaga: Skopiuj również pliki z lib i ooxml-lib wraz z pozostałymi plikami.

Klasy i interfejsy w POI

Poniżej przedstawiono klasy obsługujące formaty plików XLS i XLSX, z których można korzystać:

How to Read Excel Files in Java, Figure 3: Klasy Apache POI

Klasy Apache POI

Poniżej znajduje się lista różnych interfejsów i klas Java w POI służących do odczytu plików XLS i XLSX w Javie:

Interfejs Workbook jest zaimplementowany przez klasy HSSFWorkbook i XSSFWorkbook:

  • HSSFWorkbook: Jest to reprezentacja klasy pliku XLS.
  • XSSFWorkbook: Jest to reprezentacja klasy pliku XLSX.

Interfejs Sheet jest zaimplementowany przez klasy HSSFSheet i XSSFSheet:

  • HSSFSheet: Jest to klasa reprezentująca arkusz w pliku XLS.
  • XSSFSheet: Jest to klasa reprezentująca arkusz w pliku XLSX.

Interfejs Row jest zaimplementowany przez klasy HSSFRow i XSSFRow:

  • HSSFRow: Jest to klasa reprezentująca wiersz w arkuszu pliku XLS.
  • XSSFRow: Jest to klasa reprezentująca wiersz w arkuszu pliku XLSX.

Interfejs Cell jest zaimplementowany przez klasy HSSFCell i XSSFCell:

  • HSSFCell: Jest to klasa reprezentująca komórkę w wierszu pliku XLS.
  • XSSFCell: Jest to klasa reprezentująca komórkę w wierszu pliku XLSX.

Odczytywanie z pliku Excel

W naszym przykładzie odczytamy następujący plik Excel w Javie:

How to Read Excel Files in Java, Figure 4: The Excel File to be Read

Plik Excel, który zostanie odczytany

Kroki odczytu pliku Excel w Javie

  1. Utwórz projekt Java przy użyciu dowolnego środowiska IDE dla języka Java. W tym projekcie będziemy korzystać z Netbeans.
  2. Następnie utwórz folder lib w projekcie.
  3. Następnie dodaj pobrane pliki JAR do folderu lib utworzonego w poprzednim kroku.
  4. Ustaw Class-Path, klikając prawym przyciskiem myszy folder Projekt > Ścieżka kompilacji > Dodaj pliki JAR zewnętrzne > zaznacz wszystkie powyższe pliki JAR > Zastosuj i zamknij.
  5. Teraz utwórzmy plik klasy o nazwie ReadExcelFileDemo.
  6. Utwórz plik Excel o nazwie "studentdata.xls" i wpisz do niego powyższe dane lub dowolne inne dane.

Poniżej znajduje się przykładowy kod do odczytu plików Excel w Javie:

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

Wynik:

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

Kroki są takie same jak w przypadku odczytu plików XLSX, z wyjątkiem dwóch głównych punktów poniżej:

  • Po pierwsze, zmień format pliku na .xlsx. Można użyć tego samego pliku "studentdata", ale z rozszerzeniem .xlsx.
  • Po drugie, istnieje różnica w sposobie importowania biblioteki Java Apache POI. Kod wygląda następująco:
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

Wynik:

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

Biblioteka IronXL C

IronXL to samodzielna biblioteka .NET, która ułatwia odczytywanie i edycję dokumentów Microsoft Excel za pomocą języka C#. Nie wymaga to zainstalowania programu Microsoft Excel ani nie jest uzależnione od Interop.

Korzystając z IronXL, programiści mogą bez wysiłku wykonywać wszystkie obliczenia związane z Excelem, pisząc zaledwie kilka linii kodu i ciesząc się wysoką wydajnością. Może to dotyczyć takich zadań, jak dodawanie dwóch komórek, obliczanie sumy całkowitej kolumny, dodawanie całej kolumny do tabeli Excel, dodawanie całego wiersza do tabeli Excel, sumowanie kolumn w jednym lub wielu wierszach oraz wiele innych zadań, które są łatwe do wykonania dzięki przydatnym funkcjom IronXL.

IronXL w pełni obsługuje platformy .NET Framework, .NET Core, Mobile, Xamarin, Azure Linux oraz macOS.

Zestaw funkcji IronXL

  • Wczytuj, przeglądaj i edytuj dane z plików XLS/XLSX/CSV/TSV.
  • Zapisywanie i eksportowanie do formatów XLS/XLSX/CSV/TSV/JSON.
  • System.Data Obiekty — praca z arkuszami kalkulacyjnymi Excel jako obiekty System.Data.DataSet i System.Data.DataTable.
  • Formuły — współpracuje z formułami programu Excel.
  • Zakresy — składnia ["A1:B10"] jest łatwa w użyciu.
  • Sortowanie — sortowanie wierszy, kolumn i zakresów.
  • Stylizacja — style wizualne, czcionka i rozmiar czcionki, wzór tła, obramowanie, wyrównanie i formaty liczb.

Poniżej znajduje się przykład kodu odczytu pliku Excel w języku C# przy użyciu biblioteki 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

Praca z IronXL znacznie ułatwia pracę programisty. Prosty i łatwy w użyciu kod sprawia, że oprogramowanie jest mniej podatne na błędy podczas pracy z plikami Excel.

Pobierz IronXL i zacznij korzystać z niego w swoich projektach już dziś.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie