[POI] évaluation impossible d'une formule
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:
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:
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:
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:
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:
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à ... :evilred:
Si vous avez des pistes, merci !
Captain Mich