历史版本9 :JS实现分Sheet导出Excel 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

Excel 导出时,用户希望实现分组分 sheet 导出,即每个sheet 页中报表格式相同,内容不同。如下图所示,sheet 1为华东地区销售概况,sheet 2 为华北地区销售概况。

2020-09-25_10-12-19.gif

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 ,如下图所示:

image.png

2.2 实现分页导出

在参数面板添加按钮后,为按钮添加 JS 事件实现分地区分页导出。

2.2.1 添加导出按钮

在参数面板中添加一个按钮控件,将控件名字修改为「导出EXCEL」,如下图所示:

image.png

2.2.2 添加JS代码

点击「导出EXCEL」按钮,在「组件设置」>「事件」处,添加一个「点击」事件,如下图所示:

image.png

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 效果如下图所示:

367ddb6e-e79c-4e9b-bd04-28fea1ba78ff.jpg

3. 行式报表编辑

新建行式报表,实现场景 2 的效果,导出后每一组内容对应一个 sheet 页。

3.1 模板准备

1)新建模板,新建数据集 ds1,sql 语句为:SELECT * FROM [销量] ORDER BY 地区

2)将 ds1 数据集中字段拖到 A1-F1单元格,设置单元格样式,如下图所示:

image.png

3)点击 A1单元格,为其添加「条件属性」,实现分组分页,其中分页条件为 :currentValue 不等于 '=HIERARCHY(A1)' and &A1!=1,如下图所示:

注:条件属性的作用为若当前值和前一个值不相等就杭后分页。HIERARCHY(A1)作用为获取上一个地区的值,A1 单元格扩展后第一个值的上一个值为空,所以用 A1!=1 排除。

2020-09-25_14-35-10.jpg

3.2 实现分页导出

3.2.1 添加导出按钮

在参数面板中添加一个按钮控件,将控件名字修改为「导出Excel」,如下图所示:

2020-09-25_14-42-57.jpg

3.2.2 添加JS代码

点击「导出EXCEL」按钮,在「组件设置」>「事件」处,添加一个「点击」事件,如下图所示:

2020-09-25_14-46-37.jpg

JavaScript 代码如下:

//根据模板存储位置和信息定义url
var url = 'http://localhost:8075/webroot/decision/view/report?viewlet=test2.cpt';
var pars = '&format=excel&extype=sheet&__filename__=2';//设置导出格式和导出文件名称
url += pars;//给url添加导出参数
alert(url);//打印url
window.open(FR.cjkEncode(url));//FR.cjkEncode(url)对url进行编码

注:JS 代码中 url 地址非固定,要根据模板名称和模板存储位置修改。

3.3 效果预览

保存模板,点击「分页预览」,在报表画面点击「导出EXCEL」按钮,导出后一个地区一个 sheet 页,效果如下图所示:

注:不支持移动端

2020-09-25_15-13-54.gif

4. 模板下载编辑

参数查询报表已完成模板可参见:%FR_HOME%\webapps\webroot\WEBINF\reportlets\doc\SpecialSubject\ExcelImport\test1.cpt

点击下载模板:test1.cpt

行式报表已完成模板可参见:%FR_HOME%\webapps\webroot\WEBINF\reportlets\doc\SpecialSubject\ExcelImport\test2.cpt

点击下载模板:test2.cpt