Подтвердить что ты не робот

Как экспортировать JasperReport в файл Excel с несколькими листами?

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

В jasper-reports, как вы экспортируете в файл excel с несколькими листами (в идеале из разных источников данных)?

4b9b3361

Ответ 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));