反馈已提交

网络繁忙

根据参数批量导出多个文件

  • 文档创建者:L大大
  • 编辑次数:6次
  • 最近更新:Leo.Tsai 于 2021-10-15
  • 1. 概述

    1.1 预期效果

    实际业务场景中,可能会遇到需要从当前表筛选数据并分别导出为多个文件,如下图所示:

    48F073FC-F0CC-447C-B090-5C7F66E7270C.GIF

    1.2 实现思路

    参数面板中添加「按钮控件」并设置「点击事件」,获取「下拉复选框控件」选中的参数,点击按钮批量导出当前表。

    2. 示例

    2.1 数据准备

    新建普通报表,新建数据库查询 ds1,SQL 查询语句为: 

    SELECT * FROM 库存

    where 1=1 ${if(len(仓库) == 0,"","and 仓库 in ('" + 仓库 + "')")}

    where 1=1 表示条件永真,防止没有参数条件时,where 后面没有有效内容导致出错。

    len(仓库)==0 表示参数「仓库」为空。

    and 仓库 in ('"+area+"')中间的「仓库」表示获取的参数值,+ 为字符串拼接符号。

    查询语句表示:

    参数「仓库」为空时,查询语句相当于:SELECT * FROM 库存 

    当参数「仓库」不为空时,查询语句相当于:SELECT * FROM 库存 WHERE 1=1 and 仓库='${仓库}' 

    1611279495548499.png

    2.2 报表设计

    具体样式设置请参见模板%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExportReport\根据参数批量导出多个文件.cpt

    1611279922907329.png

    注意:仓库数据列所在的 A5 单元格需要添加过滤条件,根据参数展示数据,条件之间用「and」连接,具体如下图所示:

    1611281837654210.png

    2.3 控件设置

    1)编辑参数界面,将参数「全部添加」进参数面板。

    1611283215214404.png

    2)设置「期初」和「期末」参数控件类型为「日期控件」,并设置默认日期。

    1611283384516913.png

    3)设置「仓库」参数为「下拉复选框控件」,设置控件「数据字典」为 数据库 FRDemo 中「库存」表,实际值与显示值均为「仓库」列。返回值类型选择「字符串」,分隔符手动输入「','」。

    Snag_55ec7e8.png

    4)将查询按钮名称修改为「生成库存台账」。

    5)拖入按钮控件,修改名称为「批量导出」。调整控件位置,最后界面如下图所示:

    1611283950458693.png

    2.4 添加点击事件

    选中「批量导出」按钮,添加点击事件,输入 JavaScript 代码如下:

    注:将代码中 &format=excel 中 excel 修改为 word、pdf 即可以导出对应格式文件。

    function ForTime(oldTime) {
    Date.prototype.format = function(fmt) {
    var o = {
    "M+": this.getMonth() + 1,
    "d+": this.getDate(),
    "h+": this.getHours(),
    "m+": this.getMinutes(),
    "s+": this.getSeconds(),
    "q+": Math.floor((this.getMonth() + 3) / 3),
    "S": this.getMilliseconds()
    };
    if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
    if (new RegExp("(" + k + ")").test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    }
    }
    return fmt;
    }
    var oldTime = (new Date(oldTime)).getTime();
    var curTime = new Date(oldTime).format("yyyy-MM-dd");
    return curTime;
    }

    var url = '根据参数批量导出多个文件.cpt';
    var name = _g().getParameterContainer().getWidgetByName("仓库").getValue();
    var qc = _g().getParameterContainer().getWidgetByName("期初").getValue();
    var qm = _g().getParameterContainer().getWidgetByName("期末").getValue();

    var arr = name.split("','");

    for (var i = 0; i < arr.length; i++) {
    var pars = '&format=excel&extype=sheet&__filename__=' + arr[i];
    window.open("${servletURL}?viewlet=" + encodeURI(url + pars) + "&仓库=" + encodeURI(arr[i]) + "&期初=" + encodeURI(ForTime(qc)) + "&期末=" + encodeURI(ForTime(qm)), "_blank");
    }

    Snag_91019bd.png

    2.5 效果预览

    保存报表,为了避免分页效果,我们点击「数据分析」预览,效果如 1.1 节预期效果一致。

    注1:如果发现只能导出一个 Excel 的话,确认代码无误的情况下,需要把浏览器的禁止弹窗设为允许。

    注2:不支持 IE 浏览器。不支持移动端。

    3. 模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExportReport\根据参数批量导出多个文件.cpt

    点击下载模板:根据参数批量导出多个文件.cpt

    附件列表


    主题: 报表专题
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    7*24h

    智 能客 服