Apache POI - Lesen und Schreiben von Excel-Dateien in Java
In diesem Artikel wird erläutert, wie Sie eine Excel-Datei mitApache POI lesen und schreiben
1. Grundlegende Definitionen für die Apache POI-Bibliothek
In diesem Abschnitt werden kurz die grundlegenden Klassen beschrieben, die beim Lesen und Schreiben in Excel verwendet werden.
-
HSSFwird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2003-Datei beziehen. -
XSSFwird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2007-Datei oder höher beziehen. -
XSSFWorkbookundHSSFWorkbooksind Klassen, die als Excel-Arbeitsmappe fungieren -
HSSFSheetundXSSFSheetsind Klassen, die als Excel-Arbeitsblatt fungieren -
Rowdefiniert eine Excel-Zeile -
Celldefiniert eine Excel-Zelle, die in Bezug auf eine Zeile adressiert ist.
2. Laden Sie den Apache POI herunter
Die Apache POI-Bibliothek ist mithilfe von Maven-Abhängigkeiten leicht verfügbar.
pom.xml
org.apache.poi poi-ooxml 3.15
3. Apache POI-Bibliothek - Schreiben eines einfachen Excel
Der folgende Code zeigt, wie eine einfache Excel-Datei mit Apache POI-Bibliotheken geschrieben wird. Der Code verwendet ein zweidimensionales Datenarray, um die Daten zu speichern. Die Daten werden in einXSSFWorkbook-Objekt geschrieben. XSSFSheet ist das Arbeitsblatt, an dem gearbeitet wird. Der Code ist wie folgt:
ApachePOIExcelWrite.java
package com.techfou;
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;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ApachePOIExcelWrite {
private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";
public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Datatypes in Java");
Object[][] datatypes = {
{"Datatype", "Type", "Size(in bytes)"},
{"int", "Primitive", 2},
{"float", "Primitive", 4},
{"double", "Primitive", 8},
{"char", "Primitive", 1},
{"String", "Non-Primitive", "No fixed size"}
};
int rowNum = 0;
System.out.println("Creating excel");
for (Object[] datatype : datatypes) {
Row row = sheet.createRow(rowNum++);
int colNum = 0;
for (Object field : datatype) {
Cell cell = row.createCell(colNum++);
if (field instanceof String) {
cell.setCellValue((String) field);
} else if (field instanceof Integer) {
cell.setCellValue((Integer) field);
}
}
}
try {
FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
workbook.write(outputStream);
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Done");
}
}
Wenn Sie den obigen Code ausführen, wird Excel als Ausgabe angezeigt.

4. Apache POI-Bibliothek - Lesen einer Excel-Datei
Der folgende Code erläutert das Lesen einer Excel-Datei mithilfe von Apache POI-Bibliotheken. Die FunktiongetCellTypeEnum ist in Version 3.15 veraltet und wird ab Version 4.0 ingetCellType umbenannt.
ApachePOIExcelRead.java
package com.techfou;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
public class ApachePOIExcelRead {
private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";
public static void main(String[] args) {
try {
FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
Workbook workbook = new XSSFWorkbook(excelFile);
Sheet datatypeSheet = workbook.getSheetAt(0);
Iterator iterator = datatypeSheet.iterator();
while (iterator.hasNext()) {
Row currentRow = iterator.next();
Iterator| cellIterator = currentRow.iterator();
while (cellIterator.hasNext()) {
Cell currentCell = cellIterator.next();
//getCellTypeEnum shown as deprecated for version 3.15
//getCellTypeEnum ill be renamed to getCellType starting from version 4.0
if (currentCell.getCellTypeEnum() == CellType.STRING) {
System.out.print(currentCell.getStringCellValue() + "--");
} else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
System.out.print(currentCell.getNumericCellValue() + "--");
}
}
System.out.println();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.
Datatype--Type--Size(in bytes)-- int--Primitive--2.0-- float--Primitive--4.0-- double--Primitive--8.0-- char--Primitive--1.0-- String--Non-Primitive--No fixed size--