#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
что он действительно привыкает. Может быть, где-нибудь есть артефакты старых версий?