单元格函数

阅读(20962) 标签: 单元格函数,

本部分介绍了报表中常用单元格函数的函数说明、语法、参数说明、返回值、选项以及示例。

avg()

函数说明:

对可扩展单元格或集合表达式求平均值

语法:

avg(exp)

avg(cellExp,exp)

参数说明:

exp

需要求平均值的单元格或表达式,一般为可扩展单元格或集合表达式

cellExp

单元格或单元格集合,以cellExp里的单元格为当前格计算表达式exp

返回值:

实数

选项:

@a

null元素也进行计数

示例:

1avg([A1:B10]) 求得A1B10之间单元格的平均值,注意是以当前格为基格计算A1B10

2avg(arg1)  其中arg1是整数组,表示求得arg1中所有数据的平均值

3avg(B1{})  表示求得当前主格扩展区域内所有扩展后的B1单元格的平均值

4avg(B1[`0]{}) 表示求得根坐标下所有扩展后的B1单元格的平均值

5avg@a(list(2,4,null))返回2,如果省略@a则返回3

6avg(A1[`0]{},B1+C1) 计算分别与每个A1相对应的B1C1的和的平均值 

call()

函数说明:

执行存储过程,返回结果数据集合,只能返回单列数据,如果存储过程返回多个字段,则返回第一个字段的结果值

语法:

call(sqlStatement{,arg1{,arg2{,arg3{,……}}}}{;dbName})

参数说明:

sqlStatement

合法的调用存储过程的sql语句

arg(n)

sql语句的参数,可以是常数也可以是表达式,如果是输出结果集的参数,对应的参数表达式写成"@@result"

dbName

数据源名称

返回值:

一组数据的集合,由结果集的第一个字段决定数据类型,如果结果集是多列,只返回第一列

示例:

1call("{call ResultSet (?,?,?)}","@@result","000001",A2)

表示执行存储过程ResultSet,第一个输出参数输出结果集,第二、三个参数传入"000001",A2作为参数值

2call("{call ResultSet (?)}","000001";"demo")

表示对数据源demo执行存储过程ResultSet,第一个参数传入"000001"

case()

函数说明:

根据表达式的不同计算结果,返回不同的值。本函数:从左到右计算,先出现的表达式先算,如果出现满足的表达式,则返回相应的结果,后面的不再计算。如果没有一个表达式满足条件,而且有缺省值表达式,则返回缺省值,否则返回null

语法:

case(Exp{,valueExp1:resultExp1{,valueExp2:resultExp2{,...{;defaultExp}}}})

参数说明:

Exp

判断用到的表达式

valueExp(n)

值表达式

resultExp(n)

返回结果表达式

defaultExp

缺省值表达式,如果所有表达式结果都不满足,则返回本表达式计算结果

示例:

1case(4,1:"Dept 1",2:"Dept 2",3:"Dept 3";"Admin Dept")

运算结果为:" Admin Dept "

2case(4,1:"Dept 1",2:"Dept 2",3:"Dept 3")

运算结果为:null

3case(3,1:"Dept 1",2:"Dept 2",3:"Dept 3";"Admin Dept")

运算结果为:"Dept 3"

cell()

函数说明:

在平面内取单元格,注意这里的单元格是运算后的单元格

语法:

cell({cellExp}{,rowOffsetExp{,colOffsetExp}})

参数说明:

cellExp

单元格表达式(不写表示当前单元格)

rowOffsetExp

整数的相对cellExp的行偏移量表达式

colOffsetExp

整数的相对cellExp的列偏移量表达式

示例:

1cell(,1,-5) 取得当前单元格的下一行,左边5列的单元格

2cell(C1)  取得与当前单元格的偏移为当前单元格的源格与C1的偏移的单元格

3cell(D1,1,3) 取得D1的下一行,右边3列的单元格

col()

函数说明:

取得当前单元格所在列的列号

语法:

col({cellExp})

参数说明:

cellExp

单元格表达式(不写表示当前单元格)

返回值:

整数

示例:

B列单元格中写入=col(),返回值为2,如果B列存在横向扩展格,则列号依次改变。

count()

函数说明:

对可扩展单元格或集合表达式进行计数

语法:

count(expression)

参数说明:

expression

需要被计数的单元格或表达式,一般为可扩展单元格或集合表达式

返回值:

整数

选项:

@a

null元素也进行计数

@d

对去除重复内容后的数据进行计数

示例:

1count([A1:B10]) 以当前格为基格计算A1B10之间总共有几个单元格,如果单元格的值为空则不进行计数

2count([A1[1]:B10[3]])计算A1扩展出来的第一个格和B10扩展出来的第三个格之间总共有几个单元格,如果单元格的值为空则不进行计数

3count(arg1) 其中arg1是参数组,统计arg1中有几个数据

4count(B1{}) 表示求得当前主格扩展区域内所有扩展后的B1单元格的个数

5count(B1[`0]{})  表示求得根坐标下所有扩展后的B1单元格的个数

6count@a(list(3,4,null))返回3,如果省略@a则返回2

7count@d(list(3,4,3))返回2,如果省略@d则返回3

disp()

函数说明:

取单元格的显示值

语法:

disp(cell)

参数说明:

cell

单元格

返回值:

字符型

示例:

1if(like(disp(A1), "中国*"),true,false)

表示如果A1单元格的显示值含有中国的字样,返回true,否则返回false

ds()

函数说明:

按名称取得数据集对象,本函数用于动态改变表达式的数据集对象,用法很灵活,但是性能较低,须慎用。

语法:

ds( stringExp )

参数说明:

stringExp

数据集的名称

返回值:

数据集对象

说明:

本函数的返回值是表达式的一个元素,不能作为单元格的数据值,必须经过二次运算。

示例:

1ds("ds1").select(#0)  表示取出ds1数据集中的记录行号集合

eval()

函数说明:

动态解析并计算表达式

语法:

eval( StringExp )

eval( StringExp, SubRptExp )

eval( StringExp, DataSetExp )

参数说明:

StringExp

待计算的表达式串

SubRptExp

嵌入式子报表对象,一般是含有子报表的单元格

DataSetExp

数据集对象,一般是ds函数

返回值:

表达式的结果值,数据类型由表达式决定

示例:

1eval( "1+5" )

返回6

2eval("B2+10", A1)

其中A1为嵌入式子报表,表示计算A1子报表中的B2+10

3eval("salary+100", ds("ds1"))

表示计算数据集ds1salary100

fread()

函数说明:

将文件内容读取成字符串或byte[]

语法:

fread(fileName[, charset])

参数说明:

fileName

文件名

charset

编码格式

返回值:

字符串或byte[]

选项:

@b

将文件读成byte[]

示例:

1fread@b("C:/R50.png")  将文件内容读取成byte[]返回

2fread("D:/report.xml")  将文件内容读取成字符串返回

3fread("D:/c.txt","UTF-8")  指定编码格式为"UTF-8"

graph()

函数说明:

计算生成统计图

语法:

graph({graphTypeExp})

参数说明:

graphTypeExp

统计图类型表达式,本参数运算的结果为整型。分别对应以下值:

1:区域图

2:条形图

3:三维条形图

4:三维簇状条形图

5:堆积条形图

6:三维堆积条形图

7:柱形图

8:三维柱形图

9:三维簇状柱形图

10:堆积柱形图

11:三维堆积柱形图

12:折线图

13:饼型图

14:散列图

15:三维区域图

16:三维折线图

17:三维饼型图

18:时序状态图

19:时间走势图

20:双轴折线图

21:双轴柱线图

22:雷达图

23:甘特图

24:仪表盘

25:里程碑

返回值:

统计图

示例:

graph(2)  计算条形图

if()

函数说明:

根据布尔表达式的不同计算结果,返回不同的值。本函数从左到右计算,先出现的布尔表达式先算,如果出现为true的表达式,则返回相应的结果,后面的不再计算。如果没有一个布尔表达式为true,但是有缺省值表达式,则返回缺省值;如果没有一个布尔表达式为true,并且没有缺省值表达式,则返回null

语法:

if(a,b,c)

if(x1:y1,…,xk:yk;y)

参数说明:

a

布尔表达式

b

值表达式,如果布尔表达式a的结果为真,则返回值表达式b的计算结果

c

值表达式,如果布尔表达式a的结果为假,则返回值表达式c的计算结果

xk

布尔表达式

yk

值表达式,如果对应xi表达式结果为真,则返回值表达式yi的计算结果

y

缺省值表达式,如果所有布尔表达式xi的结果都为假,则返回本表达式计算结果

返回值:

数据类型不定,由值表达式的运算结果决定。如果布尔表达式都为假,并且没有缺省表达式,则返回null 

示例:

1if(value()>1,"true","false")

当前格值大于1返回true,否则返回false

2if(value()>90:"Excellent",value()>80:"Good",value()>60:"Passed";"Failed")

当当前格的值大于90时,返回“Excellent”,大于80则返回“Good”,大于60则返回“Passed”,否则返回“Failed”

3if(A4>90:"Excellent",A4>80:"Good",A4>60:"Passed")

A4单元格的值大于90时,返回“Excellent”,大于80则返回“Good”,大于60则返回“Passed”,否则返回null

ifn()

函数说明:

判断第一个表达式的值是否为空,若为空则返回指定值,不为空则返回该表达式的值。

语法:

ifn( valueExp1, valueExp2 )

参数说明:

valueExp1

需要计算的表达式,其结果不为空时返回其值

valueExp2

需要计算的表达式,当valueExp1结果为空时返回此值

返回值:

valueExp1valueExp2的结果值

示例:

1ifn(A1,"")  表示当A1为空时,返回空串,否则返回A1

2ifn(value(),0)  表示当当前格为空时返回0,否则返回当前格的值

lefthead()

函数说明:

获得指定单元格的左主格

语法:

lefthead({Cell{,level}})

参数说明:

Cell

指定单元格,参数为空时为当前单元格。

level

左主格层次,0为当前主格,每向上一级层次加1,默认为0

返回值:

单元格值

示例:

1lefthead()  获得当前单元格的左主格

2lefthead(B3,1)  获得单元格B3的左主格的左主格

list()

函数说明:

获得一个枚举的数据集合

语法:

list(valueExp1{,valueExp2{,valueExp3{,……}}})

参数说明:

valueExp(n)

可以是常数或表达式,也可以是集合表达式

返回值:

一组枚举数据的集合

选项:

@m

各元素递归并集,对内部的list展开

示例:

1list(1,3,5,7,9)   {1,3,5,7,9}

2list("abc","def","ghj")   {"abc","def","ghj"}

3list@m(arg1,to(1,3),"a","b","c")  假设arg1是个整数组,其值为7,8,9,那么该表达式的结果值为{7,8,9,1,2,3,"a","b","c"}

map()

函数说明:

显示值对照表函数,从对照表中找出当前单元格对应值的显示值,没有则返回null

语法:

map(valueListExp, displayListExp)

参数说明:

valueListExp

真实值列表,可以是可扩展单元格或结果为集合列表的表达式

displayListExp

显示值列表,可以是可扩展单元格或结果为集合列表的表达式

真实值列表和显示值列表一一对应

返回值:

字符型,和当前格真实值对应的显示值,没有则返回null

示例:

1map(to(1,3),list("","","不定"))

在显示值的表达式中输入该函数。当前单元格格值为1时,显示""2时显示""3时显示"不定",其它值则返回单元格格值本身。

2map(arg1,arg2)

在显示值的表达式中输入该函数。其中arg11,2,3组成的参数组,arg2"","","不定"组成的字符串组,结果同例1

3map(list(1,2,3),list("","","不定"))

在显示值的表达式中输入该函数。结果同例1

max()

函数说明:

对可扩展单元格或集合表达式求最大值

语法:

max(exp)

max(exp,cellExp)

参数说明:

exp

需要求最大值的单元格或表达式,一般为可扩展单元格或集合表达式

cellExp

单元格或单元格集合,以cellExp里的单元格为当前格计算表达式exp

返回值:

数据类型不定,由exp的计算结果决定

示例:

1max([A1:A10])  求出单元格A1A10之间的最大值

2max(arg1)  其中arg1是参数组,求出arg1中的最大值

3max(B1{})  表示求得当前主格扩展区域内所有扩展后的B1单元格的最大值

4max(B1[`0]{})  表示求得根坐标下所有扩展后的B1单元格的最大值

5max(B1+C1,A1[`0]{}) 计算分别与每个A1相对应的B1C1的和的最大值

maxc()

函数说明:

返回输入的单元格(格集)中值最大的单元格组成的List,如果存在多个单元格的值相等且最大,则这些单元格都会被返回。

语法:

maxc(cellExp1{,cellExp2{,......}})

参数说明:

cellExp1

单元格(格集)或单元格(格集)表达式

返回值:

单元格List

示例:

1maxc(A1,A2,A3,A4)  求出单元格A1A4之间值最大的单元格组成的列表

2maxc(A1{},A2)  A1扩展出来的所有单元格和A2中值最大的单元格组成的列表

maxwidth()

函数说明:

求当前列中所有非合并格的显示串的最大字符长度

(注意:ASCII码大于255的字符长度为2)

语法说明:

maxwidth()

返回值:

整数

示例:

一般用于列首格中,动态控制列宽

1:在列首格的单元格宽度属性中写入8*maxwidth(),表示动态调整当前列宽为单元格显示值最大字符长度*8个像素

min()

函数说明:

对可扩展单元格或集合表达式求最小值

语法:

min(exp)

min(exp,cellExp)

参数说明:

exp

需要求最小值的单元格或表达式,一般为可扩展单元格或集合表达式

cellExp

单元格或单元格集合,以cellExp里的单元格为当前格计算表达式exp

返回值:

数据类型不定,由exp的计算结果决定

示例:

1min([A1:A10])  求出单元格A1A10之间的最小值

2min(arg1)  其中arg1是参数组,求出arg1中的最小值

3min(B1{})  表示求得当前主格扩展区域内所有扩展后的B1单元格的最小值

4min(B1[`0]{})  表示求得根坐标下所有扩展后的B1单元格的最小值

5min(B1+C1, A1[`0]{}) 计算分别与每个A1相对应的B1C1的和的最小值

minc()

函数说明:

返回输入的单元格(格集)中值最小的单元格组成的List,如果存在多个单元格的值相等且最小,则这些单元格都会被返回。

语法:

minc(cellExp1{,cellExp2{,......}})

参数说明:

cellExp1

单元格(格集)或单元格(格集)表达式

返回值:

单元格List

示例:

1minc(A1,A2,A3,A4)  求出单元格A1A4之间值最小的单元格组成的列表

2minc(A1{},A2)  A1扩展出来的所有单元格和A2中值最小的单元格组成的列表

plot()

函数说明:

计算一个值在一个完全划分中的位置

语法:

plot( valueExp, ListExp)

参数说明:

valueExp

返回值的表达式,值可以是字符串、数值、日期、时间等

ListExp

返回同valueExp数据类型相同的数组,要求其中元素从小到大排列

返回值:

整数

选项:

@c

表示与ListExp元素比较时包含等于

@z

表示ListExp中元素从大到小排列,否则为从小到大排列

示例:

1plot( 0, list(0,10,100) )  返回1,第一个集合为<0,不包含0,第二个集合为>=0<10,所以0落在了第二个集合中,集合的编号从0开始起编,依次为0,1,2,3,所以结果为1

2plot@c( 0, list(0,10,100))  返回0

3plot( 10, list(0,10,100))  返回2

4plot@cz(10,list(100,10,0))  返回1

详细说明:

划分是指将一个集合划分成几个集合,如数组{0,10,100}在不包含等于的情况下  将整数集或实数集划分成4个集合,依次分别是<0<10(此集合中元素必定>=0)<100(此集合中元素必定>=10)及其它(>=100)

在包含等于的情况下将整数集或实数集划分成4个集合,分别是<=0<=10(>0)<=100(>10)及其它(>100);

对于数组{100,10,0},不包含等于时也划分成4个集合,分别为>100,>10(<=100), >0(<=10)及其它(<=0);

不包含等于时则为>=100,>=10(<100),>=0(<10)及其它(<0)

query()

函数说明:

执行sql语句,返回结果数据集合,只能返回单列数据,如果sql语句中有多个字段,则返回第一个字段的结果值

语法:

query(sqlStatement{,arg1{,arg2{,arg3{,……}}}}{;dbName})

参数说明:

sqlStatement

合法的sql语句

arg(n)

sql语句的参数,可以是常数也可以是表达式

dbName

数据库逻辑名,为null表示缺省数据库

返回值:

一组数据的集合,数据类型由sql语句的第一个选出字段决定

示例:

1query("select NAME from EMPLOYEE where GENDER =?","F";"demo")

表示从demo数据库的EMPLOYEE表中选出GENDER ="F"的记录,返回其NAME字段值

2query("select * from EMPLOYEE where GENDER =? and EID <?","F",11;"demo")

表示从demo数据库的EMPLOYEE表中选出GENDER ="F"并且EID <11的记录,返回其第一个字段的值

row()

函数说明:

取得当前单元格所在行的行号

语法:

row({cellExp})

参数说明:

cellExp

单元格表达式(不写表示当前单元格)

返回值:

整数

示例:

在第三行单元格中写入=row(),返回值为3,如果第三行存在纵向扩展格,则行号依次改变。

seq()

函数说明:

取得指定扩展单元格的同源号,即扩展格扩展后,将此单元格的同源格按行(列)号从小到大排序后,此单元格所在的序号。

语法:

seq({cellExp})

参数说明:

cellExp

单元格表达式,必须返回扩展格

返回值:

整数

示例:

假设A1是扩展格,B1的主格为A1,在B1单元格中写入=seq(A1),则扩展后B1的值将依次从1变到A1扩展出来的单元格的数目。

sort()

函数说明:

对数组进行排序

语法:

sort(arrayExp)

参数说明:

arrayExp

数组表达式,譬如groupselectlist等函数

返回值:

数组,元素数据类型由参数arrayExp决定

选项:

@z

对数组按降序排列

示例:

1sort([5,2,3,4])  返回值为{2,3,4,5}

2sort@z([5,2,3,4])  返回值为{5,4,3,2}

3sort(list(5,2,3,4))  返回值为{2,3,4,5}

4sort(ds1.select(EID))  返回值按照EID升序排列

5sort(ds1.group(DEPT)) 返回值按照分组后的DEPT升序排列

spl()

函数说明:

动态解析并计算集算器表达式,等同于在集算器中执行eval函数。

语法:

spl(StringExp ,{argExp})

备注:

将表达式串作为StringExp的结果,分析计算返回。?对应argExp计算结果,如果有多个?那么就可能有多个argExpargExp?是一一对应的。

如果?个数大于argExp个数,则会从第一个argExp开始循环

通常还可以使用序号为?指定参数,例如spl( "?2/?1", 3, 6 ) ,第一个?对应第二个参数,第二个?对应第一个参数,因此返回结果为2

参数:

StringExp

待计算的表达式串

argExp

参数表达式

函数关键字:

?

StringExp中代表argExp的值

返回值:

表达式的结果值,数据类型由表达式决定

示例:

 

A

 

1

="1+3"

 

2

=spl(A1)

4

3

=4

 

4

=spl("?+5",A3)

? 为关键字,代表A3参数值,返回值9

5

=spl("replace(?,\"X\",\"*\")","ZXcm")

使用replace函数替换第一个?参数值,返回值”Z*cm”

6

=spl("(?+1)/?",3,4)

第一个?值为3,第二个?值为4,返回值1.0

7

=spl( "(?+?)*?",1, 3 )

第一个?值为1,第二个?值为3,第三个?值为1,返回值4

8

=spl("?+?", 3 )

结果是6,因为argExp数量小于?,所以它会重复使用的argExp

9

=spl("?2/?1", 3, 6 )

第一个?对应第二个参数,第二个?对应第一个参数,因此结果为2.0

 

sublist()

函数说明:

获得一个集合的子集合

语法:

sublist(srcList,startPos,count)

参数说明:

srcList

源集合表达式

startPos

起始索引,从0开始计数

count

返回的元素数目

返回值:

集合的子集合

示例:

1sublist( list(1,3,5,7,9), 1, 2 ) 结果为{ 3, 5 }

sum()

函数说明:

对可扩展单元格或集合表达式进行求和

语法:

sum(exp)

sum(exp,cellExp)

参数说明:

exp

需要被求和的单元格或表达式,一般为可扩展单元格或集合表达式

cellExp

单元格或单元格集合,以cellExp里的单元格为当前格计算表达式exp

返回值:

实数或者字符型,由被汇总的单元格数据类型决定

示例:

1sum([A1:A10])

求出单元格A1A10的合计值,被统计单元格可以是数值型也可以是字符型

2sum(arg1)

其中arg1是参数组,求出arg1中所有元素的合计值

3sum(B1{}) 

表示求得当前主格扩展区域内所有扩展后的B1单元格的合计值

4sum(B1[`0]{})

表示求得根坐标下所有扩展后的B1单元格的合计值

5sum(B1+C1,A1[`0]{})

计算分别与每个A1相对应的B1C1的和的合计值

throwe()

函数说明:

抛出一个ReportError异常

语法:

throwe({msg})

参数说明:

msg

异常信息字符串

示例:

throwe("单元格值有误") 抛出一个异常,显示信息为单元格值有误

to()

函数说明:

生成一组连续的整数数据

语法:

to(startExp,endExp{,stepExp})

参数说明:

startExp

整数数据开始的表达式

endExp

整数数据结束的表达式

stepExp

整数数据步长的表达式,省略为1

返回值:

连续的整数数列

示例:

1to(1,5)  相当于list(1,2,3,4,5) ,从1开始,依次加1直到5

2to(1,5,2)  相当于list(1,3,5),从1开始,依次加2直到5

3to(-5,-10,-2)  相当于list(-5,-7,-9) ,从-5开始,依次减2直到-9

4to(-10,-8)  相当于list(-10,-9,-8) ,从-10开始,依次加1直到-8

tophead()

函数说明:

获得指定单元格的上主格

语法:

tophead({Cell{,level}})

参数说明:

Cell

指定单元格,参数为空时为当前单元格。

level

上主格层次,0为当前主格,每向上一级层次加1,默认为0

返回值:

单元格值

示例:

1tophead()  获得当前单元格的上主格

2tophead(E3,1)  获得单元格E3的上主格的上主格

value()

函数说明:

取得当前单元格的值

语法:

value()

返回值:

当前单元格的值

valueat()

函数说明:

根据指定位置返回数组或者集合表达式中的某一个元素

语法:

valueat(arrayexpsuffixExp)

参数说明:

arrayexp

数组或者集合表达式

suffixExp

整数,用于指定返回集合中的第几个元素,以0开始计数

返回值:

集合中的一个元素,数据类型由集合中的元素类型决定

示例:

1valueat(to(5,8),2)  返回值为:7

2valueat(["a","b","c"],2)  返回值为:"c"

fexists()

函数说明:

检测文件是否存在。若存在则返回true,否则返回false

语法:

fexists(fileName)

参数说明:

fileName

需要检测的文件名称

返回值:

布尔型

选项:

@m

文件路径为绝对路径时如没有找到,则会到主目录搜索;使用相对路径时,会直接到主目录下搜索

@c

文件路径为绝对路径时如没有找到,则会到类路径下搜索;使用相对路径时,会直接到类路径下搜索

@a

文件路径为绝对路径时如没有找到,则会到应用根目录下搜索;使用相对路径时,会直接到应用根目录下搜索

 

缺省时文件路径必须为绝对路径

示例:

1fexists("D:/1.jpg") 

2fexists@m("D:/1.jpg")   D盘根目录下找1.jpg文件,若存在返回true,否则到主目录下搜索,存在返回true,否则返回false

3fexists@c("1.jpg")  到类路径下找1.jpg文件,若存在返回true,否则返回false

4fexists@a("1.jpg")  到应用根目录下找1.jpg文件,若存在返回true,否则返回false