4

POI XSSF を使用して、いくつかの Excel 数式を評価しようとしています。値を保存する必要はなく、多くの数式を計算する必要があるかもしれないので、すべて同じセルで実行しようとしています。

問題は、再計算した後でも、最初に入力した数式でセルの値が動かなくなっているように見えることです

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());

これは、新しい式に再評価する代わりに、40822.0 40822.0 (2011 年 10 月 6 日に相当する Excel) を両方とも出力します。

4

3 に答える 3

5

formulaEvaluator を複数回使用する場合は、使用の間にこの行が必要です。そうしないと、毎回同じ結果が使用されます。

formulaEvaluator.clearAllCachedResultValues()
于 2011-05-25T17:50:49.590 に答える
2

FormulaEvaluator は、セルの計算値をキャッシュして処理を高速化します。エバリュエーターを作成した後にセルの更新を実行する場合は、それを伝える必要があります!

詳細については、FormulaEvaluatorのドキュメントを参照してください。あなたの場合、試してください:

formulaCell.setCellFormula("Date(1911,3,4)");
evaluator.notifySetFormula(formulaCell);
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());
于 2011-05-01T08:02:20.910 に答える