Благодаря связи с Велисарием мы, кажется, поняли это.Основы того, как это сделать, - создавать объекты JasperPrint для каждого листа, как обычно.Итак, у вас есть:
JasperPrint firstWorkSheet = ...;
JasperPrint secondWorkSheet = ...;
Объекты JasperPrint уже заполнены источником данных на данный момент.Затем вы делаете:
List<JRPrintPage> pages = new ArrayList<JRPrintPage>(secondWorkSheet.getPages());
int i = firstWorkSheet.getPages().size();
for (int count = 0; count < pages.size(); count++) {
firstWorkSheet.addPage(i, (JRPrintPage) pages.get(count));
i++;
}
Для чего он устанавливает i
на количество страниц, находящихся в данный момент в firstWorkSheet
(которое должно быть на одной).Затем он зацикливает страницы в secondWorkSheet
и добавляет их в firstWorkSheet.
Убедитесь, что в вашем jasperReport он настроен на печать как одна страница для каждого из файлов jrxml рабочего листа, и вы должныхорошо пойти.Я приеду обновить это, если что-то изменится, но это должно работать.
ОБНОВЛЕНИЕ:
Обнаружено, что вам нужно использовать net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter
вместо
net.sf.jasperreports.engine.export.JRXlsExporter
, поскольку при экспорте в несколько рабочих листов возникает проблема.
Кроме того, значение в файле jrxml для isIgnorePagination
должно быть:
isIgnorePagination="true"
, чтобы каждый файл jrxml экспортировался как одна страница.
Затем необходимо установить для параметра JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET
значение true, чтобы он разбивал каждую страницу на отдельный лист.