潤乾報表隔行異色,N行異色,分層異色

          隔行異色是潤乾報表的一大特色,它使得報表的可讀性更強,頁面也更加美觀。利用背景色單元格內的IF函數及row()函數獲取當前行號,可以讓相鄰行的單元格異色。

        其實還有一種拓展性更強的方式:case()函數,case(row()%2,list(0),rgb(255,0,0),list(1), rgb(0,0,255))即表示改行的行號對2求餘,偶數行紅色,奇數行藍色。可以通過用戶自定義增加異色行數,case(row()%3,list(0),rgb(255,0,0),list(1),rgb(0,0,255),list(2),rgb(0,0,255)),則改爲3行異色,對3求餘,餘數分別是0,1,2的行號顏色爲紅色,藍色,綠色。

          rand()函數表示隨機生成一個大於等於0小於1的數字,此函數可以爲報表提供動態隨機顏色,比如爲所有單元格設定背景色rgb(int(rand()*255), int(rand()*255), int(rand()*255))即可實現全表全色隨機,但是rand()在一次表運算時,是一個固定值,表內所有的rand()函數都返回同一值,而且只在每次重新預覽或刷新網頁時改變,因此rand()只能提供一個動態偏移量。

        可以利用行號的不同來進行色彩分佈,比如設定顏色如下:

rgb((row()*row()*row()*row()+1000*rand()*row())%255,(row()*row()*row()+1000*rand()*row())%255,(row()*row()+1000*rand()*row())%255)

        則能實現每次顏色都各不相同,深淺分佈也居中

 

        行號的利用在合併格里並不能得到很好的表現,因爲合併格的行號默認爲最頂端行號,將會出現下圖的效果:

        當然,可以在第一列後加一個隱藏的輔助運算列,逐行遞加,然後根據該列value值進行隔行異色,第一列表現得不錯,但是在後面的顏色銜接上還是顯得唐突:

        那麼如何才能讓每一個子類的首行繼承父類的顏色並且加入一種新的顏色進行隔行異色呢?如下圖:

        保證了每一行的顏色連貫性,並且在數據的子類細分上,顏色也各有子類區分。

方法依然是爲每一個group分組設定隱藏輔助運算列B、D、F:

        但是在邏輯上要求比較嚴謹:

D2單元格表達式:=b=b+if((row(C2)-row(B2))==0 and (b+B2)%2==0,0,1)*1。

F2單元格表達式:=c=c+if((row(E2)-row(D2))==0 and (c+D2)%2==0,0,1)*1。

        這樣能夠保證子類遞加,而且首行奇偶性跟隨父類。

再爲D2的背景色根據B2擴展新顏色:if(B2{}%2==0,if(value()%2==0,rgb(153,255,153),rgb(255,255,153)),if(value()%2==0,rgb(255,153,255),rgb(255,153,153)))

其中標紅的爲B2格原有顏色,另兩種是新增顏色

 

F2的背景色設定爲:

if(B2{}%2==0,

    if(D2{}%2==0,

        if(value()%2==0,

            rgb(153,255,153),

            rgb(204,255,204)

        ),

        if(value()%2==0,

            rgb(255,255,204),

            rgb(255,255,153)

        )

    ),

    if(D2{}%2==0,

        if(value()%2==0,

            rgb(255,153,255),

            rgb(255,204,255)

        ),

        if(value()%2==0,

            rgb(255,204,204),

            rgb(255,153,153)

        )

    )

)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章