我們有一份報告,客戶希望將其導出爲具有多個工作表的Excel格式。基本上這兩個查詢共享相同的參數,但其他一切都不相同。如何將JasperReport導出爲包含多個工作表的Excel文件?
在jasper-reports中,如何導出到具有多個工作表(理想情況下來自不同數據源)的excel文件?
我們有一份報告,客戶希望將其導出爲具有多個工作表的Excel格式。基本上這兩個查詢共享相同的參數,但其他一切都不相同。如何將JasperReport導出爲包含多個工作表的Excel文件?
在jasper-reports中,如何導出到具有多個工作表(理想情況下來自不同數據源)的excel文件?
感謝這個線程,我真的更容易創建一個帶有多個工作表的Excel導出。我發現了什麼是你可以使用以下命令:
ArrayList<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
商和出口商將自動使用每JasperPrint對象構造每個片; Jasper報告的名稱(如jrxml文件中指定的)用作每張表的名稱。
目前這個解決方案適用於我的本地項目,所以我只是想讓你知道。
感謝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,以便將每個頁面分解爲單獨的工作表。
+1爲了讓您的時間幫助其他人 – 2010-10-20 14:47:11
+1對我有幫助謝謝。 – Addicted 2012-07-11 12:05:44
根據當前版本6.1.1,不推薦使用JRXlsExporter.setParameter
。它應該被JRXlsExporter.setExporterInput
取代。所以,更新後的代碼應該是:
ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1);
sheets.add(sheet2);
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
我使用JRXlsExporterParameter.SHEET_NAMES命名錶單,但名稱在表單選項卡上不合適。使用上面的代碼將名稱與正確的工作表相匹配。謝謝+1 – 2012-01-06 19:14:30
+1不錯的答案。謝謝 – Addicted 2012-07-10 11:10:53
考慮更新您的答案JRXlsExporter.setParameter已棄用 – 2015-12-02 17:16:37