如何使用Apache POI在单元格中设置公式?
我目前正在使用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.setCellType(Cell.CELL_TYPE_FORMULA); cell.setCellFormula("SUM(C70:C76)");
Apache POI不支持用户定义的函数。
从文档 :
请注意,不支持用户定义的函数,并且不太可能很快完成…至少,直到Java中有VB实现!
不推荐使用Cell Constants,将从4.0版而不是Cell Use中删除
CellType.FORMULA
String formula= "SUM(B4:B20)"; cell.setCellType(CellType.FORMULA); cell.setCellFormula(formula);
您可以使用它来评估工作簿中的公式:
// 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})"
希望有所帮助。