Jxls - как исключить #value в таблице Excel?

Я использую библиотеку Jxls на основе POI для создания электронных таблиц, содержащих макросы, которые ссылаются на другие рабочие листы. У меня проблема, когда формула ссылается на пустую переменную и показывает "#ЗНАЧ" вместо просто пробела.

Например, «исходный» рабочий лист (назовем его worksheetA) правильно заполняется с использованием переменных Jxls. Например, я поместил это на рабочий лист A, ячейку A2.

${employee.salary}

Вышеупомянутое относится к коллекции, поэтому, если есть 10 сотрудников, в сгенерированном рабочем листе A появится 10 строк. Обратите внимание, что размер коллекции неизвестен с точки зрения шаблона, но я могу получить его с помощью класса java, который при необходимости генерирует электронную таблицу.

На другом листе (назовем его worksheetB) я заполняю ячейки на основе содержимого листа A.

Например, на листе B я заполню, скажем, 20 строк столбца A следующей формулой:

$[worksheetA!A2]

Первые 10 строк рабочей таблицы B вычисляются правильно. Но в оставшихся 10 строках отображается «#ЗНАЧ», так как соответствующего сотрудника нет (т. е. всего 10 сотрудников).

Это своего рода искаженное объяснение, но в основном формула, относящаяся к ячейке за пределами тех, которые были заполнены коллекцией Jxls, возвращает «#ЗНАЧ», и я хотел бы избавиться от нее.


person Jack BeNimble    schedule 17.05.2013    source источник


Ответы (2)


Вы всегда можете украсить формулу с помощью =ЕСЛИОШИБКА(a,b), где a – исходная формула (или значение), а b – это то, что вы хотите отобразить вместо этого, если a равно #VALUE.

person Bathsheba    schedule 17.05.2013
comment
спасибо, но, к сожалению, он не может разобрать его. $[iferror(сотрудник!C2,)] - person Jack BeNimble; 17.05.2013

Проблема в том, что ${employee.salary} расширяется в несколько строк электронной таблицы в зависимости от количества элементов в коллекции. Excel считает это вставкой, поэтому любые формулы, ранее указывающие на первые 10 строк, теперь будут указывать на 11-ю и далее. Я хотел, чтобы они указывали на строки с 1 по 10 (или строки с 1 по n), поэтому обходной путь для меня заключался в том, чтобы вставить данные в листы, на которые не ссылаются формулы, а затем автоматически запустить макрос, который скопировал эти рабочие листы в те, на которые ссылается макрос, таким образом избегая вставки.

person Jack BeNimble    schedule 30.05.2013