2010-10-20 111 views

回答

19

感謝這個線程,我真的更容易創建一個帶有多個工作表的Excel導出。我發現了什麼是你可以使用以下命令:

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

商和出口商將自動使用每JasperPrint對象構造每個片; Jasper報告的名稱(如jrxml文件中指定的)用作每張表的名稱。

目前這個解決方案適用於我的本地項目,所以我只是想讓你知道。

+0

我使用JRXlsExporterParameter.SHEET_NAMES命名錶單,但名稱在表單選項卡上不合適。使用上面的代碼將名稱與正確的工作表相匹配。謝謝+1 – 2012-01-06 19:14:30

+0

+1不錯的答案。謝謝 – Addicted 2012-07-10 11:10:53

+0

考慮更新您的答案JRXlsExporter.setParameter已棄用 – 2015-12-02 17:16:37

10

感謝belisarius鏈接,我們似乎已經想通了。如何做到這一點的基礎知識就是像平常一樣爲每張紙創建您的JasperPrint對象。所以你有:

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

JasperPrint對象此時已經填充了數據源。然後,你做:

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到目前在firstWorkSheet頁面(這應該是一個)的數量。然後循環使用secondWorkSheet中的頁面,並將它們添加到firstWorkSheet中。

請確保您在jasperReport中設置爲打印爲每個工作表jrxml文件的一個頁面,並且您應該很好。如果有任何更改,我會更新此內容,但這應該起作用。

UPDATE:

發現你需要使用的 net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

代替

net.sf.jasperreports.engine.export.JRXlsExporter

因爲似乎出口到多個工作表時是一個問題。

也爲isIgnorePagination在JRXML文件中的設置必須是:

isIgnorePagination="true"

使每個JRXML文件導出爲單頁。

然後,您需要將JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET參數設置爲true,以便將每個頁面分解爲單獨的工作表。

+0

+1爲了讓您的時間幫助其他人 – 2010-10-20 14:47:11

+0

+1對我有幫助謝謝。 – Addicted 2012-07-11 12:05:44

2

根據當前版本6.1.1,不推薦使用JRXlsExporter.setParameter。它應該被JRXlsExporter.setExporterInput取代。所以,更新後的代碼應該是:

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

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets)); 
相關問題