1. 概述编辑
1.1 问题描述
当需要根据不同用户不同地区导出多个报表时,不希望分别导出相应格式进行备份,比较麻烦,因此希望可以把多个报表同时导出成某种格式。下面详细介绍使用步骤:
1.2 实现思路
利用 window.open 来打开带导出参数 URL 的方式来实现 Excel 导出。相关参数如下所示:
参数 | 示例 |
---|---|
http://ip:port/webroot/decision/view/report?reportlets= | http://localhost:8075/webroot/decision/view/report?reportlets= |
1)报表中无参数时: [{reportlet:"/doc/reportname.cpt"},{reportlet:"/doc/reportname.cpt"},{...}] 其中{reportlet:"/doc/reportname.cpt"},是模板的访问路径; | [{reportlet:"/doc/Primary/CrossReport/Cross.cpt"},{reportlet:"/doc/Primary/DetailReport/Details.cpt"}] |
2)报表中有参数时: [{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{...}]paraname1:"paravalue1",是指导出各模板内容时,对应的参数名和参数值,多个参数中间用逗号隔开。 | [{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}] |
&format=XX,format后面的 XX,是指导出文件的格式 | &format=excel 批量导出时导出的是一个文件,如果是excel,则会将多个报表导出在多个 sheet 中。 |
&__filename__=name,对导出的文件重命名"name"就是自定义的文件名 | &__filename__=export 重命名为 export。 |
完整的示例:
http://localhost:8075/webroot/decision/view/report?reportlets=[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]&format=excel&__filename__=export
含义:
导出地区参数为华北的 Parameter.cpt 和无参数 Cross.cpt 到 Excel 中,其中 sheet1 显示 Cross 里的内容,sheet2 显示 Detatil 里的内容;并且 Excel 重命名为 export。
2. 操作步骤编辑
2.1 示例
用一个按钮来实现导出地区参数为华北的 Parameter.cpt 和无参数 Cross.cpt 到 Excel 中,代码如下:
<button
type="button"
onclick="window.open(encodeURI('/webroot/decision/view/report?reportlets=
[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},
{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]'+'&format=excel'))">导出[Excel]
</button>
注:高版本的 Tomcat 不支持 [] / {} 特殊符号,URL 需要使用编码后的 URL,否则无法生效,详细点击 编码转换。
注:自定义批量导出时,如果在导出的同时还在下载多个文件,推荐将浏览器的安全级别降低,避免被浏览器将导出文件判定为不安全文件。
但是由于 HTML 中,双引号 " 需要转义成 " 修改后,代码如下:
<button
type="button"
onclick="window.open(encodeURI('/webroot/decision/view/report?reportlets=
[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},
{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]'+'&format=excel'))">导出[Excel]
</button>
完整代码如下:
<html>
<head>
<title>FineReport自定义导出</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<button
type="button"
onclick="window.open(encodeURI('/webroot/decision/view/report?reportlets=
[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},
{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]'+'&format=excel'))">导出[Excel]
</button>
<iframe id="reportFrame" width="100%" height="100%" ></iframe>
</body>
</html>
2.2 效果预览
已完成示例请参照%FR_HOME%/webapps/webroot/help/page_demo/export.html
启动设计器,输入http://localhost:8075/webroot/help/page_demo/export.html,点击导出 Excel,即可导出 Excel,效果如下图所示: