一、实现思路:
1、将点击的分组序号存入“动态参数”;2、通过“条件属性”判断是否存在此行分组序号,决定行高的显示和隐藏。
二、明确概念:
1、&b2:获取单元格b2扩展后的分组序号
2、split($a,",") 将字符串a用逗号分割成数组。
3、inarray(b,array) 返回b在数组array的位置,没有则返回0。
4、GREPARRAY(array,item != &b2) 在数组array种过滤掉&b2,形成新的数组。
5、JOINARRAY(array,",") 将数组转化为一个由逗号分割的字符串。
三、具体操作
1、“超级链接”里建立“动态参数” a,首先的想法是通过点击“节点ID”,将分组序号存入a中,编辑动态参数a的值为$a + &b2,结果为,1,2,3,4。结果前面有个“,”所以需要用if语句初始化下起始状态if(len($a)=0,&b2,$a +','+ &b2)
2、多次点击同一个“节点ID”,结果为1,1,1,2,3,3,显然我们不想要重复的值,所以增加if判断,如果参数a中由&b2,就不添加。将动态参数a的值改为if(len($a)=0,&b2,if(inarray(&b2,split($a,','))>0,$a,$a +','+ &b2)),意思是当前行的分组序号在参数a中就返回参数a,否则就在参数a中加上分组序号。
到此,我们实现了点击“节点ID”就会在a中增加当前行的分组序号
3、再次点击同一个“节点ID”虽然不重复增加,但要实现再次点击,减少当前行的分组序号。所以修改动态参数a的值为if(len($a)=0,&b2,if(inarray(&b2,split($a,','))>0,JOINARRAY(GREPARRAY(split($a,','),item!=&b2),','),$a +','+ &b2))解释下为什么突然变得这么长,重要的公式是GREPARRAY(array,item != &b2),因为公式GREPARRAY的参数array为数组,所以用split将字符串转化为数组。因为GREPARRAY返回值为数组,所以用JOINARRAY将数组转化为字符串。
至此,动态参数a已经完成编写。
点击“节点ID“实现动态展开和折叠,需要设置“条件属性”-”行高“。
设置条件属性1-折叠,当前分组序号&b2,若不在$a中,并且当前节点序号值大于1,则行高为0。
如果&b2在参数$a中,则设置行高为模板中的行高值。
至此完成行的折叠