Невозможно оценить соответствие с помощью Apache Poi оценить

#java #excel-formula #apache-poi #match

Вопрос:

Я пытаюсь оценить ячейку формулы в листе XSSF с помощью Apache Poi evaluator.

 FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
System.out.println(evaluator.evaluate(cell));
 

ячейка имеет следующую формулу

 MATCH(1,('refsheet'!$A$1:$A$10=$C$1)*('refsheet'!$B$1:$B$10>=$D$1),0)
 

И вывод sysout печатает Вывод —

 org.apache.poi.ss.usermodel.CellValue [#N/A]
 

A1 — A10, B1 — B10 , C1 и D1 являются числовыми

pom.xml

 <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
 

Я не понимаю, почему я получаю #N/A

Получение правильного значения в листе Excel

Что я делаю не так

Любые предложения будут оценены по достоинству

Комментарии:

1. Какую apache poi версию вы используете? Формула MATCH(1,('refsheet'!$A$1:$A$10=$C$1)*('refsheet'!$B$1:$B$10>=$D$1),0) представляет собой формулу массива. Версии вплоть до 3.17 не могли правильно оценить такие формулы массива. Но, даже если оценить, формула приводит к #N/A тому, что либо 'refsheet'!$A$1:$A$10=$C$1 или 'refsheet'!$B$1:$B$10>=$D$1 , либо неверно.

2. @Axel Richter У меня есть 3.10, я попробую обновить версию. Однако оба выражения refsheet верны, и я получаю правильное значение в ms excel

3. @Axel Richter, не могли бы вы, пожалуйста, предложить альтернативу, возможно, для переопределения оценки для формул массива. Я пытался обновить версию, но обновление версии влияет на многое другое в приложении, так как в версии 4 произошли серьезные изменения. Любые предложения, если возможно. Я ценю ваш комментарий

4. @Аксель Рихтер Я обновил pom.xml с 4.1.2, построил его, но все еще получаю тот же вывод #N/A, также обновил вопрос с текущим pom. Что я делаю не так? Оба выражения refsheet определенно возвращают значение true для нескольких строк, проверенных еще раз с помощью отдельных выходных данных

5. Не может размножаться. Для меня apache poi 4.1.2 формула оценивается =MATCH(1,(refsheet!$A$1:$A$10=$C$1)*(refsheet!$B$1:$B$10>=$D$1),0) правильно. Пожалуйста, покажите воспроизводимый пример (полный код, значения в refsheet!$A$1:$A$10 , refsheet!$B$1:$B$10 , $C$1 и $D$1 ). Также убедитесь, apache poi 4.1.2 что он действительно привыкает. Может быть, где-нибудь есть артефакты старых версий?