Comment exporter un JasperReport vers un fichier Excel avec plusieurs feuilles de travail?

Nous avons un rapport que le client souhaite avoir exporté au format excel où il a plusieurs feuilles de calcul. Essentiellement les deux requêtes partagent les mêmes paramètres, mais tout le reste est différent.

dans jasper-rapports comment exporter vers un fichier excel avec plusieurs feuilles de travail (idéalement à partir de différentes sources de données)?

16
demandé sur Jacob Schoen 2010-10-20 16:17:36

3 réponses

grâce à ce thread, il m'a vraiment été plus facile de créer un export Excel avec plusieurs feuilles. Ce que j'ai découvert, c'est que vous pourriez utiliser ce qui suit:

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

et l'exportateur utilisera automatiquement chaque objet JasperPrint pour construire chaque feuille; aussi le nom du rapport Jasper (tel que spécifié dans le fichier jrxml) est utilisé comme nom de chaque feuille.

Actuellement, cette solution fonctionne sur mon projet local, donc je voulais juste vous laisser savoir.

19
répondu andrei 2011-04-26 11:51:08

Grâce à bélisaire lien nous semblent avoir compris. Les bases de la façon de le faire est de créer vos objets JasperPrint pour chaque feuille comme vous le feriez normalement. Si vous avez:

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

les objets JasperPrint sont déjà remplis de la source de données à ce point. Puis tu fais:

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

ce Que cela fait, il définit i au nombre de pages actuellement dans le firstWorkSheet (qui devrait être). Puis il boucle à travers les pages dans le secondWorkSheet et les ajoute à le firstWorkSheet.

assurez-vous que dans votre jasperReport vous l'Imprimez comme une page pour chaque feuille de travail jrxml et vous devriez être bon à aller. Je viendrai mettre à jour ceci si quelque chose change, mais cela devrait fonctionner.

mise à jour:

Découvert que vous devez utiliser net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

au lieu de

net.sf.jasperreports.engine.export.JRXlsExporter

comme il semble y avoir un problème lors de l'exportation de plusieurs fiches de travail.

Également le paramètre dans le fichier jrxml isIgnorePagination doit être:

isIgnorePagination="true"

pour que chaque fichier jrxml soit exporté en une seule page.

alors vous devez définir JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET paramètre à true de façon à ce que chaque page soit divisée en une feuille de travail distincte.

10
répondu Jacob Schoen 2013-10-17 16:39:09

selon la version actuelle 6.1.1,JRXlsExporter.setParameter est obsolète. Il devrait être remplacé par JRXlsExporter.setExporterInput. Ainsi, la mise à jour de code serait:

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

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
2
répondu YAM 2015-10-22 09:02:31