2010-10-20 37 views

Trả lời

19

Nhờ chuỗi này, tôi thực sự dễ dàng hơn trong việc tạo ra một xuất Excel với nhiều trang tính. Những gì tôi phát hiện ra là bạn có thể sử dụng các thông tin sau:

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

và nhà xuất khẩu sẽ tự động sử dụng mọi đối tượng JasperPrint để xây dựng từng trang tính; cũng tên của báo cáo Jasper (như được chỉ định trong tệp jrxml) được sử dụng làm tên của mỗi trang tính.

Hiện tại giải pháp này hoạt động trên dự án địa phương của tôi, vì vậy tôi chỉ muốn cho bạn biết.

+0

Tôi đã đặt tên cho các trang tính bằng cách sử dụng: JRXlsExporterParameter.SHEET_NAMES, nhưng các tên đã nằm ngoài thứ tự trên các tab trang tính. Sử dụng mã trên khớp với tên của các trang tính chính xác. Cảm ơn +1 –

+0

+1 câu trả lời hay. cảm ơn – Addicted

+0

Xem xét cập nhật câu trả lời của bạn JRXlsExporter.setParameter không được chấp nhận –

10

Nhờ liên kết belisarius dường như chúng tôi đã tìm ra. Những điều cơ bản về cách làm điều đó là tạo các đối tượng JasperPrint của bạn cho mỗi trang tính như bình thường. Vì vậy, bạn có:

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

Đối tượng JasperPrint đã được lấp đầy với nguồn dữ liệu tại thời điểm này. Sau đó, bạn làm:

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

Điều này không nó đặt i để số trang hiện trong firstWorkSheet (mà phải là một). Sau đó, nó lặp lại các trang trong secondWorkSheet và thêm chúng vào firstWorkSheet.

Đảm bảo trong bạn jasperReport bạn đã thiết lập để in dưới dạng một trang cho mỗi tệp jrxml của bảng tính và bạn nên làm tốt. Tôi sẽ cập nhật điều này nếu có bất cứ điều gì thay đổi, nhưng điều này sẽ làm việc.

UPDATE:

phát hiện bạn cần phải sử dụng net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

thay vì

net.sf.jasperreports.engine.export.JRXlsExporter

như có vẻ là một vấn đề khi xuất khẩu sang nhiều sheet làm việc.

Ngoài ra các thiết lập trong file jrxml cho isIgnorePagination cần phải được:

isIgnorePagination="true"

để mỗi tập tin jrxml được xuất ra dưới dạng một trang duy nhất.

Sau đó, bạn cần đặt tham số JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET thành true để nó chia nhỏ mỗi trang thành một trang tính riêng biệt.

+0

+1 dành thời gian giúp đỡ người khác –

+0

+1 hữu ích cho tôi cảm ơn. – Addicted

2

Theo phiên bản hiện tại 6.1.1, JRXlsExporter.setParameter không còn được dùng nữa. Nó sẽ được thay thế bằng JRXlsExporter.setExporterInput.Vì vậy, mã được cập nhật sẽ là:

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

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets)); 
Các vấn đề liên quan