2010-10-20 17 views

Odpowiedz

19

Dzięki temu wątkowi naprawdę łatwiej było mi utworzyć eksport Excela z wieloma arkuszami. Co dowiedziałem się, że można użyć następujących:

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

i eksportera automatycznie użyje każdy obiekt JasperPrint skonstruować każdy arkusz; również nazwa raportu Jaspera (określona w pliku jrxml) jest używana jako nazwa każdego arkusza.

Obecnie to rozwiązanie działa w moim lokalnym projekcie, więc chciałem Cię poinformować.

+0

Nazwałam arkusze, używając: JRXlsExporterParameter.SHEET_NAMES, ale nazwy były nieczynne na kartach arkuszy. Przy użyciu powyższego kodu dopasowano nazwy do właściwych arkuszy. Dziękujemy +1 –

+0

+1 ładna odpowiedź. dzięki – Addicted

+0

Rozważ zaktualizowanie swojej odpowiedzi JRXlsExporter.setParameter jest przestarzałe –

10

Dzięki belisarius link wydaje się, że to wymyśliliśmy. Podstawą tego jest utworzenie obiektów JasperPrint dla każdego arkusza w normalny sposób. Więc trzeba: Przedmioty

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

JasperPrint są już wypełnione źródła danych w tym momencie. Następnie należy zrobić:

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

Co to ustawia i do liczby stron obecnie w firstWorkSheet (który powinien być jeden). Następnie zapisuje strony w pliku secondWorkSheet i dodaje je do pierwszej Arkuszy Pracy.

Upewnij się, że w twoim jasperReport masz ustawione drukowanie jako jedną stronę dla każdego pliku jrxml arkusza roboczego i powinieneś być gotowy. Przyjdę zaktualizować to, jeśli coś się zmieni, ale to powinno zadziałać.

UPDATE:

Odkryte trzeba użyć net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

zamiast

net.sf.jasperreports.engine.export.JRXlsExporter

gdyż nie wydaje się być problemem podczas eksportu do wielu arkuszy roboczych.

także ustawienie w pliku jrxml dla isIgnorePagination musi być:

isIgnorePagination="true"

tak, że każdy plik jrxml jest eksportowany jako jednej stronie.

Następnie należy ustawić parametr JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET na true, aby dzielił każdą stronę na osobny arkusz.

+0

+1 za poświęcenie czasu, aby pomóc innym –

+0

+1 pomocne dla mnie dzięki. – Addicted

2

Zgodnie z obecną wersją 6.1.1, JRXlsExporter.setParameter jest przestarzałe. Powinien zostać zastąpiony przez JRXlsExporter.setExporterInput.Tak więc zaktualizowany kod będzie następujący:

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

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets)); 
Powiązane problemy