Apache POI 3.x — логическая формула, приводящая к #ЗНАЧ! (ошибка) только в MS Excel 2010

Я разработал код, который создает файл XLS с использованием Apache POI 3.9.
На листе есть два столбца, которые содержат только логические значения, как показано ниже:

xls-файл, открытый в Excel 2010 на португальском языке

Сгенерированный файл XLS был открыт с помощью MS Excel 2010 на португальском языке (pt-BR), поэтому ВЕРДАДЕЙРО рассматривается как ИСТИНА, а ЛОЖЬ как ЛОЖЬ. 3-й столбец содержит формулу INT(AND(L2,NOT(M2))), меняющую ссылки L2 и M2 для каждой строки. Эта формула представляет собой логическое выражение, результат которого преобразуется в целое число. Однако, когда файл открывается с помощью MS Excel 2010, формула приводит к ошибке (обозначается #ЗНАЧ!). Я проверил один и тот же файл с помощью OpenOffice Calc, LibreOffice Calc и MS Excel 2011 для Mac, и он работал нормально для обоих из них.
Ошибка исчезла, и правильное значение отображалось, когда я нажимал F2, а затем нажимал Enter для каждого клетка.


person s_bighead    schedule 21.07.2015    source источник
comment
Почему вы используете старую версию Apache POI? Что произойдет, если вы обновитесь до последней версии 3.13 beta 1 на момент написания статьи?   -  person Gagravarr    schedule 22.07.2015
comment
Я только что протестировал последнюю стабильную версию: 3.12, та же проблема... На этот раз я использовал MS Excel 2013 для Windows и не работал. Самое смешное, что нет проблем ни с MS Excel 2011 для Mac, ни с OpenOffice...   -  person s_bighead    schedule 22.07.2015


Ответы (1)


Я изменил формулу, добавив скобки вокруг вызова функции NOT(M2)
INT(AND(L2,NOT(M2))) ====> INT(AND(L2,(NOT(M2)))), и проблема была решена.

person s_bighead    schedule 21.07.2015