历史版本16 :自定义批量导出按钮 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 问题描述编辑

当需要根据不同用户不同地区导出多个报表时,不希望分别导出相应格式进行备份,比较麻烦,希望可以把多个报表同时导出成某种格式了。这样要怎样实现呢?下面详细介绍使用步骤:

2. 原理编辑

当您批量导出的报表中无参数时,可以将页面地址改为如下格式:
http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:"/doc/Primary/CrossReport/Cross.cpt"},{reportlet:"/doc/Primary/DetailReport/Details.cpt"}]&format=XX
注:比如导出excel时,sheet1显示Cross里的内容,sheet2显示Detatil里的内容
当您批量导出的报表中带有参数时,可使将页面地址改为如下格式:
http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1",paraname2:"paravalue2",...},{...}]&format=XX
注:format后面的XX,是指导出文件的格式,如果导出的是pdf,就写&format=pdf。其中{reportlet:"/doc/reportname.cpt"},是模板的访问路径;paraname1:"paravalue1",是指导出各模板内容时,对应的参数名和参数值,多个参数中间用逗号隔开。
另:批量导出时导出的是一个文件,如果是excel,则会将多个报表导出在多个sheet中。
批量导出时,如果需要对导出的文件重命名,可以在url后面加上"&__filename__=name","name"就是自定义的文件名.
http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:"/doc/reportname.cpt",paraname1:"paravalue1"}]&format=XX&__filename__=name
例如,将两张报表导出为excel,且重命名为export:http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]&format=excel&__filename__=export

3. 实现步骤编辑

我们用一个按键来实现无参数导出成excel格式,只需要添加一个+'&format=excel按钮,将路径设置为上述格式,代码如下
<button type="button" onclick="window.open(FR.cjkEncode('/WebReport/ReportServer?reportlets=[{reportlet:"/doc/Primary/Parameter/Parameter.cpt",地区:"华北"},{reportlet:"/doc/Primary/CrossReport/Cross.cpt"}]'+'&format=excel'))">导出[Excel]</button>
上面的按钮的作用是导出地区参数为华北的Parameter.cpt和无参数Cross.cpt

注:自定义批量导出时,如果在导出的同时还在下载多个文件,推荐将浏览器的安全级别降低,避免被浏览器将导出文件判定为不安全文件。

但是由于html中,双引号 " 需要转义成 &quot;  修改后,代码如下:

<button type="button" onclick="window.open(FR.cjkEncode('/WebReport/ReportServer?reportlets=[{reportlet:&quot;/doc/Primary/Parameter/Parameter.cpt&quot;,地区:&quot;华北&quot;},{reportlet:&quot;/doc/Primary/CrossReport/Cross.cpt&quot;}]'+'&format=excel'))">[]导出[Excel]</button> 

完整代码如下:

<html> <head> <title>FineReport自定义导出</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script> </head> <body> <button type="button" onclick="window.open(FR.cjkEncode('/WebReport/ReportServer?reportlets=[{reportlet:&quot;/doc/Primary/Parameter/Parameter.cpt&quot;,地区:&quot;华北&quot;},{reportlet:&quot;/doc/Primary/CrossReport/Cross.cpt&quot;}]'+'&format=excel'))">[]导出[Excel]</button> <iframe id="reportFrame" width="100%" height="100%" ></iframe> </body> </html>

4. 效果预览编辑


222