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