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

目录:

1. 概述编辑

1.1 问题描述

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

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

1.2 实现思路

添加 JS 实现:通过 JS 在报表 URL 后面缀导出参数,导出参数包括导出格式和导出页数。

不同的场景对应不同的实现方法,如下两种场景:

场景1:用户模板做了参数为空选择全部,在正常预览的情况下,点击按钮导出 Excel,导出后每个参数值对应的报表内容在一个 Sheet 页。

场景2:行式报表,按组分页后,导出后每一组内容对应一个 Sheet 页。

2. 示例一编辑

使用内置的模板 GettingStared.cpt 实现场景1的效果,导出后一个地区一个 Sheet 页。

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=';
var pars = '&format=excel&__filename__=1';
var path = "${reportName}";
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 += jsonStr;
url += pars;
alert(url);
window.open(url);

2.3 效果预览

保存模板,点击「分页预览」,在报表画面点击「导出Excel」按钮,导出后一个地区一个 Sheet 页,效果如 1.1 节所示。

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 代码如下:

var url = 'http://localhost:8075/webroot/decision/view/report?viewlet=test2.cpt';
var pars = '&format=excel&extype=sheet&__filename__=2';
url += pars;
alert(url);
window.open(FR.cjkEncode(url));

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

3.3 效果预览

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

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

4. 模板下载编辑

示例一:

已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExcelImport\test1.cpt

点击下载模板:test1.cpt

示例二:

已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExcelImport\test2.cpt

点击下载模板:test2.cpt