java - Apache poi 中的数组公式

标签 java excel apache-poi

我有一个 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/

相关文章:

java - Maven 存储库中的 ChromeDriver 未在测试脚本中执行

css - 多个 css 类不起作用

java - 为什么这个算法这么慢?

java - ECLIPSE:java.lang.NoClassDefFoundError:无法初始化类 ****

java - 从日期中减去日期偏移量

vba - 具有 IF 公式的列中的第一个空白 ("") 单元格

excel - 拖动时更新公式行和列

vba - 当公式随着行数的增加而不断变化时,如何将公式插入到单元格中?

linux - BIRT .xlsx 文件在 Linux 环境中损坏,而在 Windows 环境中运行良好

java - 如何使用 apache POI 将带有形状的工作表页面转换为图片或 HTML?