Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApachePOI在单元格中设置公式?_Java_Apache Poi - Fatal编程技术网

Java 如何使用ApachePOI在单元格中设置公式?

Java 如何使用ApachePOI在单元格中设置公式?,java,apache-poi,Java,Apache Poi,我目前正在使用for Java在单元格中设置公式 但是,在我运行程序并打开我创建和处理的Excel文件后,带有公式的单元格将公式作为字符串包含,而不是公式应该返回的值。HSSFCell对象具有方法。setCellType和。setCellFormula需要这样调用: // "cell" object previously created or looked up String strFormula= "SUM(A1:A10)"; cell.setCellType(HSSFCell.CELL_TY

我目前正在使用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);

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

从:

请注意,用户定义的函数不受支持,也不太可能 很快就可以完成。。。至少,直到有了VB 用Java实现


下面的代码对我来说很好,希望对其他人有用

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

单元格常量已弃用,将从版本4.0中删除 而不是细胞的使用

细胞型公式

String formula=“SUM(B4:B20)”;
cell.setCellType(CellType.FORMULA);
cell.setcell公式(公式)

更新 setCellType():基于@fenix注释。此方法已弃用,将在POI 5.0中删除。使用显式setCellFormula(字符串)、setCellValue(…)或setBlank()获得所需结果

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

我遇到了类似的问题,
“SUM(B4:B20)”
无法直接为我工作,因为工作表是动态生成的。问题在于单元格引用

基于和,我能够生成实际的公式。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})"

希望对您有所帮助。

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

        // Evaluate all formulas in the sheet, to update their value
    FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
    formulaEvaluator.evaluateAll();

这里有一个建议的方法:

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++只是一个增量计数器。

您使用的是setCellFormula()吗?是的。基本上,我的公式是用户定义的公式,excel不支持defualt。它是这样的:“=IQLink | yhoo!change”它所做的一切都是通过它的股票程序获得股票的当前价格。但关键是excel默认不支持该公式,这与此有关吗?如果您让excel手动重新计算所有公式(),会发生什么情况?当我进入excel并手动重新计算时,我不知道为什么poi不能做同样的事情。我不相信poi可以做任何公式计算。不,那不起作用。基本上,我使用的是excel默认不支持的自定义公式。用户定义的公式会有什么问题吗?我不这么认为,但我从未尝试过。我看没有理由不;它应该只在单元格中填充=strFormula,但可能还有其他作用。本文中使用的方法已被弃用@Jinu P C的答案将适用于更新的版本。如何根据行数和单元格数重写公式?我正在以编程方式生成电子表格,所以我不确定是否使用A、B、C术语。现在不推荐使用此答案。是否有任何方法可以向其中添加自定义公式?i、 e.
“=DATEDIF(A2,NOW(),\“y\”)
使用上述方法将对任何自定义公式引发异常。
Cell.setCellType(CellType)
也不推荐使用(将从Apache POI 5.0中删除)。使用显式的
Cell.setCellFormula(字符串)
就足够了。