1. 程式人生 > >潤乾報表隔行異色,N行異色,分層異色

潤乾報表隔行異色,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)

)

)

)