1. 概述
1.1 版本
报表服务器版本 | 功能变动 |
---|---|
11.0 | - |
1.2 应用场景
实现每个月的日历,并可以通过点击按钮切换上下月。如下图所示:
1.3 实现思路
1)设置模板参数。
2)设计表格, A1 单元格的左父格设置为 A2 , A2 单元格插入公式,横向扩展, A3 单元格插入公式,纵向扩展。
3)A1 单元格设置三个条件属性,一个条件属性显示月份,另外两个条件属性实现点击后跳转到上月或下月。
4)A2 单元格设置自定义数据字典形态,显示星期几。
5)A3 单元格设置公式形态,显示日,设置两个条件属性,使星期六、星期日的日期显示为红色,非当月的日期显示为灰色。
2. 示例
2.1 新建报表
点击菜单栏「文件>新建普通报表」。如下图所示:
2.2 设置模板参数
点击菜单栏「模板>模板参数」,设置参数名为 rq ,默认值为公式:today(),即参数的默认值为当前日期。如下图所示:
2.3 设计表格
1)选中 A1 单元格,设置 A1 的左父格为 A2 。如下图所示:
2)选中 A2 单元格,插入公式:[1,2,3,4,5,6,0] 。如下图所示:
注:有些系统使用 dateinweek() 函数获取到的第一天是周日的日期。此时只需把 A2 单元格的公式改为[0,1,2,3,4,5,6]。
3)选中 A3 单元格,插入公式:GREPARRAY(range(dateinweek(dateinmonth($rq, 1), 1), dateinweek(dateinmonth($rq, -1), -1)), weekday(item) = A2)。
公式说明如下表所示:
公式 | 说明 |
---|---|
dateinmonth($rq, 1) | 返回当月第一天 |
dateinmonth($rq, -1) | 返回当月最后一天 |
dateinweek(dateinmonth($rq, 1), 1) | 返回当月第一天所在周的第一天 |
dateinweek(dateinmonth($rq, -1), -1) | 返回当月最后一天所在周的最后一天 |
range(dateinweek(dateinmonth($rq, 1), 1), dateinweek(dateinmonth($rq, -1), -1)) | 返回当月第一天所在周的第一天和当月最后一天所在周的最后一天之间的日期 |
GREPARRAY(range(dateinweek(dateinmonth($rq, 1), 1), dateinweek(dateinmonth($rq, -1), -1)), weekday(item) = A2) | 过滤出符合星期几的日期 |
4)选中 A2 单元格,设置扩展方向为「横向扩展」。如下图所示:
5)选中 A3 单元格,设置扩展方向为「纵向扩展」。如下图所示:
2.4 A1单元格添加条件属性
1)选中 A1 单元格,添加条件属性1。当 A2=4 时,新值为公式:left($rq,7),即返回参数rq的前8个字符,即在星期四的上方显示月份。如下图所示:
2)选中 A1 单元格,添加条件属性2。当 A2=1 时,新值为字符串:<,超级链接类型为动态参数,参数名为:rq,值为公式:monthdelta($rq,-1),即在星期一的上方显示「<」,点击后可跳转到上月。如下图所示:
3)选中 A1 单元格,添加条件属性3。当 A2=0 时,新值为字符串:>,超级链接类型为动态参数,参数名为:rq,值为公式:monthdelta($rq,1),即在星期日的上方显示「>」,点击后可跳转到下月。如下图所示:
2.5 A2 单元格设置形态
选中 A2 单元格,设置形态为「数据字典」,类型设置为「自定义」,即显示具体的星期几,如下图所示:2.6 A3单元格设置形态、添加条件属性
1)选中 A3 单元格,设置形态为「公式形态」,公式为:day($$$),即返回当前日期的日,如下图所示:
2)选中 A3 单元格,添加条件属性1。当 A2 = 0 || A2 = 6 时,当前格子字体颜色为红色,|| 表示 或 ,即周六或周日的日期字体颜色为红色,如下图所示:
3)选中 A3 单元格,添加条件属性2。当 month($$$) <> month($rq) 时,当前格子字体颜色为灰色,<>表示 不等于 ,即非当月的日期字体颜色为灰色,如下图所示:
2.7 效果预览
2.7.1 PC端
保存报表,点击「分页预览」,效果如下图所示:
2.7.2 移动端
App 与 HTML5 端效果相同,如下图所示:
3. 下载模板
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\动态日历表.cpt
点击下载已完成模板:动态日历表.cpt