作者:forsoz_627 | 来源:互联网 | 2023-08-29 17:27
一、ureport中表达式(其实也包含了函数,函数也是在表达式进行定义)
(1)基本表达式类型:数字(含小数位支持),字符串,布尔值
(2)支持加减乘除,求余数(%)。
(三)三元表达式:
可以看到,和普通的三元表达式一样,它的第一部分是条件部分,条件部分可以有多个条件(用and或or连接),“?”后面是条件满足后执行并返回的表达式部分,“:”后面则是条件不满足时执行返回的表达式部分。
(四)if用法:
if(A1>1000 and A1<20000){
return "正常值:"+A1
}else if(A>20000 and A1<40000){
return "超高值"
}else{
"低值"
}
(五)case用法:
case{
A1==100
return "正常值",
A1>100 and A1<1000
return &#39;偏高&#39;
}
二、单元格引用(表达式如何用法)
在报表当中,大多数的计算都是针对单元格或与单元格有关,因为报表中单元格多数都与数据绑定,而数据往往又是多条,所以计算后的报表一个单元格会产生多个,这样对于单元格的引用就变的比较复杂。
这里有一个概念牢记:
- 一个单元格的左边一定均是它的左父格;
- 一个单元格的上边一定均是它的上父格。
设定单元格的表达式,数据来源设定是来自同行或同列是:首先判断的是目标单元格与其所在单元格是否位于同一行或行,如果是则直接取对应行或列上目标单元格的值
如果当前单元格与目标单元格不在同一行或列: 这时候一个原则,找到其共同的左父格或者上父格的间接父单元格(即左父或者上父),然后把它的子单元格所有值取出来,例如:
(1)有共同的父格:
多个值的输出在 UReport2 中,如果取到值超过一个,输出时多个值间以“,”分隔,如上图所示。
(2)无共同的父格:
在上面的例子中,B2 单元格表达里输入 C1,因为 B2 和 C2 既不在同一行或列,也没有共同的父格,所以 B2 中将取到所有的 C1 单元格的值,如下图所示:
总结:目标格获取原则(重点记住)
由上面的例子可以看出,UReport2 中单元格表达式在取目标格值时,优先考虑的是目标格是否与其位于同一行或列,如果是则取与其位于同一行或列的目标单元格,如果不是,则取与当前单元格有共同父格的所有目标单元格,如果他们有共同的上父格或共同的左父格,那么就取共同上父格与共同左格交集部分的目标单元格;如果他们没有共同的父格,那么就取迭代后所有的目标单元格。
另一个重点记住:所以ureport提供了更改父格实现单元格的取值,有时候就是为了实现当前单元格与目标单元格拥有特定的父单元格。
(3)单元格座标:为了实现更复杂的单元格引用:用于做同比和环比
单元格坐标格式(即只有向上,向下位移的概念)
单元格名称[Li:li,Li-1:li-1,…;Ti:ti,Ti-1:ti-1…]{条件...}
L 表示左父格,l 表示左父格展示后的序号,序号为负值,表示向上位移;T 表示上父格,t 表示上父格展开后的序号,序号为负值,表示相对于当前单元格向上位移,正值则表示向下位移,如果只有左父格,那么直接写 L 部分即可;如果只是上父格,那么前面需要加上“;”号,然后写 T 部分,后面的大括号中是条件部分,多个条件之间用 and/or 连接,表示对通过坐标取到的单元格进行条件过滤(如果取到多个单元格的话),条件部分是可选的,相关示例如下:
单元格坐标示例 | 说明 |
---|
C1[A1:2,B1:1] | 在找 C1 时先找单元格 A1 展开后的第2格;再找第二个 A1 下的 B1 单元格展开后的第一个单元格,然后再找这个 B1 单元格对应的 C1 单元格 |
C2[A1:2,B1:2;C1:3] | 在找 C2 时,先找 A1 单元格展开后的第二格,再找第二个 A1 单元格下 B2 单元格展开后的第二格,再根据第二个展开的 B2 单元格找其下名为 C2 单元格的左子格;然后再找到 C1 单元格展开后的第三格,再看其下的 C2 单元格,取 C2 单元格的交集 |
C2[A1:2,B2:2]{C2>1000} | 表示取 A2 单元格展开后的第二格,再取其下 B2 单元格展开后第二格,再取 B2 下所有的 C2 单元格,最后再对取到的 C2 单元格进行条件过滤,只取出 C2 单元格值大于1000的所有 C2 单元格。 |
C2[A1:2,B2:2]{C2>1000 and C2<10000} | 表示取 A2 单元格展开后的第二格,再取其下 B2 单元格展开后第二格,再取 B2 下所有的 C2 单元格,最后再对取到的 C2 单元格进行条件过滤,只取出 C2 单元格值大于1000且小于10000的所有 C2 单元格的值。 |
引用所有单元格
如果我们需要引用所有单元格时,那么只需要在单元格名称后跟”[]“即可,如 A1[],表达引用所有 A1 单元格,而不管当前引用格所在位置,同时在引用所有单元格时,还可以后跟条件,以对引用格做进一步条件限制,如 A1[]{@>1000 and @<10000},表示要引用所有的 A1 单元格,但要求引用的 A1 单元格值要大于1000同时小于10000,这里的@符号是2.2.3及以后版本新增加的一个表达式符号,专门用于取条件循环中当前循环对象。