Bonjour,

j'ai un souci avec l'évaluateur de formules de POI 3.0.2
C'est ok pour certaines formules "simples" mais pas pour toutes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
HSSFWorkbook classeur = // ...
int n_feuille = // ...
int row = // ...
short colonne = // ...
HSSFSheet feuille = classeur.getSheetAt(n_feuille);
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(feuille, classeur);
Pour une somme, ça roule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
	System.out.println("[START]");
HSSFCell b3 = feuille.getRow(2).getCell((short)1);
HSSFCell b4 = feuille.getRow(3).getCell((short)1);
HSSFCell b5 = feuille.getRow(4).getCell((short)1);
	System.out.println("B5 = " + b5.getCellFormula() + " = " + b5.getNumericCellValue());
	System.out.println("[MàJ]");
b3.setCellValue(11.0);
b4.setCellValue(22.0);
evaluator.setCurrentRow(feuille.getRow(4));
evaluator.evaluateFormulaCell(b5);
	System.out.println("B3 = " + b3.getNumericCellValue());
	System.out.println("B4 = " + b4.getNumericCellValue());
	System.out.println("--> B5 = " + b5.getNumericCellValue() + "\n");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
[START]
B5 = B4+B3 = 10.0
[MàJ]
B3 = 11.0
B4 = 22.0
--> B5 = 33.0
Mais sinon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
HSSFRow ligne = feuille.getRow(row);
HSSFCell cellule = ligne.getCell(colonne);
	System.out.println("cellule = " + cellule.getCellFormula());
evaluator.setCurrentRow(ligne);
evaluator.evaluateFormulaCell(cellule);             /**** (Azerty.java:161) ****/
	System.out.println("cellule = " + cellule.getNumericCellValue());		
// ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
cellule = VLOOKUP(E5,I9:J20,2, )
java.util.EmptyStackException
	at java.util.Stack.peek(Stack.java:79)
	at java.util.Stack.pop(Stack.java:61)
	at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateCell(HSSFFormulaEvaluator.java:386)
	at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.internalEvaluate(HSSFFormulaEvaluator.java:338)
	at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateFormulaCell(HSSFFormulaEvaluator.java:183)
	at Azerty.evalCellule(Azerty.java:161)
	at Azerty.main(Azerty.java:45)
Exception in thread "main"
Y-a-t'il un souci avec la traduction des formules (VLOOKUP = RECHERCHEV) ?
Je sèche là ...

Si vous avez des pistes, merci !


Captain Mich