1. 概述
1.1 應用場景
使用者有以下需求時:
所有的表都放在一個 Excel 裏面,然後分不同的 sheet 。
多個普通報表,透過一個 url ,匯出包含多個報表的 Excel 。
十幾個不同的範本,每個範本都有不同的參數,然後批量匯出 Excel 。
一次匯出多個報表。
可參考本文方法實現。
1.2 功能簡介
本文提供多個報表同時匯出成某種格式的方法。
注:本文方法適用於普通報表。
2. 實現思路
2.1 程式碼範例
增加一段 JS 程式碼,實現點選按鈕後匯出地區參數為「華北」的 Parameter.cpt 和無參數 Cross.cpt 到 Excel 中,程式碼如下:
http://localhost:8075/webroot/decision/view/report?reportlets=
[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地區:"華北"},
{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]
&format=excel&__filename__=export
注:URL 不能直接存取,瀏覽器可能不支援[] / {} 特殊符號,因此需要進行 編碼轉換 後才能直接存取使用。上述範例編碼後為:
http://localhost:8075/webroot/decision/view/report?reportlets=%5B%7Breportlet%3A%22%2Fdoc%2FPrimary%2FParameter%2FParameter.cpt
%22%2C%E5%9C%B0%E5%8C%BA%3A%22%E5%8D%8E%E5%8C%97%22%7D%2C%7Breportlet
%3A%22%2Fdoc%2FPrimary%2FCrossReport%2FCross.cpt%22%7D%5D
&format=excel&__filename__=export
2.2 程式碼介紹
利用「window.open」來開啟帶匯出參數 URL 的方式來實現 Excel 匯出。相關參數如下所示:
參數 | 範例 |
---|---|
1)報表中無參數時: [{reportlet:"/doc/reportname.cpt"},{reportlet:"/doc/reportname.cpt"},{...}] 其中{reportlet:"/doc/reportname.cpt"},是範本的存取路徑 | [{reportlet:"/doc/Primary/CrossReport/Cross.cpt"},{reportlet:"/doc/Primary/DetailReport/Details.cpt"}] |
2)報表中有參數時: [{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{...}]paraname1:"paravalue1",是指匯出各範本內容時,對應的參數名和參數值,多個參數中間用逗號隔開 | [{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地區:"華北"},{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}] |
&format=XX,format後面的 XX,是指匯出檔案的格式 | &format=excel 批量匯出時匯出的是一個檔案,多個報表匯出後為一個包含多個 sheet 的 excel 檔案 |
&__filename__=name,對匯出的檔案重新命名"name"就是自訂的檔案名稱 | &__filename__=export 重新命名為 export |
3. 操作步驟
3.1 範本準備
使用範本:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\Parameter\Parameter.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\CrossReport\Cross.cpt
3.2 建立 HTML 檔案
1)增加一段 JS 程式碼,實現點選按鈕後匯出地區參數為「華北」的 Parameter.cpt 和無參數 Cross.cpt 到 Excel 中,程式碼如下:
var reportlets = "[{reportlet: '/doc/Primary/Parameter/Parameter.cpt',地區: '華北'}, {reportlet: '/doc/Primary/CrossReport/Cross.cpt'}]"
function clickEvent() {
window.open(encodeURI('/webroot/decision/view/report?reportlets=' + reportlets + '&format=excel'));
}
完整程式碼如下所示:
點選下載檔案:export.zip
注:自訂批量匯出時,如果在匯出的同時還在下載多個檔案,推薦將瀏覽器的保全等級降低,避免被瀏覽器將匯出檔案判定為不安全檔案。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FineReport自訂匯出</title>
</head>
<script type="text/javascript">
var reportlets = "[{reportlet: '/doc/Primary/Parameter/Parameter.cpt',地區: '華北'}, {reportlet: '/doc/Primary/CrossReport/Cross.cpt'}]"
function clickEvent() {
window.open(encodeURI('/webroot/decision/view/report?reportlets=' + reportlets + '&format=excel'));
}
</script>
<body>
<button
type="button"
onclick= clickEvent()>匯出[Excel]
</button>
</body>
</html>
2)將export.html放置到%FR_HOME%\webapps\webroot\help\page_demo路徑下,如下圖所示:
3.3 效果預覽
啟動 FineReport 工程,在瀏覽器端輸入http://localhost:8075/webroot/help/page_demo/export.html,點選「匯出 Excel」,即可匯出 Excel,效果如下圖所示: