如何使用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})" 

希望有所帮助。