隔行异色是润乾报表的一大特色,它使得报表的可读性更强,页面也更加美观。利用背景色单元格内的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)
)
)
)