1. 概述
1.1 問題描述
Excel 導出時,用戶希望實現分組分 sheet 導出,即每個sheet 頁中報表格式相同,内容不同。如下圖所示,sheet 1爲華東地區銷售概況,sheet 2 爲華北地區銷售概況。
1.2 實現思路
添加 JS 實現:爲報表 URL 添加可以實現分頁導出的參數,參數包括導出格式參數和導出頁數參數。
不同的場景對應不同的實現方法,如下兩種場景:
場景1:參數查詢報表,導出後每個參數值對應的報表内容在一個 sheet 頁。
場景2:行式報表,按組分頁後,導出後每一組内容對應一個 sheet 頁。
2. 參數查詢報表
使用 %FR_HOME%\webapps\webroot\WEB-INF\reportlets路徑下的模板 GettingStared.cpt 示例場景 1 ,Excel 導出效果爲一個地區一個 sheet 頁。
若内置模板已損壞或删除,可點擊下載:GettingStarted.cpt
2.1 模板準備
打開模板 GettingStared.cpt ,先對模板做部分修改。修改内容如下:
在 A1 單元格将标題改爲公式 $地區+"地區銷售概況",修改報表 sheet 名稱爲公式 =A4 ,如下圖所示:
2.2 實現分頁導出
在參數面板添加按鈕後,爲按鈕添加 JS 事件實現分地區分頁導出。
2.2.1 添加導出按鈕
在參數面板中添加一個按鈕控件,将控件名字修改爲「導出EXCEL」,如下圖所示:
2.2.2 添加JS代碼
點擊「導出EXCEL」按鈕,在「控件設置」>「事件」處,添加一個「點擊」事件,如下圖所示:
JavaScript 代碼如下:
注:添加 JS 代碼後,注意添加事件參數,參數名:area,值爲公式:sql("FRDemo","select distinct 地區 from 銷量",1)
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);
2.3 效果預覽
2.3.1 PC 端
保存模板,點擊「分頁預覽」,在報表畫面點擊「導出Excel」按鈕,導出後一個地區一個 sheet 頁,效果如 1.1 節所示。
2.3.2 移動端
移動端及 HTML5 效果如下圖所示:
3. 行式報表
新建行式報表,實現場景 2 的效果,導出後每一組内容對應一個 sheet 頁。
3.1 模板準備
1)新建模板,新建數據集 ds1,sql 語句爲:SELECT * FROM [銷量] ORDER BY 地區
2)将 ds1 數據集中字段拖到 A1-F1單元格,設置單元格樣式,如下圖所示:
3)點擊 A1單元格,爲其添加「條件屬性」,實現分組分頁,其中分頁條件爲 :currentValue 不等於 '=HIERARCHY(A1)' and &A1!=1,如下圖所示:
注:條件屬性的作用爲若當前值和前一個值不相等就杭後分頁。HIERARCHY(A1)作用爲獲取上一個地區的值,A1 單元格擴展後第一個值的上一個值爲空,所以用 A1!=1 排除。
3.2 實現分頁導出
3.2.1 添加導出按鈕
在參數面板中添加一個按鈕控件,将控件名字修改爲「導出Excel」,如下圖所示:
3.2.2 添加JS代碼
點擊「導出EXCEL」按鈕,在「控件設置」>「事件」處,添加一個「點擊」事件,如下圖所示:
JavaScript 代碼如下:
//根據模板存儲位置和信息定義url
var url = 'http://localhost:8075/webroot/decision/view/report?viewlet=doc/SpecialSubject/ExcelImport/JS實現行式報表分Sheet導出Excel.cpt';
var pars = '&format=excel&extype=sheet&__filename__=2';//設置導出格式和導出文件名稱
url += pars;//給url添加導出參數
alert(url);//打印url
window.open(encodeURI(encodeURI(url)));//FR.cjkEncode(url)對url進行編碼
注:JS 代碼中 url 地址非固定,要根據模板名稱和模板存儲位置修改。
3.3 效果預覽
保存模板,點擊「分頁預覽」,在報表畫面點擊「導出EXCEL」按鈕,導出後一個地區一個 sheet 頁,效果如下圖所示:
注:不支持移動端
4. 模板下載
參數查詢報表已完成模板可參見:%FR_HOME%\webapps\webroot\WEBINF\reportlets\doc\SpecialSubject\ExcelImport\JS實現參數報表分Sheet導出Excel.cpt
點擊下載模板:JS實現參數報表分Sheet導出Excel.cpt
行式報表已完成模板可參見:%FR_HOME%\webapps\webroot\WEBINF\reportlets\doc\SpecialSubject\ExcelImport\JS實現行式報表分Sheet導出Excel.cpt
點擊下載模板:JS實現行式報表分Sheet導出Excel.cpt