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.
-
HSSF
wird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2003-Datei beziehen. -
XSSF
wird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2007-Datei oder höher beziehen. -
XSSFWorkbook
undHSSFWorkbook
sind Klassen, die als Excel-Arbeitsmappe fungieren -
HSSFSheet
undXSSFSheet
sind Klassen, die als Excel-Arbeitsblatt fungieren -
Row
definiert eine Excel-Zeile -
Cell
definiert 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); Iteratoriterator = 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--