Pull to refresh

Comments 14

Да, ещё и JETT, но не хотелось тянуть лишние библиотеки в проект. Да и посмотрел на сайте документацию, и не понял, как с помощью JXLS можно «клонировать» не одну страницу из шаблона, а несколько.
public HSSFWorkbook transformMultipleSheetsList(InputStream is, List objects, List newSheetNames, String beanName, Map beanParams, int startSheetNum)
Here

is — InputStream for source XLS template file
objects — List of beans where each list item should be exported into a separated worksheet
newSheetNames — Sheet names to be used for newly created worksheets
beanName — Bean name to be used for a list item when processing sheet
beanParams — Common bean map containing all other objects to be used in the workbook
startSheetNum — Worksheet number (zero based) of the worksheet that needs to be used to create multiple worksheets

То есть для создания нескольких листов итогового документа можно использовать только один лист шаблона. Хотя возможно я просто не разобрался.
Интересно, есть что-нибудь подобное под PHP, очень бы пригодилось.
Насколько я слышал POI очень любит кушать оперативную память. Не замечали ли вы за ним такое, и не отслеживали колличество используемой оперативной памяти в зависимости от сложности шаблона?
Все это, но на более высоком уровне можно делать с помощью продуктов jaspersoft. Поддерживаются форматы: PDF, XLS, XLSX, XML, HTML, XHTML, CSV, DOC, ODT. Библиотеки Apache (и не только) используются в них на нижнем уровне для работы с некоторыми из форматов. Не пробовал на PHP, но на Java это намного легче, удобнее, да и правильнее.
Смотрел на JasperReports, очень хотелось его. Но после того, как скачал Jasper Soft Studio понял, что так просто, с наскока, сколько то сложный шаблон сделать не получится. :( А сделать надо было быстро. Попозже обязательно сделаю ещё одну попытку одолеть Jasper Reports :)
Studio и iReport — это только для всех видов редактирования генерируемого документа. Да, упрощает, особенно если сложная архитектура или высокая вложенность объектов Java. Если уровень вложенности 2-3, то можно и на чистой Java без визуалки. Крме того, в исходниках JasperReports Library есть более 60 очень красивых и простых примеров.
Не по Java, но вдруг кому-то полезно будет: недавно тоже понадобилось реализовать создание Excel-документов, правда, под Node.js. К сожалению, выбор модулей невелик, самым функциональным оказался «msexcel-builder», но в процессе разработки выяснилось что у него много багов, например, с числами, отображаемыми как текст, и как следствие не работающими в формулах, да и с самими формулами — имеющимися средствами их было не создать. Помучившись некоторое время, и сделав пачку костылей, пришлось отказаться от затеи использовать этот модуль и вообще какой-либо подобный модуль Node.js (более функционального не отыскал). Под руку подвернулся Perl-модуль «Excel::Writer::XLSX». Нехотя, но все-таки скрестил его с Node.js, о чем пока что не жалею — с его помощью удалось реализовать все что хотелось, и вообще нашел в нем кучу возможностей, вплоть до настроек печати.
А таблицы ваш велосипед может заполнять? Например, есть таблица на листе, сверху шапка, снизу подвал. В таблицу вставить массив из заранее неизвестного количества элементов, сдвинув подвал.
В текущем виде не умеет, но я думаю можно попробовать допилить. Первое что пришло на ум — ввести теги, так, как сделано у JETT, ну на пример
<bicycle:forEach var='user' items='userList'>  
    ${user.name}
</bicycle:forEach>

Apache Commons JEXL library вроде умеет работать с такими конструкциями:
size(userList) //Для получения размера коллекции, указанной в аттрибуте items тега
и
userList[i].name //Для доступа к элементам коллекции

Поэтому встретив тег forEach можно попробовать получить размер коллекции и создать несколько копий строки, заключенной внутри тега. Попутно
в копируемых строках надо будет заменить выражение ${user.name} на ${userList[i].name}
И тогда задача сведётся к уже решённой в статье — поиск тегов и скармливания их commons-jexl
Я, когда создавал аналогичный велосипед, использовал именованные области Экселя. Таблица в шаблоне обводится именованной областью, в названии которой указывается тег адреса коллекции. При минимальном допиливании позволяет создавать шаблоны для структур с произвольной вложенностью.
Спасибо! И правда, отличная библиотека! Использовал для формирования docx документов.
Sign up to leave a comment.

Articles