反饋已提交
網絡繁忙
Excel 匯出時,使用者希望實現分組分 Sheet 匯出,即每個 Sheet 頁中報表格式相同,內容不同。如下圖所示,Sheet1為華東地區銷售概況,Sheet2 為華北地區銷售概況。
透過 JavaScript 實現:為報表 URL 新增可以實現「分頁匯出」的參數,參數包括「匯出格式參數」和「匯出頁數參數」。
注:若匯出時分頁過多,在 URL 中連接的參數會因過多而導致 URL 過長,進而導致瀏覽器報 400(請求頭太大),無法正常匯出。
不同的場景對應不同的實現方法,如下兩種場景:
場景 1:參數查詢報表,匯出後每個參數值對應的報表內容在一個 Sheet 頁。
場景 2:範本按組分頁後,匯出後每一組內容對應一個 Sheet 頁。
使用 %FR_HOME%\webapps\webroot\WEB-INF\reportlets路徑下的範本 GettingStarted.cpt 作為「場景 1」範例 。
開啟範本後先對範本做部分修改,修改內容如下:
在 A1 儲存格將標題改為公式: $地區+"地區銷售概況",修改報表 Sheet 名稱為公式: =A4(等號需手動輸入),如下圖所示:
在參數面板中新增一個「按鈕元件」,將按鈕名稱修改為「匯出EXCEL」。如下圖所示:
選中「匯出EXCEL」按鈕元件,在「元件設定>事件」處,新增一個「點選」事件。新增一個事件參數,參數名為「area」,值為「公式」類型:sql("FRDemo","select distinct 地區 from 銷量",1)。
輸入 JavaScript 程式碼如下:
var url = 'report?reportlets=';//定義urlvar pars = '&format=excel&__filename__=1';//設定匯出格式和匯出檔案名稱var path = "${reportName}";//獲取範本名稱和路徑//獲取範本中參數值,以陣列形式儲存,每個參數值對應一個sheetvar 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);//列印urlwindow.open(url);
步驟如下圖所示:
注:如果是掛載到平台,那麼還需要修改下程式碼裏面的 URL 才行,否則會報錯:該節點已被刪除。
修改的程式碼如下:
var url = '/webroot/decision/view/report?reportlets=';//定義urlvar pars = '&format=excel&__filename__=1';//設定匯出格式和匯出檔案名稱var path = "${reportName}";//獲取範本名稱和路徑//獲取範本中參數值,以陣列形式儲存,每個參數值對應一個sheetvar 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);//列印urlwindow.open(url);
儲存範本,點選「分頁預覽」,點選「匯出EXCEL」按鈕,匯出後一個地區一個 Sheet 頁,效果如 1.1 節預期效果所示。
注:不支援行動端。
注:分頁分 Sheet 匯出不支援 Sheet 重新命名。
建立普通報表,匯出後每一組內容對應一個 Sheet 頁。
建立資料集 ds1,SQL 查詢語句為:SELECT * FROM 銷量 ORDER BY 地區。
將 ds1 資料集中欄位依次拖到 A2~E2 儲存格,設定儲存格樣式,並將 A2 儲存格「資料設定」修改為「列表」。如下圖所示:
在第一列序號處按滑鼠右鍵,設定「重複標題列」,使標題列每一頁都顯示,匯出時也顯示在每個 Sheet 頁。如下圖所示:
選中 A2 儲存格,新增一個「分頁」的條件屬性,選擇分頁類型為「列前分頁」。條件需要設定兩個條件,用 AND 連結:
條件一為「普通」條件:currentValue 不等於 '=HIERARCHY(A2)'。HIERARCHY 等同於層次座標,獲取上一個儲存格的值。
條件二為「公式」條件:&A2!=1。A2 儲存格擴展後第一個值的上一個值為空,所以用「序號不等於 1」排除。
結合起來即表示:當前儲存格值如果不等於上一個儲存格值,那麼在當前儲存格處進行「列前分頁」。
如下圖所示:
選中「匯出EXCEL」按鈕元件,在「元件設定>事件」處,新增一個「點選」事件。
注: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)));
儲存範本,點選「分頁預覽」,點選「匯出EXCEL」按鈕,匯出後相同地區的值在一個 Sheet 頁,效果如下圖所示:
點選下載範本:
JS實現參數報表分Sheet匯出Excel.cpt
JS實現列式報表分Sheet匯出Excel.cpt
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙