Формула не оценивается через Java + Apache POI - PullRequest
1 голос
/ 22 мая 2019

У меня есть один лист Excel, который я читаю через Apache POI, в котором одна ячейка содержит следующую формулу.

=IFERROR(LOOKUP(2,1/(A3:T3<>"sample"),COLUMN(A3:T3)),9999)

Я перепробовал все, что доступно в интернете. Кроме того, выполните следующие действия.

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();

Каждый раз, когда он возвращает мне значение 9999. Вместо фактического значения, равного 11.

1 Ответ

2 голосов
/ 22 мая 2019

Формула

LOOKUP(2,1/(A3:T3<>"sample"),COLUMN(A3:T3))

нарушает правила функции LOOKUP . Он использует векторную форму с lookup_vector 1/(A3:T3<>"sample"), которая создает вектор, имеющий #DIV/0!, если A3:T3<>"sample" равно false, иначе 1. Так что lookup_vector - это что-то вроде {#DIV/0!,#DIV/0!,#DIV/0!,1,#DIV/0!,#DIV/0!,...}

Но в правилах четко сказано:

Важно: значения в lookup_vector должны быть помещены в порядке возрастания порядок: ..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE; иначе, LOOKUP может не возвращать правильное значение. Прописные и строчные буквы эквивалентны.

О значениях ошибок ничего не сказано. И даже если бы здесь были возможны значения ошибок, каков их «восходящий порядок»?

Одно дело, что Excel сам дает результаты даже для этой неправильной формулы. Но вы не можете ожидать, что другое программное обеспечение также даст результаты для формул, которые нарушают данные правила.

...