Apache POI - Lire et écrire un fichier Excel en Java
Dans cet article, nous discuterons de la lecture et de l'écriture d'un fichier Excel en utilisantApache POI
1. Définitions de base pour la bibliothèque de points d'intérêt Apache
Cette section décrit brièvement les classes de base utilisées pendant la lecture et l'écriture d'Excel.
-
HSSF
est préfixé avant le nom de la classe pour indiquer les opérations liées à un fichier Microsoft Excel 2003. -
XSSF
est préfixé avant le nom de la classe pour indiquer les opérations liées à un fichier Microsoft Excel 2007 ou version ultérieure. -
XSSFWorkbook
etHSSFWorkbook
sont des classes qui agissent comme un classeur Excel -
HSSFSheet
etXSSFSheet
sont des classes qui agissent comme une feuille de calcul Excel -
Row
définit une ligne Excel -
Cell
définit une cellule Excel adressée en référence à une ligne.
2. Télécharger Apache POI
La bibliothèque Apache POI est facilement disponible en utilisant les dépendances Maven.
pom.xml
org.apache.poi poi-ooxml 3.15
3. Bibliothèque de POI Apache - Ecrire un Excel simple
Le code ci-dessous montre comment écrire un fichier Excel simple à l'aide des bibliothèques de POI Apache. Le code utilise un tableau de données à 2 dimensions pour contenir les données. Les données sont écrites dans un objetXSSFWorkbook
. XSSFSheet
est la feuille de travail sur laquelle vous travaillez. Le code est le suivant:
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"); } }
En exécutant le code ci-dessus, vous obtenez ci-dessous Excel en tant que sortie.
4. Bibliothèque de POI Apache - Lire un fichier Excel
Le code ci-dessous explique comment lire un fichier Excel à l'aide des bibliothèques de points d'intérêt Apache. La fonctiongetCellTypeEnum
est obsolète dans la version 3.15 et sera renommée engetCellType
à partir de la version 4.0.
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(); } } } |
En exécutant le code ci-dessus, vous obtenez la sortie ci-dessous.
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--