Как экспортировать JasperReport в файл Excel с несколькими листами?
У нас есть отчет о том, что клиент хотел бы экспортировать в формат excel, где он имеет несколько рабочих листов. По сути, два запроса имеют одни и те же параметры, но все остальное отличается.
В jasper-reports, как вы экспортируете в файл excel с несколькими листами (в идеале из разных источников данных)?
Ответы
Ответ 1
Благодаря этой теме мне было легче создать экспорт Excel с несколькими листами. Я узнал, что вы можете использовать следующее:
ArrayList<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
и экспортер автоматически будет использовать каждый объект JasperPrint для построения каждого листа; также имя отчета Jasper (как указано в файле jrxml) используется как имя каждого листа.
В настоящее время это решение работает на моем локальном проекте, поэтому я просто хотел сообщить вам.
Ответ 2
Благодаря линии belisarius мы, похоже, поняли это. Основы работы с ним - это создать объекты 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, чтобы он разбивал каждую страницу на отдельный рабочий лист.
Ответ 3
В соответствии с текущей версией 6.1.1 JRXlsExporter.setParameter
устарел. Его следует заменить на JRXlsExporter.setExporterInput
. Таким образом, обновленный код будет выглядеть следующим образом:
ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1);
sheets.add(sheet2);
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));