[英]How to set formulas in cells using 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);
不推荐使用细胞常数,并将从 4.0 版中删除,而不是从细胞使用中删除
细胞类型公式
String formula= "SUM(B4:B20)";
cell.setCellType(CellType.FORMULA); cell.setCellFormula(formula);
setCellType() :基于@fenix 评论。 此方法已弃用,将在 POI 5.0 中删除。 使用显式 setCellFormula(String)、setCellValue(...) 或 setBlank() 来获得所需的结果。
String formula= "SUM(B4:B20)";
cell.setCellFormula(formula);
下面的代码对我来说很好用,希望这对某人有用。
cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(C70:C76)");
您可以使用它来评估工作簿中的公式:
// 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})"
希望有所帮助。
这是一种建议的方法:
Workbook workbook1 = new SXSSFWorkbook(-1);
Sheet newSheet = workbook1.createSheet("Valuations");
Row newRow = newSheet.createRow(i-1);
newRow.createCell(L++).setCellFormula("AVERAGE(" + "E" + i + ":" + "G" + i + ")");
其中 E 和 G 是 A1,B1,C1....E1...G1 之类的列
我在上面的列中代表一个数字。
L++ 只是一个增量计数器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.