JXLS не пишет обработанный JEXL

Следуя примеру на их сайте, http://jxls.sourceforge.net/getting_started.html. Я столкнулся с проблемой при попытке записать обработанный файл. Вместо записи данных, которые должны быть заменены JEXL, он просто просто записывает файл шаблона снова, как если бы он был просто копированием и вставкой файла шаблона.

Вот как выглядит мой файл шаблона:Файл шаблона

И вот что он выводит:Выходной файл

Мой код почти такой же, как руководство, поэтому я не уверен, почему мой код действует иначе, чем их. Есть одна вещь, которую я изменил, которая может повлиять на это, и которая использовала createInitialContext() вместо getInitialContext(), Причина в том, что по какой-то причине в моей банке не было getInitialContext() метод, хотя банки оба одинаковы (2.0.0), однако, он содержит createInitialContext() метод. Из моей отладки кажется, что код обрабатывает данные и заменяет JEXL соответствующими данными, так как размер области xls изменяется с 4 до 63.

Мой код:

InputStream is = getClass().getResourceAsStream("/transactions_template.xls");
OutputStream os = new FileOutputStream(file);
Transformer transformer = TransformerFactory.createTransformer(is, os);
AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
List<Area> xlsAreaList = areaBuilder.build();
Area xlsArea = xlsAreaList.get(0);
Context context = transformer.createInitialContext();
context.putVar("transactions", transactions);
xlsArea.applyAt(new CellRef("Result!A1"), context);
transformer.write();
is.close();
os.close();

TLDR: JXLS, кажется, обрабатывает JEXL, но вместо этого записывает файл шаблона. Я изменил getInitialContext в оригинальном руководстве на createInitialContext из-за того, что createInitialContext отсутствует в моей версии, хотя в руководстве используется моя версия 2.0.0.

1 ответ

Решение

Вы проверили таблицу результатов сгенерированного документа Excel?

Пример в руководстве " Приступая к работе" не меняет шаблон листа, а просто генерирует все выходные данные на листе результатов, как указано параметром CellRef, переданным методу applyAt.

xlsArea.applyAt(new CellRef("Result!A1"), context);

Если вы хотите заполнить данными шаблон листа, вы должны предоставить правильный CellRef для метода applyAt. Например, если ваш шаблон листа называется как шаблон, у вас должно быть что-то вроде этого

xlsArea.applyAt(new CellRef("Template!A1"), context);
Другие вопросы по тегам