Как экспортировать JasperReport в файл Excel с несколькими листами? - PullRequest
16 голосов
/ 20 октября 2010

У нас есть отчет, который клиент хотел бы экспортировать в формат Excel, где имеется несколько рабочих листов.По сути, два запроса имеют одинаковые параметры, но все остальное отличается.

Как в jasper-отчетах вы экспортируете в файл Excel с несколькими таблицами (в идеале из разных источников данных)?

Ответы [ 3 ]

19 голосов
/ 26 апреля 2011

Благодаря этой теме мне действительно было легче создать экспорт в Excel с несколькими листами.Я обнаружил, что вы можете использовать следующее:

ArrayList<JasperPrint> list = new  ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);

, и экспортер будет автоматически использовать каждый объект JasperPrint для построения каждого листа;также имя отчета Jasper (как указано в файле jrxml) используется в качестве имени каждого листа.

В настоящее время это решение работает для моего локального проекта, поэтому я просто хотел сообщить вам.

10 голосов
/ 20 октября 2010

Благодаря связи с Велисарием мы, кажется, поняли это.Основы того, как это сделать, - создавать объекты 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, чтобы он разбивал каждую страницу на отдельный лист.

2 голосов
/ 22 октября 2015

Согласно текущей версии 6.1.1, JRXlsExporter.setParameter устарела. Его следует заменить на JRXlsExporter.setExporterInput. Итак, обновленный код будет:

ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1); 
sheets.add(sheet2);

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
...