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