2.计算函数
  计算函数主要用于硕正组件自身的表达式中,比如树列表XML模版中的表达式、报表单元格中直接输入的公式。此外,也可以以"全局函数"方式被js直接调用,函数如下:
分类函数名用途
公共函数条件判断函数
调用页面的javascript函数
数学函数求和
数组求和
求平均值
求最大值
求最小值
求中位数
求百分比
绝对值
四舍五入
取整
求余数
小于等于n(参数)的最大整数
大于等于n(参数)的最小整数
平方根
e的n次幂
log
以10为底的log
n(参数)的n次方
随机数
求方差方差
求总体方差
求偏差
求总体偏差
文字函数取串长度(字数)
取串的左n个字
取串的右n个字
取串的中间若干个字
取子串在串中的位置
子串中任一字符最先出现在串中的位置
取串在串数组中的位置
串是否以某子串结尾
串是否匹配(类似SQL Like)
比较2个串
替换串的中间若干个字
替换串的中某些子串
替换串的中某些字符
把串中的英文转换为小写
把串中的英文转换为大写
除去串的首尾空格、或任意串
除去串的左侧空格、或任意串
除去串的尾部空格、或任意串
除去头、尾多余的字符, 取出数字串
字符串合并相加
对文字进行URI编码
对更多文字进行URI编码
英文数字
中文大写
人民币大写
按指定掩码表示日期
按指定掩码表示数值
中文的日期表示
中国银行的日期表示
日期函数2个日期的年度之差
2个日期的月份之差
2个日期的天数之差
2个日期之间的工作日天数
2个日期的小时之差
2个日期的分钟数之差
日期增加若干年
日期增加若干月
日期增加若干天
日期增加若干小时
日期增加若干分钟
取某日期的年度
取某日期的月份
取某日期的日期号
求某日是星期几
求某日是年度中的第几天
取某日期时间型串的小时
取某日期时间型串的分钟
取当前日期
比较2个日期大小
取得某日期的月初日期
取得某日期的季初日期
取得某日期的年初日期
取得某日期的月末日期
取得某日期的季末日期
取得某日期的年末日期
Treelist专用函数判断某单元格内容是否为null
取得当前行
Report专用函数(1)引用其它单元格
按别名引用其它单元格
引用其它单元格的原始内容
引用其它单元格的显示内容
按别名引用其它单元格的原始内容
按别名引用其它单元格的显示内容
取得本单元格(或指定单元格)的行号
取得本单元格(或指定单元格)的列号
取得当前工作表的总行数
取得当前工作表的总列数
取得工作表总数
取得当前工作表的顺序号
取得本单元格的单元名
取得指定单元格的单元名
按条件求sum
参照某列的条件求sum
参照某些列的条件求sum
按条件求单元格数
按条件求平均值
按条件求最大值
按条件求最小值
字符串合并相加
总共打印页数
当前打印页
在批打印中的当前打印页
批打印的总页数
纵向分页数
纵向的当前分页
横向分页数
横向的当前分页
分页小计 (打印页)
Report专用函数(2):
数据源函数
顺序填入数据源中的数据行
填入数据源的标题行
取得数据源中的单个数据
取得数据源的单个标题
从数据源中搜索
取得数据源总行数
填入数据源中的行号

函数详解:

if条件判断函数
参数1条件,非零表示满足条件
参数2条件满足时的返回值
参数3条件未满足时的返回值
返回值见参数
示例=if(getDay(now())<10, '上旬', if(getDay(now())>=20,'下旬','中旬'))


js反向调用当前页面的JavaScript函数(“当前页面”是指包容当前控件的页面)
参数1要调用的js函数名
参数2可选, 该js函数的第一个参数
参数3可选, 该js函数的第二个参数,以下以此类推...
返回值由js函数决定
备注函数的返回值就是 js 函数的返回值,在硕正报表组件中,允许返回 SoapLike 格式的异常包, 其格式请参见 "4.XML/JSON异常包"
示例例如表达式: =js('getProd', '1', 'true')

那么在当前页面上必须有名为 getProd 的 js 函数, 该函数要有2个参数,例如:
function getProd(index, isOpened)
{
 ...
 return 1;
}


sum求和
参数参数数量可任意
返回值数值
示例=sum(14.21, 220.3, sum(22, 33))
备注1.在硕正报表中,参数可以含有单元名,例如 sum(D4:E9, K5, K7);
2.在硕正报表中,如果要对数据源填充区某列求和, 但因为行数是未知的, 应该写成诸如 sum(D4:@D4)这种格式, 表示从 D4单元格开始向下,直到数据源的末行


sumDim数组求和
参数参数数量可任意,参数的形式是以某个字符分隔的多个数字
返回值和参数类似的形式
备注分隔符可以是除空格外的任意字符(或字符串),但必须保持一致
示例=sumDim("1.1 / 2.1 / 3", "10 / 20 / 30") 返回的将是串"11.1 / 22.1 / 33"
在硕正报表中,参数可以含有单元名,例如 sumDim(D4:D9)


average求平均值
参数参数数量可任意
返回值数值


max求最大值
参数参数数量可任意
返回值数值


min求最小值
参数参数数量可任意
返回值数值


median求中位数
参数参数数量可任意
返回值数值


percent求百分比
参数1数字
参数2可选, 小数位数,默认为0
返回值百分比串,带'%'符号
示例=percent(0.12345, 2),返回值为串“12.35%”


abs绝对值
参数数字
返回值正数


round四舍五入
参数1数字
参数2小数位数
返回值数值
示例=round(12.345, 2),返回值为 12.35


int取整
参数数字
返回值整数


mod求余数
参数1被除数
参数2除数
返回值余数
示例=mod(32, 10),返回值为 2


floor小于或等于n(参数)的最大整数
参数数字
返回值整数
示例=floor(3.999),返回值为 3


ceil大于或等于n(参数)的最小整数
参数数字
返回值整数
示例=Ceil(3.2),返回值为 4


sqrt平方根
参数数字
返回值数值


expe的n次幂
参数数字
返回值数值


loglog
参数数字
返回值数值


log10以10为底的log
参数(无)
返回值数值


pown(参数)的n次方
参数1底数
参数2幂数
返回值数值


rand随机数
参数(无)
返回值0 - 0.99


var
vara
求方差
参数参数数量可任意, 同 sum( ) 函数
返回值数值
示例=var(A3:A10)
=vara(A3:A10)


varp
varpa
求总体方差
参数参数数量可任意, 同 sum( ) 函数
返回值数值
示例=varp(A3:A10)
=varpa(A3:A10)


stdev
stdeva
求偏差
参数参数数量可任意, 同 sum( ) 函数
返回值数值
示例=stdev(A3:A10)
=stdeva(A3:A10)


stdevp
stdevpa
求总体偏差
参数参数数量可任意, 同 sum( ) 函数
返回值数值
示例=stdevp(A3:A10)
=stdevpa(A3:A10)


len取串长度(字数)
参数
返回值数值
示例=len('字符串12'),返回值5


left取串的左n个字
参数1
参数2字数
返回值


right取串的右n个字
参数1
参数2字数
返回值


mid取串的中间若干个字
参数1
参数2位置(从0开始)
参数3字数
返回值


indexOf取子串在串中的位置
参数1
参数2子串
参数3可选, 开始查找位置,默认为0
参数4可选, 大小写是否敏感,默认为0(即不敏感)
返回值位置,从0开始,-1表示未找到


indexOfArray取串在串数组中的位置
参数1串数组
参数2
参数3可选, 开始查找位置,默认为0
参数4可选, 大小写是否敏感,默认为0(即不敏感)
参数5可选, 数组中各个串的分隔符, 默认是逗号
返回值位置,从0开始,-1表示未找到
示例=indexOfArray('01, 1, 03, 0301', '03'),返回值为2
=indexOfArray('A/aA/AA/aa', 'AA', 0, 0, '/'),返回值为1


indexOneOf子串中任一字符最先出现在串中的位置
参数1
参数2子串
参数3可选, 开始查找位置,默认为0
参数4可选, 大小写是否敏感,默认为0(即不敏感)
返回值位置,从0开始,-1表示未找到
示例=indexOneOf('abc882nd', '0123456789'),返回值为3


endWith串是否以某子串结尾
参数1
参数2子串
参数3可选, 大小写是否敏感,默认为0(即不敏感)
返回值1/0, 表示是/否


like串是否匹配(类似SQL Like)
参数1
参数2通配符,可以包含如下符号: %(替代一个或多个字符)、_(仅替代一个字符)、[charlist](字符列中的任何单一字符)、[!charlist](或[^charlist],不在字符列中的任何单一字符), 也可以用 - 分隔的范围,比如[a-z]
参数3可选, 大小写是否敏感,默认为0(即不敏感)
返回值1/0, 表示是/否
示例=like('Certern', 'C_r_er')
=like('ACertern', '[ALN]%')


compare比较2个串
参数1串1
参数2串2
参数3可选, 大小写是否敏感,默认为0(即不敏感)
返回值整数,0表示相等;大于0表示串1大于串2;小于0表示串1小于串2


replace替换串的中间若干个字
参数1
参数2位置(从0开始)
参数3长度
参数4替换的串
返回值被替换后的串


replaceAll替换串的中某些子串
参数1
参数2需要被替换的串
参数3替换的新串
返回值被替换后的串
示例=replaceAll('ABCA', 'A', '02'),返回值为串“02BC02”


replaceOneOf替换串的中某些字符
参数1
参数2需要被替换的各个字符
参数3替换的新串
返回值被替换后的串
示例=replaceOneOf('ABCA', 'CA', '02'),把串中的C、A都替换为 "02", 返回值为串 “02B0202”


toLowerCase把串中的英文转换为小写
参数
返回值


toUpperCase把串中的英文转换为大写
参数
返回值


trim除去串的首尾空格、或任意串
参数1
参数2可选,要除去的串,默认空格
返回值


trimLeft除去串的左侧空格、或任意串
参数1
参数2可选,要除去的串,默认空格
返回值


trimRight除去串的尾部空格、或任意串
参数1
参数2可选,要除去的串,默认空格
返回值


concatenate字符串合并、相加
参数
返回值
备注参数个数任意
示例=concatenate('A', 'B', 'C'),返回为 ABC


trimToNumber除去头、尾多余的字符, 取出数字串
参数
返回值数字串
示例=trimToNumber('总计: 13,203.17 吨'),返回值为 13203.17
注: 其中如果有多个数值,则返回第一个
=trimToNumber('The cod is 13, 12, 22'),返回值为 13


encodeURI对文字进行URI编码
参数
返回值
备注encodeURI不会对数字、字母和“-_.!~*'()”进行编码,也不会对有特殊含义的“;/?:@=+$,#&”进行编码
示例=encodeURI('http://www.supcan.cn/supcan?val=硕正RIA'),返回值为串“http://www.supcan.cn/supcan?val=%e7%a1%95%e6%ad%a3RIA”


encodeURIComponent对更多文字进行URI编码
参数
返回值
备注和encodeURI的唯一差别是:会对有特殊含义的“;/?:@=+$,#&”进行编码
示例=encodeURIComponent('硕正RIA'),返回值为串“%e7%a1%95%e6%ad%a3RIA”


englishNum英文数字
参数数字
返回值
示例=englishNum(10123.24),返回值为串“ten thousand one hundred and twenty three point twenty four”


chineseNum中文大写
参数10至9之间的数字,允许有多个数字
参数21 表示普通的中文大写,0或忽略该参数表示中文金额的大写
返回值
示例=chineseNum(123) 返回值为串“壹贰叁”;
=chineseNum(123, 1) 返回值为串“一二三”


RMB人民币大写
参数数字
返回值
示例=rmb(10123.24),返回值为串“壹万零壹佰贰拾叁元贰角肆分”


formatDate按指定掩码表示日期
参数1日期串
参数2掩码,如'YYYY.MM.DD hh:mm:ss'、'YY年度'.
上面的Y、M、D、h、m、s为掩码保留字,次序位置无规定,其含义说明如下:
Y - 年,YYYY表示4位显示, YY表示显示后2位;
M - 月,MM表示2位显示,不足2位的左侧以'0'填补;
D - 日,DD表示2位显示,不足2位的左侧以'0'填补;
Month(或Mon) - 英文的月份;
Month.(或Mon.) - 英文的月份缩写;
Day - 英文的星期;
Day. - 英文的星期缩写;
h - 小时,hh表示2位显示,不足2位的左侧以'0'填补;
m - 分钟,mm表示2位显示,不足2位的左侧以'0'填补;
s - 秒,ss表示2位显示,不足2位的左侧以'0'填补;
返回值
示例=formatdate(now(), 'YYYY年MM月DD日'),返回值例如“2010年08月05日”
=formatdate(now(), 'YYYY年M月D日'),返回值例如“2010年8月15日”
=formatdate(now(), 'D, Month YYYY, day'),返回值例如“15, August 2010, Sunday”


formatNum按指定掩码表示数值
参数1数值
参数2掩码,如'#,##0.00'、'共:#.00# 吨'. 掩码中'0'表示固定位、'#'表示任意位、','表示千位符.
返回值
备注最常用的掩码为"#,##0.00",表示小数始终显示2位、整数部分任意但至少有1位、且以千位符分隔.
示例=formatNum(12345.6, '#,##0.00'),返回“12,345.60”;
=formatNum(0, '#.#'),返回空串;
=formatNum(0, '#,##0.00'),返回"0.00";
=formatNum(123456, '编码 00 - 00 - 00 - 00'),返回"编码 00 - 12 - 34 - 56";
=formatNum(1234.5678, '00.00'),返回"34.56";


chineseDate中文的日期表示
参数1日期串
参数2可选, 掩码,默认是'YYYY年MM月DD日'
返回值


chineseBankDate中国银行的日期表示
参数1日期串
参数2格式,默认是'YYYY年MM月DD日'
返回值
示例=chineseBankDate(now()),返回值例如“贰零壹零年零捌月壹拾伍日”


dateDifYears2个日期的年度之差
参数1日期1
参数2日期2
返回值数值


dateDifMonths2个日期的月份之差
参数1日期1
参数2日期2
返回值数值
示例=dateDifMonths('2010.1.19', '2010.12.21'),返回11


dateDifDays2个日期的天数之差
参数1日期1
参数2日期2
返回值数值


dateDifWorkDays2个日期之间的工作日天数
参数1日期1
参数2日期2
参数3可选,定义的非工作日,以逗号分隔的纯数字,1到7表示星期一到星期日, 数字后带减号(-)表示按半天算。默认值是6,7
返回值数值
备注本函数只是粗略计算,未考虑春节、圣诞节等其它法定假日因素
示例=dateDifWorkDays('2010.1.19', '2010.12.21', '6-,7'),//周六算半天、周日为非工作日


dateDifHours2个日期的小时之差
参数1日期1
参数2日期2
返回值数值


dateDifMinutes2个日期的分钟数之差
参数1日期1
参数2日期2
返回值数值


dateAddYears日期增加若干年
参数1日期
参数2数字
返回值新的日期


dateAddMonths日期增加若干月
参数1日期
参数2数字
返回值新的日期


dateAddDays日期增加若干天
参数1日期
参数2数字
返回值新的日期


dateAddHours日期增加若干小时
参数1日期
参数2数字
返回值新的日期


dateAddMinutes日期增加若干分钟
参数1日期
参数2数字
返回值新的日期


getYear取某日期的年度
参数日期
返回值数值


getMonth取某日期的月份
参数日期
返回值数值


getDay取某日期的日期号
参数日期
返回值数值


getDayOfWeek求某日是星期几
参数1日期
参数2可选, 可以是字符 C 、E
返回值如果不指定参数2, 那么返回的是 0 到 6 之间的数字, 0表示星期日, 1表示星期一, ... 以此类推;
如果参数2是字符 C (表示中文), 返回的将是日, 一, 二..., 六;
如果参数2是字符 E (表示英文), 返回的将是Sunday, Monday, Tuesday..., Saturday;
示例getDayOfWeek(now( ))
getDayOfWeek(now( ), 'E')


getDayOfYear求某日是年度中的第几天
参数日期
返回值数字, 范围是 1 到 366


GetHour取某日期时间型串的小时
参数日期
返回值数值


getMinute取某日期时间型串的分钟
参数日期
返回值数值


now取当前日期
参数可选, 格式掩码,默认是'%Y.%m.%d %H:%M:%S',掩码含义如下(注意大小写):
%Y - 4位数字的年;
%y - 2位数字的年;
%m - 月份(01至12);
%d - 月中的某日(01至31);
%H - 小时(24小时制,00至23);
%I - 小时(12小时制,01至12);
%M - 分钟(00至59);
%S - 秒钟(00至59);
%p - AM/PM表示上午/下午;
%x - 日期的英文普遍写法;
%X - 时间的英文普遍写法;
%c - 日期时间的英文普遍写法;
%b - 月份的英文缩写;
%B - 月份的英文全称;
%a - 星期的英文缩写;
%A - 星期的英文全称;
%w - 数字表示的星期(0至6, 0是星期天);
%j - 相对于1月1日的日期差(001至366);
%Z - 和GMT(或UTC)时区的时差;
选项:
/Z - 转换为GMT(或UTC)时间;
返回值日期串
示例以北京时间2011.1.20 08:00:00为例:
now("%Y.%m.%dT%H:%M:%S%Z")将显示为 2011.01.20T08:00:00+08:00
now("%Y.%m.%dT%H:%M:%SZ/Z")将显示为 2011.01.20T00:00:00Z


compareDate比较2个日期大小
参数1日期1
参数2日期2
返回值1、0或-1,分别表示大于、等于或小于


firstDateOfMonth取得某日期的月初日期
参数日期
返回值日期


firstDateOfSeason取得某日期的季初日期
参数日期
返回值日期
示例假如今天是2012.9.5, firstDateOfSeason(now( )) 将返回 “2012.7.1 00:00:00”


firstDateOfYear取得某日期的年初日期
参数日期
返回值日期
示例假如今天是2012.9.5, firstDateOfYear(now( )) 将返回 “2012.1.1 00:00:00”


lastDateOfMonth取得某日期的月末日期
参数日期
返回值日期


lastDateOfSeason取得某日期的季末日期
参数日期
返回值日期
示例假如今天是2012.8.5, lastDateOfSeason(now( )) 将返回 “2012.9.30 23:59:59”


lastDateOfYear取得某日期的年末日期
参数日期
返回值日期
示例假如今天是2012.8.5, lastDateOfYear(now( )) 将返回 “2012.12.31 23:59:59”


isNull判断某单元格内容是否为null
参数列名,如果为串"data", 则表示自己(当前列)
返回值1/0 - 是/否
备注1.仅用于Treelist的表达式中;
2.参数必须以引号围绕,例如 isNull('price'),否则将无法计算;
3.参数可以带 @origin 宏,表示取原始数据,例如 isNull('price@origin');
4.只支持数值型、日期型的列,对string列无效;
5.本函数一般用于需要精确判断 0 或 null 的特定场合,在大多数情况下,直接用 price==0 判断即可,比如表达式: if(price==0, '未输入', data), 不管price的值为0或为null, 等式 "price==0" 均是成立的;
示例例一.列的属性定义: displayMask="if(isNull('price'), '未输入', data)"
例二.执行js过滤: var s = AF.func("FindAll", "isNull('price')");


row取得当前行
返回值行号 (从 0 开始计数)
备注常用于 <Express> 表达式中


ref引用其它单元格
参数1行号(从1开始计数)
参数2列号(从1开始计数)
参数3可选, 外部报表的URL
参数4可选, 工作表序号(从1开始计数)、或工作表名, 默认是当前工作表
返回值单元格内容
备注1.本函数的参数比较灵活,可以不按照上述的参数顺序,以下面的例子为准;
2.如果要从隐藏的工作表取数,那么就不能用工作表序号,必须采用工作表名;
3.如果是从隐藏工作表取数, 不支持下面例子中的 "B1:D3" 这种写法, 每次只能取一个单元格;
4.引用单元格的原始内容、或者显示内容,由报表 “属性” 对话框的选项决定(下图右侧):
5.如果引用的是外部URL的报表, 只能引用原始内容;
示例=ref(3,2) //等同于 =B3
=ref(3, 2, 2) //等同于 =B3@sheet2
=ref('B3', 2) //同上例
=ref('B3', '工作表二') //取指定工作表的B3单元格
=sum(ref(1,2,3,4, 5)) //等同于 =sum(B1:D3@sheet5)
=sum(ref('B1:D3', 5)) //同上例
=ref('B3', '../report/akk.xml') //引用外部报表的 B3 单元格,这个URL的相对路径是当前页面
=ref(3, 2, '../report/akk.xml') //和上例同
=ref('B3', '../report/akk.xml', 3) //引用外部报表第三工作表的B3单元格
=ref('B3', '../report/akk.xml', '工作表二') //引用外部报表指定工作表的B3单元格
注1:"@sheet"的含义请参见下面的“宏”;
注2:上面例子中如 =ref('B3', 2), 其中的单元名 'B3' 必须要用引号包绕,否则会有歧义


refAlias按别名引用其它单元格
参数1别名
参数2可选, 其它报表的绝对URL或相对URL(相对于当前页面)
参数3可选, 工作表序号(从1开始计数)、或工作表名, 默认是当前工作表
返回值单元格内容
备注1.本函数的参数比较灵活,可以不按照上述的参数顺序,以下面的例子为准;
2.如果要从隐藏的工作表取数,那么就不能用工作表序号,必须采用工作表名;
3.引用单元格的原始内容、或者显示内容,由报表 “属性” 对话框的选项决定(下图右侧):
4.如果引用的是外部URL的报表, 只能引用原始内容;
示例=refAlias('price') //等同于 =@Aliasprice
=refAlias('price', 2) //等同于 =@Aliasprice@sheet2
=refAlias('price', '工作表二') //取指定工作表的某别名的内容
=refAlias('price', '../rpt/fin2.xml') //引用外部报表的别名为 price 的单元格内容 (如果该外部报表有多个工作表,将逐个工作表查找别名,直到找到为止)
=refAlias('price', '../rpt/fin2.xml', 3) //从外部报表第三个工作表中查找别名为 price 的单元格内容
=refAlias('price', '../rpt/fin2.xml', '工作表二') //从外部报表指定工作表中查找别名为 price 的单元格内容
注:"@Alias"、"@sheet"的含义请参见下面的“宏”


refData引用其它单元格的原始内容
备注1.语法和 ref 函数类似;
2.如果 “属性” 对话框中的选项是引用显示内容, 那么本函数只能引用单个单元格(即不支持 'B1:D3' 这种写法)


refText引用其它单元格的显示内容
备注1.语法和 ref 函数类似;
2.如果 “属性” 对话框中的选项是引用原始内容, 那么本函数只能引用单个单元格(即不支持 'B1:D3' 这种写法)


refAliasData按别名引用其它单元格的原始内容
备注语法和 refAlias 函数类似


refAliasText按别名引用其它单元格的显示内容
备注语法和 refAlias 函数类似


row取得本单元格(或指定单元格)的行号
参数单元格名,如果为空表示本单元格(即自己)
返回值行号,从1开始计数
示例=row( )
=row("B11")


col取得本单元格(或指定单元格)的列号
参数单元格名,如果为空表示本单元格(即自己)
返回值列号,从1开始计数
示例=col( )
=col("B11")


rows取当前工作表的总行数 (包括用来封闭表格线的最后辅助行)
返回值行数


cols取当前工作表的总列数 (包括用来封闭表格线的最后辅助列)
返回值列数


WorkSheets取工作表总数
返回值数量


CurrentWorkSheet取的当前工作表的顺序号
返回值顺序号, 从 1 开始计数


CellName(语法一)取得本单元格的单元名
参数(无)
返回值单元名,如"A4"、"C13"


CellName(语法二)取得指定单元格的单元名
参数1行号,从1开始计数
参数2列号,从1开始计数;或列名
返回值单元名,如"A4"、"C13"


sumif(语法一)按条件求sum
参数1以冒号分隔的单元格区域
参数2条件表达式
返回值
备注条件表达式的写法比较灵活,里面可以内嵌函数、引用别的单元格,比如:
"data > 100", 变量 data 表示单元格的数据,也可以和Excel那样,简写成 "> 100";
"data >= 100 + A5", A5是单元格名,表示引用该单元格数据;
示例=sumif(A2:B20, ">200"); //对A2到B20区域内,数值大于200的内容求和
=sumif(A2:B20, "data>K20 and data!=K21"); //对A2到B20区域内,数值大于K20单元格数据、且不等于K21单元格的内容求和


sumif(语法二)按某列的条件求sum
参数1以冒号分隔的单元格区域,供条件判断用, 必须为单列
参数2条件表达式,参见 语法一 中的备注
参数3以冒号分隔的单元格区域,数据区, 必须为单列
返回值
示例=sumif(A2:A20, ">200", B2:B20); //A2到A20区域内,数值大于200的内容,对B2:B20对应内容求和
=sumif(A2:A20, "left(data, 2)='CA'", B2:B20); //以“CA”开头的单元格(A2到A20区域内容是字符串),对应到B2:B20区域内容求和
=sumif(A2:@A2, "left(data, 2)='CA'", B2:@B2); //和上例同,只是区域是数据源的填入区
下图中B11单元格的公式:
=sumif(A2:A9, 'indexOfArray("多层,排屋", data) != -1', B2:B9)


sumif(语法三)将某些列的内容作为条件求sum
参数1以冒号分隔的单元格区域,供条件判断用, 必须为单列
参数2、3...n同上,其它条件列
参数5条件表达式,表达式中,分别用 data1, data2, ... 来表示第一条件列、第二条件列, ...第n条件列
参数6以冒号分隔的单元格区域,数据区, 必须为单列
返回值
示例=sumif(A2:A20, C2:C20, "data1>200 and data2>300", E2:E20); //A2到A20区域内,数值大于200的,同时 C2:C20区域内数值大于300的行,对E2:E20对应行内容求和。

这是另一个例子:

计算结果是 10.


countif按条件求单元格数, 用法请参考上面的 "sumif(语法一)、sumif(语法二)、sumif(语法三)"


averageif按条件求平均值, 用法请参考上面的 "sumif(语法一)、sumif(语法二)、sumif(语法三)"


maxifs按条件求最大值, 用法请参考上面的 "sumif(语法一)、sumif(语法二)、sumif(语法三)"


minifs按条件求最小值, 用法请参考上面的 "sumif(语法一)、sumif(语法二)、sumif(语法三)"


phonetic把单元格内容作为字符串合并相加
参数1单元格名:单元格名
参数2可选, 格式为 isIgnoreBlank=[?];isTrim=[?];Sep=[?], 含义如下:
isIgnoreBlank - 是否忽略没有内容的单元格, 默认是 true;
isTrim - 是否自动除去前导、尾随的空格, 默认是 true;
Sep - 分隔符, 字符串, 默认没有分隔符, 注: Sep必须位于选项的末尾, Sep= 后面的内容全部是分隔符;
返回值字符串
示例=phonetic(C4:@C4) //C列的数据源填充区域字符串合并
=phonetic(C4:C18, "isTrim=false; sep=, ") //C4:C18之间的区域字符串合并、保留前导尾随空格、分隔符为 ", "


pages总共打印页数  
参数(无)
返回值总页数
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


page当前打印页  
参数(无)
返回值页码,从1开始计数
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


pageBatch在批打印中的当前打印页
参数(无)
返回值页码,从1开始计数
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


pagesBatch批打印的总页数
参数(无)
返回值页数,或最大页码
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


vPages纵向分页数
参数(无)
返回值数字
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


vPage纵向的当前分页
参数(无)
返回值页码,从1开始计数
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


hPages横向分页数
参数(无)
返回值数字
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


hPage横向的当前分页
参数(无)
返回值页码,从1开始计数
备注在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮)


PageSum分页小计 (打印页)
参数列名串
返回值数字
备注1.在打印或预览时,插件内部会发起一个微小的页码处理计算,计算该函数,它并不参与常规的计算(例如点击“计算”按钮);
2.本函数通常写在页尾区;
3.统计范围自动选取数据源填入区
示例=pageSum('D'); //对 D 列内容求本页小计


dataRow顺序填入数据源中的数据行
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2可选, 可跟随多个参数, 具体的参数由数据源规定
返回值(无)
示例=dataRow('ds1'); //表示在此处开始填入'ds1'数据源的数据
=dataRow('ds1\\node1'); //表示在此处开始填入'ds1'XML数据源中node1节点的数据


headRow填入数据源的标题行
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2可选, 可跟随多个参数, 具体的参数由数据源规定
返回值(无)
示例=headRow('ds1'),表示本行从本单元格开始填入'ds1'数据源的列标题


data取得数据源中的单个数据
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2行号(从1开始计数)
参数3列号或列名
参数4可选, 可跟随多个参数, 具体的参数由数据源规定
返回值数据源中的数据
示例=data('ds1', 1, 'price'),表示本单元格(或本文本框)填入'ds1'数据源第一行、price列的数据


head取得数据源的单个标题
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2列号或列名
参数3可选, 可跟随多个参数, 具体的参数由数据源规定
返回值标题串


search从数据源中搜索
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2表达式串
参数3列号或列名,或者是 "列名@宏" 这样的格式,表示对搜索结果作统计,“宏” 通常是 @sum, @ave, @max, @rows...这些, 请参见下方的示例
参数4可选, 可跟随多个参数, 具体的参数由数据源规定
返回值结果串
备注是指从数据源缓存中的搜索
示例=search("ds1", "left(company,3)=='Lev'", "price")    //取满足条件的第一条记录的 price 列的数据
=search("ds1", "left(company,3)=='Lev' && classField=" + B5, "price@sum")    //取满足条件的 price 列的数据之和


dataRows取得数据源总行数
参数1数据源名, 如果是XML类型的临时数据源,还可以在斜杠"\"后跟随XML节点名
参数2可选, 可跟随多个参数, 具体的参数由数据源规定
返回值数字


dataRowNumber填入数据源中的行号  
参数(无)
返回值(无)
备注备注:同一行中,应该有包含dataRow( )函数的单元格