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);