反饋已提交

網絡繁忙

JS實現分Sheet匯出Excel

1. 概述

1.1 預期效果

Excel 匯出時,使用者希望實現分組分 Sheet 匯出,即每個 Sheet 頁中報表格式相同,內容不同。如下圖所示,Sheet1為華東地區銷售概況,Sheet2 為華北地區銷售概況。

1.2 功能簡介

透過 JavaScript 實現:為報表 URL 新增可以實現「分頁匯出」的參數,參數包括「匯出格式參數」和「匯出頁數參數」。

注:若匯出時分頁過多,在 URL 中連接的參數會因過多而導致 URL 過長,進而導致瀏覽器報 400(請求頭太大),無法正常匯出。

不同的場景對應不同的實現方法,如下兩種場景:

  • 場景 1:參數查詢報表,匯出後每個參數值對應的報表內容在一個 Sheet 頁。

  • 場景 2:範本按組分頁後,匯出後每一組內容對應一個 Sheet 頁。

2. 場景一:根據參數分 Sheet

2.1 準備範本

使用 %FR_HOME%\webapps\webroot\WEB-INF\reportlets路徑下的範本 GettingStarted.cpt 作為「場景 1」範例 。

開啟範本後先對範本做部分修改,修改內容如下:

在 A1 儲存格將標題改為公式: $地區+"地區銷售概況",修改報表 Sheet 名稱為公式: =A4(等號需手動輸入),如下圖所示:

image.png

2.2 設定分頁匯出

2.2.1 新增匯出按鈕

在參數面板中新增一個「按鈕元件」,將按鈕名稱修改為「匯出EXCEL」。如下圖所示:

image (1).png

2.2.2 新增點選事件

選中「匯出EXCEL」按鈕元件,在「元件設定>事件」處,新增一個「點選」事件。新增一個事件參數,參數名為「area」,值為「公式」類型:sql("FRDemo","select distinct 地區 from 銷量",1)

輸入 JavaScript 程式碼如下:

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);

步驟如下圖所示:

image (2).png 

注:如果是掛載到平台,那麼還需要修改下程式碼裏面的 URL 才行,否則會報錯:該節點已被刪除。

image (3).png

修改的程式碼如下:

var url = '/webroot/decision/view/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);

2.3 效果預覽

儲存範本,點選「分頁預覽」,點選「匯出EXCEL」按鈕,匯出後一個地區一個 Sheet 頁,效果如 1.1 節預期效果所示。

注:不支援行動端。 

3. 場景二:分組分 Sheet

注:分頁分 Sheet 匯出不支援 Sheet 重新命名。

3.1 資料準備

建立普通報表,匯出後每一組內容對應一個 Sheet 頁。

建立資料集 ds1,SQL 查詢語句為:SELECT * FROM 銷量 ORDER BY 地區

image.png

3.2 設計報表

將 ds1 資料集中欄位依次拖到 A2~E2 儲存格,設定儲存格樣式,並將 A2 儲存格「資料設定」修改為「列表」。如下圖所示:

image (1).png

在第一列序號處按滑鼠右鍵,設定「重複標題」,使標題每一頁都顯示,匯出時也顯示在每個 Sheet 頁。如下圖所示:

image (2).png

3.3 設定分組

選中 A2 儲存格,新增一個「分頁」的條件屬性,選擇分頁類型為「前分頁」。條件需要設定兩個條件,用 AND 連結:

條件一為「普通」條件:currentValue 不等於 '=HIERARCHY(A2)'HIERARCHY 等同於層次座標,獲取上一個儲存格的值。

條件二為「公式」條件:&A2!=1。A2 儲存格擴展後第一個值的上一個值為空,所以用「序號不等於 1」排除。

結合起來即表示:當前儲存格值如果不等於上一個儲存格值,那麼在當前儲存格處進行「前分頁」。

如下圖所示:

image (3).png 

3.4 設定匯出

3.4.1 新增匯出按鈕

在參數面板中新增一個「按鈕元件」,將按鈕名稱修改為「匯出EXCEL」。如下圖所示: 

image (5).png

3.4.2 新增點選事件

選中「匯出EXCEL」按鈕元件,在「元件設定>事件」處,新增一個「點選」事件。

輸入 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)));

步驟如下圖所示:

image (6).png

3.5 效果預覽

儲存範本,點選「分頁預覽」,點選「匯出EXCEL」按鈕,匯出後相同地區的值在一個 Sheet 頁,效果如下圖所示:

注:不支援行動端。 

4.gif

4. 範本下載

附件列表


主題: 報表專題
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙