我目前正在使用Java的Apache POI来设置单元格中的公式。
但是在我运行程序并打开已创建和处理过的Excel文件后,包含公式的单元格会将公式作为字符串显示,而不是公式应该返回的值。
我目前正在使用Java的Apache POI来设置单元格中的公式。
但是在我运行程序并打开已创建和处理过的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版本中移除。请使用下列方法代替:
CellType.FORMULA
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);
=DATEDIF(A2,NOW(),"y")
。使用上述方法将会对任何自定义公式抛出异常。 - TimCell.setCellType(CellType)
也已经被弃用(将在Apache POI 5.0中删除)。使用显式的Cell.setCellFormula(String)
应该就足够了。 - Fenix以下代码对我很有效,希望这能对其他人有所帮助。
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)"
直接不能起作用,因为表格是动态生成的。问题出在单元格引用上。 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的列。
而i代表上述列中的一个数字。
L++仅仅是一个递增的计数器。