Lire la valeur de la cellule Excel plutôt que la formule avec Apache POI

1. Introduction

Lors de la lecture d'un fichier Excel en Java, nous souhaitons généralement lire les valeurs des cellules pour effectuer un calcul ou générer un rapport. Cependant, nous pouvons rencontrer une ou plusieurs cellules contenant des formules plutôt que des valeurs de données brutes. Alors, comment obtenir les valeurs de données réelles de ces cellules?

Dans ce didacticiel, nous allons examiner différentes façons de lire les valeurs de cellule Excel - plutôt que la formule qui calcule les valeurs de cellule - avec la bibliothèque Apache POI Java.

Il existe deux façons de résoudre ce problème:

  • Récupérer la dernière valeur mise en cache pour la cellule
  • Évaluez la formule au moment de l'exécution pour obtenir la valeur de la cellule

2. Dépendance de Maven

Nous devons ajouter la dépendance suivante dans notre fichier pom.xml pour Apache POI:

 org.apache.poi poi-ooxml 4.1.1 

La dernière version de poi-ooxml peut être téléchargée à partir de Maven Central.

3. Récupérez la dernière valeur mise en cache

Excel stocke deux objets pour la cellule lorsqu'une formule calcule sa valeur. L'une est la formule elle-même et la seconde est la valeur mise en cache. La valeur mise en cache contient la dernière valeur évaluée par la formule .

L'idée ici est donc que nous pouvons récupérer la dernière valeur mise en cache et la considérer comme une valeur de cellule. Il n'est pas toujours vrai que la dernière valeur mise en cache soit la valeur de cellule correcte. Cependant, lorsque nous travaillons avec un fichier Excel enregistré et qu'il n'y a aucune modification récente du fichier, la dernière valeur mise en cache doit être la valeur de la cellule.

Voyons comment récupérer la dernière valeur mise en cache pour une cellule:

FileInputStream inputStream = new FileInputStream(new File("temp.xlsx")); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); CellAddress cellAddress = new CellAddress("C2"); Row row = sheet.getRow(cellAddress.getRow()); Cell cell = row.getCell(cellAddress.getColumn()); if (cell.getCellType() == CellType.FORMULA) { switch (cell.getCachedFormulaResultType()) { case BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; case NUMERIC: System.out.println(cell.getNumericCellValue()); break; case STRING: System.out.println(cell.getRichStringCellValue()); break; } }

4. Évaluez la formule pour obtenir la valeur de la cellule

Apache POI fournit une classe FormulaEvaluator , qui nous permet de calculer les résultats des formules dans des feuilles Excel.

Ainsi, nous pouvons utiliser FormulaEvaluator pour calculer directement la valeur de la cellule au moment de l'exécution. La classe FormulaEvaluator fournit une méthode appelée evaluFormulaCell , qui évalue la valeur de cellule pour l' objet Cell donné et renvoie un objet CellType , qui représente le type de données de la valeur de cellule.

Voyons cette approche en action:

// existing Workbook setup FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); // existing Sheet, Row, and Cell setup if (cell.getCellType() == CellType.FORMULA) { switch (evaluator.evaluateFormulaCell(cell)) { case BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; case NUMERIC: System.out.println(cell.getNumericCellValue()); break; case STRING: System.out.println(cell.getStringCellValue()); break; } } 

5. Quelle approche choisir

La différence simple entre les deux approches ici est que la première méthode utilise la dernière valeur mise en cache et la deuxième méthode évalue la formule au moment de l'exécution.

Si nous travaillons avec un fichier Excel qui est déjà enregistré et que nous n'allons pas apporter de modifications à cette feuille de calcul au moment de l'exécution, l'approche de la valeur mise en cache est meilleure car nous n'avons pas à évaluer la formule.

Cependant, si nous savons que nous allons apporter des modifications fréquentes au moment de l'exécution, il est préférable d'évaluer la formule au moment de l'exécution pour récupérer la valeur de la cellule.

6. Conclusion

Dans cet article rapide, nous avons vu deux façons d'obtenir la valeur d'une cellule Excel plutôt que la formule qui la calcule.

Le code source complet de cet article est disponible à l'adresse over sur GitHub.