历史版本7 :JS实现自定义按钮快速给参数赋指定范围值 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 需求分析编辑
平时我们接触的很多项目,可能都会需要制作相关的周报、月报、、季报、年报等表样。像这样的报表,选择适当的参数(时间)范围就显得尤其重要了。但如果每次都手动去选择又觉得太过麻烦。现在我来介绍一种快速定位法,只需点击某个按钮,就能准确定位到合适的时间范围!如图:
效果一:根据系统时间获取周报、月报、、季报、年报范围值
效果二:根据自定义日期值获取周报、月报、、季报、年报范围值
2. 实现方法编辑
通过在参数栏添加按钮,在按钮上添加JavaScript点击事件给指定参数赋值的方法来实现!
3. 示例(一)编辑
3.1 报表样式
新建一个工作簿,添加模板参数B和E:
报表样式如下:
3.2 日期控件设置
切换至参数面板,新建二个日期控件,控件名分别为:B和E
日期控件格式设为yyyy-MM-dd
3.3 按钮控件设置
再添加一个按钮控件,设置控件值:,并给控件添加一个JavaScript点击事件:
【本周】JavaScript脚本:
//获取当前日期所在周的第一天
var K1='${=dateInWeek(TODATE(),1)}';
//获取当前日期所在周的最后一天
var K2='${=dateInWeek(TODATE(),-1)}';
//获取控件(开始时间)
var state1= this.options.form.getWidgetByName("B");
//获取控件(结束时间)
var state2= this.options.form.getWidgetByName("E");
//给控件(开始时间)赋值
state1.setValue(K1);
//给控件(结束时间)赋值
state2.setValue(K2);
同理添加【本月】、【本季】、【本年】按钮,并设置JavaScript点击事件。
【本月】JavaScript脚本:
//获取当前日期所在月份的第一天
var K1='${=DATEINMONTH(TODATE(),1)}';
//获取当前日期所在月份的最后一天
var K2='${=DATEINMONTH(TODATE(),-1)}';
//获取控件(开始时间)
var state1= this.options.form.getWidgetByName("B");
//获取控件(结束时间)
var state2= this.options.form.getWidgetByName("E");
//给控件(开始时间)赋值
state1.setValue(K1);
//给控件(结束时间)赋值
state2.setValue(K2);
【本季】JavaScript脚本:
//获取当前日期所在季度的第一天
var K1='${=dateINQUARTER(TODATE(),1)}';
//获取当前日期所在季度的最后一天
var K2='${=dateINQUARTER(TODATE(),-1)}';
//获取控件(开始时间)
var state1= this.options.form.getWidgetByName("B");
//获取控件(结束时间)
var state2= this.options.form.getWidgetByName("E");
//给控件(开始时间)赋值
state1.setValue(K1);
//给控件(结束时间)赋值
state2.setValue(K2);
【本年】JavaScript脚本:
//获取当前日期所在年份的第一天
var K1='${=DATEINYEAR(TODATE(),1)}';
//获取当前日期所在年份的最后一天
var K2='${=DATEINYEAR(TODATE(),-1)}';
//获取控件(开始时间)
var state1= this.options.form.getWidgetByName("B");
//获取控件(结束时间)
var state2= this.options.form.getWidgetByName("E");
//给控件(开始时间)赋值
state1.setValue(K1);
//给控件(结束时间)赋值
state2.setValue(K2);
最后添加查询按钮,完成效果如下:
保存预览,效果如图一所示。
4.示例(二)编辑
4.1 日期控件设置
切换至参数面板,新建三个日期控件,控件名分别为:RQ、B_TIME、E_TIME
注:日期控件格式设为:yyyy-MM-dd,将【RQ控件】的返回类型设置成:字符串
4.2 按钮控件设置
再添加4个按钮控件,并给控件添加一个JavaScript点击事件,以【周报】按钮为例:
【周报】JavaScript脚本:
//获取到RQ控件值,并赋值给参数RQ
var RQ=this.options.form.getWidgetByName("RQ").getValue();
//获取参数RQ所在周的第一天,并赋值给参数s
var s=FR.remoteEvaluate('FORMAT(DATEINWEEK("'+RQ+'",1),"yyyy-MM-dd")');
//获取参数RQ所在周的最后一天,并赋值给参数e
var e=FR.remoteEvaluate('FORMAT(DATEINWEEK("'+RQ+'",-1),"yyyy-MM-dd")');
//给控件B_TIME赋值
this.options.form.getWidgetByName("B_TIME").setValue(s);
//给控件E_TIME赋值
this.options.form.getWidgetByName("E_TIME").setValue(e);
【月报】JavaScript脚本:
var RQ=this.options.form.getWidgetByName("RQ").getValue();
var s=FR.remoteEvaluate('FORMAT(DATEINMONTH("'+RQ+'",1),"yyyy-MM-dd")');
var e=FR.remoteEvaluate('FORMAT(DATEINMONTH("'+RQ+'",-1),"yyyy-MM-dd")');
this.options.form.getWidgetByName("B_TIME").setValue(s);
this.options.form.getWidgetByName("E_TIME").setValue(e);
【季报】JavaScript脚本:
var RQ=this.options.form.getWidgetByName("RQ").getValue();
var s=FR.remoteEvaluate('FORMAT(DATEINQUARTER("'+RQ+'",1),"yyyy-MM-dd")');
var e=FR.remoteEvaluate('FORMAT(DATEINQUARTER("'+RQ+'",-1),"yyyy-MM-dd")');
this.options.form.getWidgetByName("B_TIME").setValue(s);
this.options.form.getWidgetByName("E_TIME").setValue(e);
【年报】JavaScript脚本:
var RQ=this.options.form.getWidgetByName("RQ").getValue();
var s=FR.remoteEvaluate('FORMAT(DATEINYEAR("'+RQ+'",1),"yyyy-MM-dd")');
var e=FR.remoteEvaluate('FORMAT(DATEINYEAR("'+RQ+'",-1),"yyyy-MM-dd")');
this.options.form.getWidgetByName("B_TIME").setValue(s);
this.options.form.getWidgetByName("E_TIME").setValue(e);
最后添加查询按钮,完成效果如下:
保存预览,效果如图二所示。