我有一个 Excel 工作表 (xslx),其中定义了一个数组公式 ( https://support.office.com/en-us/article/Guidelines-and-examples-of-array-formulas-7D94A64E-3FF3-4686-9372-ECFD5CAA57C7 )。 这就像 Excel 本身的魅力一样。 我使用 apache poi 以编程方式操作该 Excel 工作表中的某些值。在该操作之后,我想重新计算该数组公式的结果,但我不知道该怎么做。 使用“正常”公式,我按如下方式执行:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
XSSFRow row = sheet.getRow(i);
Cell cell = row.getCell(j);
evaluator.evaluateCell(cell);
double value = cell.getNumericValue();
使用数组公式有方法
void setCellArrayFormula(String formula, CellRangeAddress range)
在 XSSFCell 类中和
public CellRange<XSSFCell> setArrayFormula(String formula, CellRangeAddress range)
在 XSSFSheet 类中。
使用 cell.setCellArrayFormula("SUM(ABS(H2:H5))", new CellRangeAddress(2,5,7,7)); 等调用设置公式后;
我不知道如何获得该公式的结果(但我也不确定这是否是在 apache poi 中使用数组公式的正确方法。在 Excel 中我必须这样做 {=SUM (ABS(H2:H5))}
)
有人知道如何在apache poi中使用数组公式吗?谢谢!
最佳答案
当前版本的 Apache POI (3.17) 不支持这样的数组公式。 (我相信)Sheet.setArrayFormula()
的作用是将相同的公式应用于多个单元格以优化文件大小。
您想要的 POI 有时称为“表公式”,并且不受支持 ( https://poi.apache.org/spreadsheet/formula.html )。
不过,好消息是 POI 4.0 中将对这些类型的公式提供一些支持(不过目前仅限于矩阵类型运算,因此您的示例在当前的 nightly 中仍然不起作用)。为什么这是个好消息?因为这些部分已经开始到位,所有这些公式都将在某个时候得到支持。所以我认为它会发生(注意:我没有参与 POI 项目,我只是使用它,并且这个功能对我来说很重要)。
关于java - Apache poi 中的数组公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44775847/