Frage

Ich versuche, POI XSSF zum Auswerten einiger Excel-Formeln zu verwenden. Die Werte müssen nicht gespeichert werden, und ich muss möglicherweise viele Formeln berechnen, daher versuche ich, alles in derselben Zelle auszuführen.

Das Problem ist, dass der Zellenwert bei der ersten eingegebenen Formel hängen zu bleiben scheint, selbst nachdem ich neu berechnet habe

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
XSSFCell formulaCell = row.createCell(6);
formulaCell.setCellFormula("Date(2011,10,6)");
CellValue cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

formulaCell.setCellFormula("Date(1911,3,4)");
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

Dies gibt 40822.0 aus 40822.0 (Excel-Äquivalent vom 06.10.2011) beide Male, anstatt die neue Formel neu zu bewerten.

War es hilfreich?

Lösung

Wenn Sie den formulaEvaluator mehrmals verwenden, benötigen Sie diese Zeile zwischen den Verwendungen, oder es wird jedes Mal das gleiche Ergebnis verwendet.

formulaEvaluator.clearAllCachedResultValues()

Andere Tipps

Der FormulaEvaluator speichert die von der Zelle berechneten Werte zwischen, um die Verarbeitung zu beschleunigen.Wenn Sie nach dem Erstellen des Evaluators Zellaktualisierungen durchführen, müssen Sie dies mitteilen!

Weitere Informationen finden Sie in der FormulaEvaluator -DokumentationEinzelheiten.Versuchen Sie für Ihren Fall:

formulaCell.setCellFormula("Date(1911,3,4)");
evaluator.notifySetFormula(formulaCell);
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

Mit den folgenden Schritten können Sie Ihre Arbeit erledigen.Dies sind zwei Lösungen, von denen Sie eine beliebige Funktion verwenden können.Es wertet die gesamte Arbeitsmappe aus, sodass jede verwendete Formel ausgewertet wird.Hoffe das hilft.

1) evaluator.evaluateAll (); 2) XSSFFormulaEvaluator.evaluateAllFormulaCells (wb);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top