页面树结构
转至元数据结尾
转至元数据起始

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如报表使用冻结,或多个宏代码冲突等),需根据实际需求开发代码。

示例说明

客户需求:在电子表格报表中,存在 开始时间结束时间 参数,客户的需求是开始时间不能大于结束时间,若大于则弹出提示。类似上述需求,可以参照如下方法进行设置。

实例效果如下:

版本及客户端说明

1.smartbi版本:V9

2.客户端:PC

3.浏览器:IE11、谷歌浏览器(Chrome)、火狐浏览器(Firefox)

设置方法

1、首先在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。

示例中有开始时间及结束时间参数:

2、在浏览器的“分析展现”节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。

3、在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onRenderReport、并把下面宏代码复制到代码编辑区域。

宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRenderReport


宏代码

function main(spreadsheetReport) {
   if(!spreadsheetReport._jhy_doRefresh){  
    spreadsheetReport._jhy_doRefresh = spreadsheetReport.doRefresh;}
    spreadsheetReport.doRefresh = function(fromButton, delayMask) {
        //根据参数名称获取参数值
        var endtime = new Date(spreadsheetReport.getParameterValue("结束日期"));
        var starttime = new Date(spreadsheetReport.getParameterValue("开始日期"));
        if (endtime < starttime) {
            setTimeout(function() {
                alert("结束时间不能早于起始时间");
            }, 100);
            return;
        }
        this._jhy_doRefresh(fromButton, delayMask);
    };
}      


注:如果电子表格设置了局部刷新,可参考以下宏代码(对象和事件不变)。

function main(spreadsheetReport) {
    spreadsheetReport.doRefreshSheet = function() {
        if (this.autoRefresh == 1)
            this.doRefresh();
        else {
            var endtime = new Date(spreadsheetReport.getParameterValue("结束日期"));
            var starttime = new Date(spreadsheetReport.getParameterValue("开始日期"));
            if (endtime < starttime) {
                setTimeout(function() {
                    alert("结束时间不能早于开始时间");
                }, 100);
                return;
            }
            this.doAjaxRefresh();
        }
    }
}


注:结束时间减去开始时间大于90天时弹出提示,可参考以下宏代码。

实例效果如下:

宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRenderReport

宏代码

function main(spreadsheetReport) {
    spreadsheetReport._jhy_doRefresh = spreadsheetReport.doRefresh;
    spreadsheetReport.doRefresh = function(fromButton, delayMask) {
        var endtime = new Date(spreadsheetReport.getParameterValue("结束日期").replace(/\-/g, "/"));
        var starttime = new Date(spreadsheetReport.getParameterValue("开始日期").replace(/\-/g, "/"));
        if (endtime.getTime() - starttime.getTime() > 1000 * 3600 * 24 * 90) {
            setTimeout(function() {
                alert("两个参数的差不能超过90天");
            },
            100);
            return;
        }
        this._jhy_doRefresh(fromButton, delayMask);
    }
}

资源下载

资源: migrate.xml