2010-10-20 165 views

Respuesta

19

Gracias a este hilo fue más fácil para mí crear una exportación de Excel con varias hojas. Lo que descubrí fue que se podría utilizar el siguiente:

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

y el exportador utilizará automáticamente todos los objetos JasperPrint para construir cada hoja; también el nombre del informe de Jasper (como se especifica en el archivo jrxml) se utiliza como el nombre de cada hoja.

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

+0

Estaba nombrando las hojas usando: JRXlsExporterParameter.SHEET_NAMES, pero los nombres estaban desordenados en las pestañas de la hoja. El uso del código anterior coincide con los nombres de las hojas correctas. Gracias +1 –

+0

+1 bonita respuesta. gracias – Addicted

+0

Considere actualizar su respuesta JRXlsExporter.setParameter está en desuso –

10

Gracias al enlace de belisarius parece que lo hemos descubierto. Lo básico de cómo hacerlo es crear tus objetos JasperPrint para cada hoja como lo harías normalmente. Entonces usted tiene:

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

Los objetos de JasperPrint ya están llenos con el origen de datos en este momento. Entonces 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 esto hace que establece i al número de páginas actualmente en el firstWorkSheet (que debería ser uno). A continuación, recorre las páginas del secondWorkSheet y las agrega a la primera hoja de trabajo.

Asegúrate de que en tu jasperReport lo tienes configurado para imprimir como una página para cada uno de los archivos jrxml de la hoja de trabajo y ya deberías ir. Voy a venir a actualizar esto si algo cambia, pero esto debería funcionar.

ACTUALIZACIÓN:

Descubierto necesita utilizar net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

en lugar de

net.sf.jasperreports.engine.export.JRXlsExporter

ya que parece ser un problema cuando se exporta a múltiples hojas de trabajo.

También la configuración en el archivo de jrxml isIgnorePagination tiene que ser:

isIgnorePagination="true"

para que cada archivo jrxml se exporta como una sola página.

Luego debe establecer el parámetro JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET en verdadero para que se divida cada página en una hoja de trabajo separada.

+0

+1 para tomarse su tiempo para ayudar a los demás –

+0

+1 útil para mí, gracias. – Addicted

2

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

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

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