web-dev-qa-db-ja.com

Apache POIを使用してセルに数式を設定する方法は?

現在、 Apache POI for Javaを使用してセルに数式を設定しています。

しかし、プログラムを実行し、作成および処理したExcelファイルを開くと、数式のセルには、数式が返すはずの値ではなく、文字列として数式が含まれます。

36
vamsi

HSSFCellオブジェクトには、メソッド.setCellTypeおよび.setCellFormulaがあり、次のように呼び出す必要があります。

// "cell" object previously created or looked up
String strFormula= "SUM(A1:A10)";
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(strFormula);
49
user257111

セル定数は非推奨であり、Cell Useの代わりにバージョン4.0から削除されます

CellType.FORMULA

String formula= "SUM(B4:B20)";
cell.setCellType(CellType.FORMULA);
cell.setCellFormula(formula);
12
Jinu P C

以下のコードは私のためにうまくいきました。これが誰かに役立つことを願っています。

cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(C70:C76)");
12
user1901203

Apache POIはユーザー定義関数をサポートしていません。

ドキュメント から:

ユーザー定義関数はサポートされていないことに注意してください。また、JavaでVBの実装が行われるまで、少なくともすぐには実行されません。

7
filsa

これを使用して、ブック内の数式を評価できます。

        // Evaluate all formulas in the sheet, to update their value
    FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
    formulaEvaluator.evaluateAll();
4
Diogo Vilela

私は同様の問題を抱えていましたが、シートが動的に生成されたため、"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})"

お役に立てば幸いです。

1
Killer