reports jasperreport jasper generation example excel export jasper-reports

excel - jasperreport - jasper reports xls generation java example



¿Cómo exportar un JasperReport a un archivo de Excel con varias hojas de trabajo? (3)

Tenemos un informe que el cliente desearía haber exportado a un formato de Excel donde tiene varias hojas de trabajo. Esencialmente, las dos consultas comparten los mismos parámetros, pero todo lo demás es diferente.

En jasper-reports, ¿cómo exportar a un archivo de Excel con múltiples hojas de trabajo (idealmente desde diferentes fuentes de datos)?


Gracias a este hilo, me fue más fácil crear una exportación de Excel con varias hojas. Lo que descubrí fue que podrías usar lo siguiente:

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

y el exportador usará automáticamente cada objeto JasperPrint para construir cada hoja; también el nombre del informe Jasper (como se especifica en el archivo jrxml) se usa como el nombre de cada hoja.

Actualmente esta solución funciona en mi proyecto local, así que solo quería hacerle saber.


Gracias al enlace de belisario, parece que lo hemos descubierto. Lo básico de cómo hacerlo es crear sus objetos JasperPrint para cada hoja como lo haría normalmente. Así que tienes:

JasperPrint firstWorkSheet = ...; JasperPrint secondWorkSheet = ...;

Los objetos JasperPrint ya están llenos con la fuente de datos en este punto. Entonces tu haces

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++; }

Lo que hace esto establece i en el número de páginas actualmente en la primera firstWorkSheet (que debería ser una). Luego, recorre las páginas en la secondWorkSheet y las agrega a la primera hoja de trabajo.

Asegúrese de que en jasperReport lo tiene configurado para imprimirse como una página para cada uno de los archivos jrxml de la hoja de trabajo y debería estar listo. Iré a actualizar esto si algo cambia, pero esto debería funcionar.

ACTUALIZAR:

Descubrió que necesita usar net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

en lugar de

net.sf.jasperreports.engine.export.JRXlsExporter

ya que parece haber un problema al exportar a múltiples hojas de trabajo.

También la configuración en el archivo isIgnorePagination para isIgnorePagination debe ser:

isIgnorePagination="true"

de modo que cada archivo jrxml se exporte como una sola página.

Luego, debe establecer el parámetro JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET en verdadero para que se separe cada página en una hoja de cálculo separada.


Según la versión actual 6.1.1, JRXlsExporter.setParameter está en desuso. Debe ser reemplazado por JRXlsExporter.setExporterInput . Entonces, el código actualizado sería:

ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>(); sheets.add(sheet1); sheets.add(sheet2); exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));