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

时间:2016-02-08 20:51:57

标签: java selenium apache-poi xssf

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

公式如下:

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

我已经放置了公式(通过在多个单元格上运行循环),就像这样(工作表是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是Cell):

String cellValue = c.getStringCellValue();  

它总是返回" FAIL",就像它在将公式评估为非数组公式后返回结果一样。

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

{=IF(TRUE,TRUE,FALSE)}

令人惊讶的是它让我恢复正常。

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

1 个答案:

答案 0 :(得分:0)

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

  

尚不支持操作表公式(在Excel中,公式   看起来像“{= ...}”而不是“= ...”)

有关详细信息,请参阅here

所以我必须将我的数组公式转换为非数组公式。

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