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.
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.
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ć:
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:
Plik Excel, który zostanie odczytany
Kroki odczytu pliku Excel w Javie
- Utwórz projekt Java przy użyciu dowolnego środowiska IDE dla języka Java. W tym projekcie będziemy korzystać z Netbeans.
- Następnie utwórz folder
libw projekcie. - Następnie dodaj pobrane pliki JAR do folderu
libutworzonego w poprzednim kroku. - 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. - Teraz utwórzmy plik klasy o nazwie ReadExcelFileDemo.
- 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();
}
}
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
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();
}
}
}
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
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.DataObiekty — praca z arkuszami kalkulacyjnymi Excel jako obiektySystem.Data.DataSetiSystem.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
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ś.




