Seit ein paar Tagen gibt es etwas neues von der POI API – Seit 20. Juni 2010 die Version POI 3.7 beta 1.
Die ersten Experimente haben hiermit perfekt funktioniert! J
Nachdem ich allerdings einen SVERWEIS (englisch : VLOOKUP) verwendet habe und ein abhängiges Feld per POI API neu berechnen lassen habe, ist folgender Fehler aufgetreten:
java.lang.RuntimeException: Unexpected eval type (org.apache.poi.hssf.record.formula.eval.MissingArgEval)
at org.apache.poi.hssf.record.formula.functions.LookupUtils.resolveRangeLookupArg(LookupUtils.java:422)
at org.apache.poi.hssf.record.formula.functions.Vlookup.evaluate(Vlookup.java:57)
at org.apache.poi.hssf.record.formula.functions.Var3or4ArgFunction.evaluate(Var3or4ArgFunction.java:36)
at org.apache.poi.ss.formula.OperationEvaluatorFactory.evaluate(OperationEvaluatorFactory.java:132)
…
Der Fehler ist an folgender Stelle aufgetreten:
...
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
HSSFRow row = sheet.getRow(7);
HSSFCell cell = row.getCell(1);
CellValue cellValue = evaluator.evaluate(cell);
...
Die Ursache hierfür ist, dass ich im Excelsheet die Formel mit dem SVERWEIS per Autocomplete erstellt habe. Der letzte Parameter des Befehls SVERWEIS „Bereich_Verweis“ wird dann mit WAHR bzw. FALSCH per Autocomplete gefüllt. Wenn man sich dann die Formel allerdings nochmal genauer anschaut, stellt man fest, dass der letzte Parameter bei WAHR einfach nicht geschrieben wird. Excel arbeitet mit einem Defaultwert.
Die POI API kommt hiermit aber nicht zurecht! Hier muss der Parameter Bereich_Verweis explizit gesetzt werden. Für WAHR muss hier eine 1 gesetzt werden.
Anschließend funktioniert die Berechnung auch wieder einwandfrei J