从包含数组公式的单元格中获取值
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。
所以我不得不将数组公式转换为非数组公式。
注:
如果您只想显示结果,您仍然可以使用数组公式。
但是您无法从包含数组公式的单元格中获取值。
我有 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。
所以我不得不将数组公式转换为非数组公式。
注:
如果您只想显示结果,您仍然可以使用数组公式。
但是您无法从包含数组公式的单元格中获取值。