Hello,
I am new here. I hope I'm not breaking any rules. I recently upgraded to
POI 5.1.0. Great stuff!
But unfortunately, I am getting some errors with functions with multiple
return types. I have an IF formula that either returns a result from an
INDEX formula or a boolean value (formula shown below). When debugging in
IntelliJ I can see that it is marked as an array formula.
*My formula:*
> =IF(AND(D5;D6>0);IFERROR(INDEX(K4:K13;D6;1);FALSE);FALSE)
>
As you can see, I'm using a check to see that the row index (D6) is not
zero. D5 is FALSE and D6 is 1 initially, so the formula should return
FALSE, but instead I get a #VALUE. It always returns #VALUE even if I
change the row index D6 to 0, 1, 2, etc. The range K4:K13 that I'm indexing
is a simple list of numbers, 1, 2, 3, ..., 10.
Below is a simple example, I have tried to reduce the code as much as
possible, and reduced the Excel file to the bare minimum. Is there any way
I could share this with you? Maybe as a zip file? Or as a git repo?
> import org.apache.poi.ss.usermodel.*;
>
> import java.io.File;
>
> public class StandAlonePoiMultivaluedReturnExample {
>
> private static final String exampleFilePath =
> "src/main/resources/test-index-iferror.xlsx";
>
> public static void main(String[] args) throws Exception {
> System.out.println("Working Directory = " +
> System.getProperty("user.dir"));
> File file = new File(exampleFilePath);
> Workbook wb = WorkbookFactory.create(file);
> FormulaEvaluator evaluator =
> wb.getCreationHelper().createFormulaEvaluator();
> Cell formulaCellThatReturnsDifferentValues =
> wb.getSheetAt(0).getRow(8).getCell(3);
> boolean valueBeforeEvaluate =
> formulaCellThatReturnsDifferentValues.getBooleanCellValue();
> CellType type =
> evaluator.evaluateFormulaCell(formulaCellThatReturnsDifferentValues);
> CellValue value =
> evaluator.evaluate(formulaCellThatReturnsDifferentValues);
> System.out.println("The value from Excel is ["+valueBeforeEvaluate +
> "] but POI 5.1.0 returns the type as [" + type + "] and value: " + value);
> }
> }
>
>
This program gives the output:
> The value from Excel is [false] but POI 5.1.0 returns the type as [ERROR]
> and value: org.apache.poi.ss.usermodel.CellValue [#VALUE!]
Any advice?
Thanks