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.
Nguồn
2010-10-20 14:37:36
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 –
+1 câu trả lời hay. cảm ơn – Addicted
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 –