現在、 Apache POI for Javaを使用してセルに数式を設定しています。
しかし、プログラムを実行し、作成および処理したExcelファイルを開くと、数式のセルには、数式が返すはずの値ではなく、文字列として数式が含まれます。
HSSFCell
オブジェクトには、メソッド.setCellType
および.setCellFormula
があり、次のように呼び出す必要があります。
// "cell" object previously created or looked up
String strFormula= "SUM(A1:A10)";
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(strFormula);
セル定数は非推奨であり、Cell Useの代わりにバージョン4.0から削除されます
CellType.FORMULA
String formula= "SUM(B4:B20)";
cell.setCellType(CellType.FORMULA);
cell.setCellFormula(formula);
以下のコードは私のためにうまくいきました。これが誰かに役立つことを願っています。
cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(C70:C76)");
Apache POIはユーザー定義関数をサポートしていません。
ドキュメント から:
ユーザー定義関数はサポートされていないことに注意してください。また、JavaでVBの実装が行われるまで、少なくともすぐには実行されません。
これを使用して、ブック内の数式を評価できます。
// Evaluate all formulas in the sheet, to update their value
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
formulaEvaluator.evaluateAll();
私は同様の問題を抱えていましたが、シートが動的に生成されたため、"SUM(B4:B20)"
は直接機能しません。問題はセル参照にありました。
https://stackoverflow.com/a/2339262/2437655 および https://stackoverflow.com/a/33098060/2437655 に基づいて生成できました実際の式。例えば.
val totalProductQtyPerUserCell = userDetailsRow.createCell(products.size + 1)
totalProductQtyPerUserCell.cellType = HSSFCell.CELL_TYPE_FORMULA
totalProductQtyPerUserCell.cellFormula = "SUM(${CellReference.convertNumToColString(1)}${totalProductQtyPerUserCell.row.rowNum + 1}:${CellReference.convertNumToColString(products.size)}${totalProductQtyPerUserCell.row.rowNum + 1})"
お役に立てば幸いです。