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.
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 –
+1 bonita respuesta. gracias – Addicted
Considere actualizar su respuesta JRXlsExporter.setParameter está en desuso –