如何使用Apache POI在单元格中设置公式?

时间:2010-02-26 03:02:40

标签: java apache-poi

我目前正在使用Apache POI for Java在单元格中设置公式。

但是在运行程序并打开我创建和处理的Excel文件后,具有公式的单元格将公式包含为字符串,而不是公式应返回的值。

7 个答案:

答案 0 :(得分:48)

HSSFCell对象包含您需要调用的方法.setCellType.setCellFormula

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

答案 1 :(得分:12)

以下代码对我来说很好,希望这对某人有用。

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

答案 2 :(得分:8)

不推荐使用Cell Constants,将从4.0版中删除 而不是细胞使用

  

CellType.FORMULA

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

答案 3 :(得分:7)

Apache POI不支持用户定义的函数。

来自documentation

  

请注意,不支持用户定义的功能,也不太可能   很快就会完成...至少,直到有一个VB   用Java实现!

答案 4 :(得分:4)

您可以使用它来评估工作簿中的公式:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            context.startForegroundService(new Intent(context, RunnerService.class));

        }
        else
        {
            context.startService(new Intent(context, RunnerService.class));

        }

答案 5 :(得分:1)

我遇到了类似的问题,"SUM(B4:B20)"对我来说不起作用,因为工作表是动态生成的。问题出在细胞参考上。

https://stackoverflow.com/a/2339262/2437655https://stackoverflow.com/a/33098060/2437655的基础上,我能够生成实际公式。 e.g。

 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})"

希望有所帮助。

答案 6 :(得分: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 ++只是一个增量计数器。