一、概述
使用場景:Excel 匯出時,使用者希望實現分組分 Sheet 匯出,即每個 Sheet 頁中報表格式相同,內容不同。
功能簡介:通過 JavaScript 實現:為報表 URL 新增可以實現【分頁匯出】的參數,參數包括【匯出格式參數】和【匯出頁數參數】。
不同的場景對應不同的實現方法,如下兩種場景:
參數查詢報表,匯出後每個參數值對應的報表內容在一個 Sheet 頁。
範本按組分頁後,匯出後每一組內容對應一個 Sheet 頁。
注:若匯出時分頁過多,在 URL 中連接的參數會因過多而導緻 URL 過長,進而導緻瀏覽器報 400(請求頭太大),無法正常匯出。
二、場景一:根據參數分 Sheet
1
準備範本。
使用 %FR_HOME%\webapps\webroot\WEB-INF\reportlets路徑下的範本 GettingStartedTW.cpt 作為【場景 1】範例 。
打開範本後先對範本做部分修改,修改內容:
在 A1 儲存格將標題改為公式:【$地區+"地區銷售概況"】。
修改報表 Sheet 名稱為公式: 【=A4】(等號需手動輸入),如下圖所示。
2
設定分頁匯出。
新增匯出按鈕:在參數面板中新增一個【按鈕元件】,將按鈕名字修改為【匯出EXCEL】。如下圖1所示。
新增點擊事件:選中【匯出EXCEL】按鈕元件,在【元件設定】→【事件】處,新增一個【點擊】事件。新增一個事件參數,參數名為【area】,值為【公式】:【sql("FRDemoTW","select distinct 地區 from 銷量",1)】。步驟如下圖2所示。輸入 JavaScript 代碼如下代碼塊1。
如果是掛載到平台,那麼還需要修改下代碼裏面的 URL 才行,否則會報錯:【該節點已被刪除】。輸入 JavaScript 代碼如下代碼塊2。
var url = 'report?reportlets=';//定義url。
var pars = '&format=excel&__filename__=1';//設定匯出格式和匯出檔案名稱稱。
var path = "${reportName}";//獲取範本名稱和路徑。
//獲取範本中參數值,以陣列形式儲存,每個參數值對應一個sheet。
var json = [];
for (var i = 0; i < area.length; i++) {
var sheet = {
reportlet: path,
地區: area[i]
};
json.push(sheet);
}
jsonStr = encodeURIComponent(JSON.stringify(json));//對url進行encodeURIComponent編碼。
url += jsonStr;//給url新增範本參數。
url += pars;//給url新增匯出參數。
alert(url);//列印url
window.open(url);
3
效果預覽。
儲存範本,點擊【分頁預覽】,點擊【匯出EXCEL】按鈕,匯出後一個地區一個 Sheet 頁,效果如下圖所示。
注:不支援行動端。
三、場景二:分組分 Sheet
1
資料準備。
建立普通報表,匯出後每一組內容對應一個 Sheet 頁。建立資料庫查詢,SQL 查詢語句為:SELECT * FROM 銷量 ORDER BY 地區。
2
設計報表。
將 ds1 資料集中欄位依次拖曳到 A2:E2 儲存格,將 A2 儲存格【資料設定】修改為【列表】。設定儲存格樣式如下圖1所示。
在第一行序號處,滑鼠右鍵點擊【設定重複標題列】,使標題列每一頁都顯示,匯出時也顯示在每個 Sheet 頁。如下圖2所示。
3
設定分組。
選中 A2 儲存格,新增一個【分頁】的條件屬性,選擇分頁型別為【行前分頁】。條件需要設定兩個條件,用 AND 連結。
條件一為【普通】條件:currentValue 不等於 '=HIERARCHY(A2)'。HIERARCHY等同於層次座標 ,獲取上一個儲存格的值。
條件二為【公式】條件:&A2!=1。A2 儲存格擴展後第一個值的上一個值為空,所以用【序號不等於 1】排除。
結合起來即表示:當前儲存格值如果不等於上一個儲存格值,那麼在當前儲存格處進行【行前分頁】。如下圖所示。
4
設定匯出。
新增匯出按鈕:在參數面板中新增一個【按鈕元件】,將按鈕名字修改為【匯出EXCEL】。如下圖1所示。
新增點擊事件:選中【匯出EXCEL】按鈕元件,在【元件設定】→【事件】處,新增一個【點擊】事件。如下圖2所示。輸入 JavaScript 代碼如下。
注:JS 代碼中 url 位址非固定,要根據範本名稱和範本儲存位置修改。
//根據範本儲存位置和資訊定義url。
var url = 'http://localhost:8075/webroot/decision/view/report?viewlet=JS實現列
式報表分Sheet匯出Excel.cpt';//該路徑為當前範本的儲存路徑,您可自行修改。
var pars = '&format=excel&extype=sheet&__filename__=2';//設定匯出格式和匯出檔案名稱稱。
url += pars;//給url新增匯出參數。
alert(url);//列印url。
window.open(encodeURI(encodeURI(url)));
5
效果預覽。
儲存範本,點擊【分頁預覽】,點擊【匯出EXCEL】按鈕,匯出後相同地區的值在一個 Sheet 頁,效果如下圖所示。
注:不支援行動端。