Сумма в Excel ссылается на другой лист, когда строки не генерируются - PullRequest
0 голосов
/ 21 мая 2019

Я использую библиотеку JXLS для создания файла Excel.Как часть Excel, у меня есть простая таблица, содержащая два столбца, которые динамически генерируются JXLS.

| ID           | Value           |
| ${record.id} | ${record.value} |
|              | SUM(D10:D10)    |

со строками, автоматически генерируемыми с помощью команды XLS:

jx:each(items="export.rows" var="record" lastCell="D10")

Я создаю многолистовой шаблон, в котором некоторые экспорты могут содержать элементы в rows, а другие нет.Проблема заключается в том, что по какой-то причине элементы, которые содержат пустой rows, изменяют формулу для ссылки на первый лист, который на самом деле содержит некоторые rows, фактически изменяя формулу, например:

SUM('SHEET_WITH_ROWS'!D10:'SHEET_WITH_ROWS'!D10)

Если Iэкспортировать только один элемент без rows, для единственного существующего листа формула корректно изменяется на =0 и ничего не отображается.

Как я могу настроить JXLS так, чтобы он не ссылался на другой лист?

1 Ответ

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

К сожалению, мне не удалось найти работающее решение с использованием механизмов JXLS.Я пытался объединить условия JXLS с JXLS каждый, но ничего не получалось.Когда условие JXLS успешно скрыло проблемный раздел, аналогичная проблема появилась в другом разделе, который первоначально ссылался на сумму в ячейке D11.

Я решил исправить эту проблему с помощью хакерского решения, предварительнозаполнение коллекции одним элементом, действующим в качестве заполнителя:

if (CollectionUtils.isEmpty(data.getRows())) {
    data.setRows(Collections.singletonList(ExportRow.createEmptyPlaceholder()));
}

Пустой заполнитель - это объект со всеми свойствами, установленными на null, выходные данные которого игнорируются JXLS, что вынуждает each эффективногенерировать ровно одну строку, которая ничего не содержит.

В моем случае это казалось разумным компромиссом.

...