从包含数组公式的单元格中获取值

Get value from cell containing array formula

我有 XSSFWorkbook,我已将 数组公式 放在两列中,我想从这些列中复制值并粘贴到其他列中。

公式如下所示:

{=IFERROR(INDEX(Sheet2!$A:$C,MATCH(1,(Sheet2!$A:$A=$A2)*(Sheet2!$C:$C=$D2),0),2),"FAIL")}

我已经像这样放置了公式(通过 运行 在多个单元格上循环)(sheet 是 XSSFSheet):

String formula = "AboveFormulaWithIterativeCell"  // (without {} and =)
String range = "XFC" + i;  // i is iterative row number
sheet.setArrayFormula(formula, CellRangeAddress.valueOf(range));

然后像这样评估公式(wb 是 XSSFWorkbook):

XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);

到目前为止一切正常。公式显示有效结果。

现在,如果我 运行 在这些单元格上循环并读取这样的值(c 是单元格):

String cellValue = c.getStringCellValue();  

它总是返回"FAIL",就像它返回计算公式为非数组公式后的结果。

所以我用这个公式尝试了同样的事情:

{=IF(TRUE,TRUE,FALSE)}

令人惊讶的是它返回 TRUE。

所以,我的问题是这个公式如何返回正确的结果而不是我的主要公式。

所以 Apache Poi 仍然不支持操作 table 公式(数组公式)。

Not yet supported Manipulating table formulas (In Excel, formulas that look like "{=...}" as opposed to "=...")

有关详细信息,请参阅 here

所以我不得不将数组公​​式转换为非数组公式。

注:
如果您只想显示结果,您仍然可以使用数组公式。
但是您无法从包含数组公式的单元格中获取值。