[POI] 数式の再計算 [Java][Excel]

Apache POI

Apache POI は式の値を自動で再計算してはくれません。

ネットで調べてみると大概は HSSF / XSSF 別に記載されていましたので、それよりスマートな書き方をここに記しておきます。

Apache POI で式を再計算するには次のようにします。

workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();

このように書けば HSSF か XSSF かに依存しないで済みます。
".createFormulaEvaluator()" の後ろを変えればセルごとの再計算も行えます。

ただし注意しなければならないことがあります。
それは全ての Excel 関数をサポートしているわけではないということです。もちろんVBA(マクロ)で定義した式は再計算できません。
そういった場合は、Excelファイル内の式を書き換えるか、Excel 側に計算させます。

もし Excel 側に再計算をさせるには次のようにします。

sheet.setForceFormulaRecalculation(true);

このフラグが立っているファイルを Excel で開くと同時に再計算が行われます。
この方法だと、開く人が中身を見たいだけであっても閉じる際に保存するか否かを聞かれます。更に、保存されるまではファイル内の値が書き変わりませんので、そのまま Java プログラム等で開くと、再計算前の値で処理されてしまう恐れがありますので、おすすめできません。

コメント