在制作表单时,可以设置控件与控件之间的数据联动关系。给例如编辑完单价和数量后,自动计算总价等这样的业务场景提供了支撑。
### 1.公式规则
(1)公式面板左侧可以选择公式所要用到的字段,被选择后,字段在公式面板中会以反引号包裹的形式显示。
(2)函数在简道云里的设置是大写,即在运用函数的时候,请用纯大写字母。
(3)公式面板除了支持基本的运算操作符+、-、*、/,还支持比较操作符>、=、
(4)函数运用时要注意参数数据类型和返回值数据类型,不对应则无法获得正确的结果。
表单控件与其返回值的数据类型的对应关系如下表所示:
**这里要说明的是,使用公式时,该字段一定要对应返回的数据类型。字符串或数字,不能混淆。**
**![](http://dn-jdy-blog.qbox.me/2016-04-12_570c9a2b43d96.png)
**
## 逻辑函数
返回true或者false一类的函数方法。
### AND
##### AND(*logical1*, *[logical2]*, ...)
在参数组中,任何一个参数逻辑值为false,即返回false;只有当所有参数逻辑值为true,才返回true。
即是说,AND函数,是求括号里两个或多个逻辑式子共同满足true(逗号隔开的逻辑式子都满足)的时候,返回的结果为1,即true。
IF(AND(A,B,C),D,E),表示如果同时满足条件A,B,C,则返回D,否则返回E
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-21.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-29.png) ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-28.png)
### OR
##### OR(*logical1*,*[logical2]*, ...)
在参数组中,任何一个参数逻辑值为true,即返回true;只有当所有逻辑参数值为false,才返回false。
和AND函数一样,不同的地方在于,括号里只要有1个逻辑式为true,返回的结果就是1,也就是true。
IF(OR(A,B,C),D,E),表示如果满足条件A,或者满足条件B,或者满足条件C(即3个条件中满足一个或一个以上),则返回D,否则返回E
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-22.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-30.png) ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-31.png)
### FALSE
##### FALSE()
返回逻辑值false。
### TRUE
##### TRUE()
返回逻辑值true。
TRUE和FALSE一样,都是强制括号中的逻辑式为1或0。
### IF
##### IF(*判断条件*,*结果为true的返回值*, *结果为false的返回值*)
判断一个条件能否满足;如果满足返回一个值,如果不满足则返回另外一个值。
IF(A,B,C),表示如果满足条件A,那么返回B,否则返回C。
(1)IF函数支持多层嵌套,如下图:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-20.png)
(2)IF应用于下拉框/单选按钮组,如下图:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-67.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-68.png)
(3)IF用于下拉复选框/复选框组,如下图:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-69.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-70.png) ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-71.png)
### NOT
##### NOT(*logical*)
对参数逻辑值求反。
NOT比较简单,就是把括号里为true的值变成false,括号里为false的值变为true。
### XOR
##### XOR(*logical1*,*[logical2]*, ...)
返回所有参数的异或值。
异或的含义是,两个值相同,返回0,两个值不同,返回1。
## 文本函数
处理字符串文本的一系列函数方法。
### CONCATENATE
##### CONCATENATE(*text1*,*[text2]*, ...)
将多个文本字符串合并成一个文本字符串。示例:
CONCATENATE(A,B,C),即返回值为ABC
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-23.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-24.png)
### EXACT
##### EXACT(*text1*,*text2*)
比较两个字符串是否完全相同(区分大小写)。完全相同则返回true,否则返回false。示例:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-25.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-26.png) ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-27.png)
### LEFT
##### LEFT(*text*,*[num_chars]*)
从一个文本字符串的第一个字符开始返回指定个数的字符。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-32.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-33.png)
### LEN
##### LEN(*text*)
返回文本字符串中的字符个数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-35.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-34.png)
### LOWER
##### LOWER(*text*)
将一个文本字符串中的所有大写字母转换为小写字母。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-36.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-37.png)
### REPLACE
##### REPLACE(*old*text*, *start*num*, *num*chars*, *new*text*)
根据指定的字符数,将部分文本字符串替换为不同的文本字符串。
* *old_text:* 必需。要替换其部分字符的文本。
* *start_num:* 必需。old_text中要替换为new_text的字符位置。
* *num_chars:* 必需。old_text中希望使用new_text来进行替换的字符数。
* *new_text:* 必需。将替换old_text中字符的文本。
REPLACE(字符串1,2,4,字符串2),即将字符串1中的第2位之后的4位(即2,3,4,5位),用字符串2来替换。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-38.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-39.png)
### REPT
##### REPT(*text*, *number_times*)
将文本重复一定次数。
* *text:* 必需。需要重复显示的文本。
* *Number_times:* 必需。用于指定文本重复次数的正数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-40.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-41.png)
### SEARCH
##### SEARCH(*find*text*,*within*text*,*[start_num]*)
在第二个文本字符串中查找第一个文本字符串,并返回第一个文本字符串的起始位置的编号,该编号从第二个文本字符串的第一个字符算起。返回0则表示未查找到。
* *find_text:* 必需。要查找的文本。
* *within_text:* 必需。要在其中搜索find_text参数的值的文本。
* *start_num:* 可选。within_text参数中从之开始搜索的字符编号。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-44.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-42.png) ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-43.png)
### RIGHT
##### RIGHT(*text*,*[num_chars]*)
返回文本值中最右边的字符。
* *text:* 必需。包含要提取字符的文本字符串。
* *num_chars:* 可选。指定希望提取的字符数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-46.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-45.png)
### SPLIT
##### SPLIT(*text*, *text_separator*)
将文本按指定字符串分割成数组。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-47.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-48.png)
### TRIM
##### TRIM(*text*)
删除字符串首尾的空格,但会保留字符串内部作为词与词之间分隔的空格。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-49.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-50.png)
### UPPER
##### UPPER(*text*)
将一个文本字符串中的所有小写字母转换为大写字母。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-51.png)
### MID
##### MID(*text*, *start*num*, *num*chars*)
返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
* *text:* 必需。 包含要提取字符的文本字符串。
* *start_num:* 必需。 文本中要提取的第一个字符的位置。 文本中第一个字符的start_num为 1,以此类推。
* *num_chars:* 必需。 指定希望从文本中返回字符的个数。
这个函数将用的比较多,举一个在身份证号中提取生日的例子:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-53.png)
这个函数用了一个嵌套,用了前面说的CONCATENATE连接字符串的函数。提取身份证号的第7到10位,后面接“-”,提取身份证号的11、12位,接“-”,最后提取身份证号的13、14位。我们看下结果:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-52.png)
### TEXT
##### TEXT(*num*)
将数字转化成文本。
##### TEXT(*num*,*text_format*)
将数字转换成特定格式的文本。
其中text_format的含义如下:
* #:数字占位符。只显有意义的数据而不显示无意义的数据。小数点后数字如大于”#”的数量,则按”#”的位数四舍五入。小数点后数字如小于”#”的数量,则显示实际值。例:在文本框中输入:###.##,23.1显示为23.1,23.1578显示为23.16。
* 0:数字占位补位符。如果小数点前的数据的长度大于占位符,则显示实际数据,如果小于占位符的数量,则用0补足。小数点后的数据的长度大于占位符,则按“0”的位数四舍五入。小数点后数字如小于”0”的数量,则用“0”补足。例:在文本框中输入:000.00,23.1显示为023.10,23.1578显示为023.16。
* ,:千位分隔符。可插入“#”或“0”中使用,数字中插入千位分隔符。合法使用形式:1.需要在小数点前使用。2.需要在“#”或“0”之间。
* %:百分比。放在数字占位符或补位符之后。数据以百分比形式显示。例:代码:#%,23.1显示为2310%。
* [Num0]显示原始数据。
* [Num1]将数字转为中文小写。123显示为一百二十三
* [Num2]将数字转为中文大写。123显示为壹佰贰拾叁
* 直接在[Num0]或#或0的之前加字符即是前缀,支持中文字符,英文大小写,¥,$,及空格。
可根据自己需要自由组合.
使用举例
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-56.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-57.png)
##### TEXT(*date*, *text_format*)
其中text_format的含义如下:
* *yyyy*表示年
* *MM*表示月
* *dd*表示日
* *HH*表示24小时制的时
* *mm*表示分
* *ss*表示秒
* *E*表示星期,结果为0~6,分别表示星期日~星期六
* *EE*表示星期,例如:日、一、二等
* *EEE*表示星期,例如:星期日、星期一、星期二等
使用举例:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-54.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-55.png)
### VALUE
##### VALUE(*text*)
将文本转化为数字。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-58.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-59.png)
### GETUSERNAME
##### GETUSERNAME(*text*)
获取当前用户的昵称。
举例:与其他字段组合,实现不允许重复提交
![](http://dn-jdy-blog.qbox.me/2016-05-02_572703a72b3c5.png)
![](http://dn-jdy-blog.qbox.me/2016-05-02_572703b56075b.png)
###
### **字符串函数综合运用举例**
这里给出一个,根据身份证号码自动算性别的函数,笔者水平有限,无法把各种函数的综合运用一一例举,这里用一个典型的函数来给大家启发。
在这个表单里我要输入身份证号码,自动生成性别。单行文本“性别”字段的函数为:
需要解释的是,身份证号码第17位为性别位,奇数为男性,偶数为女性。所以此处我们用两种方式来判断性别。
(1)身份证的第17位数为奇数的时候,返回“男”,否则返回“女”。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-60.png)
(2)身份证的第17位数为1,3,5,7,9的时候,返回“男”,否则返回“女”。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-61.png)
我们看看效果:
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-62.png)
第17位为0,性别“女”,完美展现。
## 数学函数
处理数字的一系列函数方法。
### AVERAGE
##### AVERAGE(*number1*, *[number2]*, ...)
返回参数的平均值(算术平均值)。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-63.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-64.png)
### COUNT
##### COUNT(*value1*, *[value2]*, ...)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-65.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-66.png)
统计参数个数。
### LARGE
##### LARGE(*array*,*k*)
返回数据集中第k个最大值。
* *Array:* 必需。 需要确定第k个最大值的数组或数据区域。
* *k:* 必需。 返回值在数组中的位置(从大到小排)。
### MAX
##### MAX(*number1*, *[number2]*, ...)
返回一组值中的最大值。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-73.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-72.png)
### MIN
##### MIN(*number1*, *[number2]*, ...)
返回一组值中的最小值。
用法同MAX函数。
### SMALL
##### SMALL(*array*,*k*)
返回数据集中第k个最小值。
* *Array:* 必需。 需要确定第k个最小值的数组或数据区域。
* *k:* 必需。 返回值在数组中的位置(从小到大排)。
### ABS
##### ABS(number)
返回数字的绝对值。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-74.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-75.png)
### ROUND
##### ROUND(*number*, *num_digits*)
将数字四舍五入到指定的位数。
* *number:* 必需。 要四舍五入的数字。
* *num_digits:* 必需。 要进行四舍五入运算的位数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-76.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-77.png)
### CEILING
##### CEILING(*number*, *significance*)
返回将参数 number 向上舍入(沿绝对值增大的方向)为最接近的指定基数的倍数。
* *Number:* 必需。 要舍入的值。
* *significance:* 必需。 要舍入到的倍数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-79.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-78.png)
### FLOOR
##### FLOOR(*number*, *significance*)
将参数number向下舍入(沿绝对值减小的方向)为最接近的significance的倍数。
* *number:* 必需。 要舍入的数值。
* *significance:* 必需。 要舍入到的倍数。
用法同CEILING
### INT
##### INT(*number*)
将数字向下舍入到最接近的整数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-80.png)
## ![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-81.png)
### LOG
##### LOG(*number*, *[base]*)
根据指定底数返回数字的对数。
* *number:* 必需。 想要计算其对数的正实数。
* *base:* 可选。 对数的底数。 如果省略 base,则假定其值为 10。
### MOD
##### MOD(*number*, *divisor*)
返回两数相除的余数。 结果的符号与除数相同。
* *number:* 必需。 要计算余数的被除数。
* *divisor:* 必需。 除数。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-82.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-83.png)
### POWER
##### POWER(*number*, *power*)
返回数字乘幂的结果。
* *number:* 必需。 基数。 可为任意实数。
* *power:* 必需。 基数乘幂运算的指数。
### PRODUCT
##### PRODUCT(*number1*, *[number2]*, ...)
函数使所有以参数形式给出的数字相乘并返回乘积。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-85.png)
当然,也可以直接相乘
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-84.png)
两种效果是一样的
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-86.png)
### SQRT
##### SQRT(*number*)
返回正的平方根。
### SUM
##### SUM(*number1*, *[number2]*, ...)
函数使所有以参数形式给出的数字相加并返回和。
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-87.png)
![](https://dn-jdy-doc.qbox.me/form/design/design-formula/3.1.4-88.png)
### SUMPRODUCT
##### SUMPRODUCT(*array1*, *[array2]*)
在给定的数组中,将数组间对应的元素相乘,并返回乘积之和。
* *array:* 可选。多个数字数组。
主要可用于计算加权和。例如:SUMPRODUCT([1,2,3],[0.1,0.2,0.3]),相当于1*0.1+2*0.2+3*0.3=1.4
![](http://dn-jdy-blog.qbox.me/2016-04-19_57159b2d2a581.png)
![](http://dn-jdy-blog.qbox.me/2016-04-19_57159b3d18520.png)
### FIXED
##### FIXED(*number*, *[decimals]*)
将数字舍入到指定的小数位数,以十进制数格式对该数进行格式设置,并以文本形式返回结果。
* *number:* 必需。 要进行舍入并转换为文本的数字。
* *decimals:* 可选。 小数点右边的位数。
## 日期与时间函数
用于处理日期和时间的一系列函数方法。
**注意:日期控件的返回值为时间戳,单位是毫秒。而以下函数方法的参数大都是日期对象。所以可以用DATE函数处理成日期对象。**
**时间戳:时间戳是计算机记录时间的一种格式。通常是一个字符序列,唯一地标识某一刻的时间。数字时间戳技术是数字签名技术一种变种的应用。在简道云表单中,“日期时间”控件便是由这样的序列来存储的,因此在进行公式运算的时候要进行转换。**
**日期对象:日期对象的表示格式为“Sat Aug 01 2015 00:00:00 GMT+0800 (中国标准时间)”,即北京时间2015年8月1日00:00:00,这个日期对象可以进行各种运算,比如日期加减法等等。**
### DATE
##### DATE(*timestamp*)
将时间戳转换为日期对象。 * *timestamp:* 必需。时间戳。
##### DATE(*year*,*month*,*day*)
##### DATE(*year*,*month*,*day*,*hour*,*minute*,*second*)
将年月日时分秒转换为日期对象。
* *year:* 必需。年份。
* *month:* 必需。月份。
* *day:* 必需。天数。
* *hour:* 必需。小时。
* *minute:* 必需。分钟。
* *second:* 必需。秒。
例如,2015年12月1日的日期对象可以用如下表示:
DATE(2015,11,1)
DATE(1448899200000)
DATE(2015,11,1,0,0,0)
这三个都表示“Sun Nov 01 2015 00:00:00 GMT+0800 (中国标准时间)”
### TIMESTAMP
##### TIMESTAMP(*date*)
将日期对象转换成时间戳。
### TIME
##### TIME(*hour*, *minute*, *second*)
返回特定时间的十进制数字。时间值为日期值的一部分,并用十进制数表示(例如 12:00 PM 可表示为 0.5,因为此时是一天的一半)。
* *hour:* 必需。 0(零)到 32767 之间的数字,代表小时。 任何大于 23 的值都会除以 24,余数将作为小时值。 例如,TIME(27,0,0) = TIME(3,0,0) = .125
* *minute:* 必需。 0 到 32767 之间的数字,代表分钟。 任何大于 59 的值将转换为小时和分钟。 例如,TIME(0,750,0) = TIME(12,30,0) = .520833
* *second:* 必需。 0 到 32767 之间的数字,代表秒。 任何大于 59 的值将转换为小时、分钟和秒。 例如,TIME(0,0,2000) = TIME(0,33,22) = .023148
### TODAY
##### TODAY()
返回今天。
### NOW
##### NOW()
返回当前时间。与TODAY函数相同。
### DAY
##### DAY(*date*)
返回某日期的天数。 天数是介于 1 到 31 之间的整数。
### MONTH
##### MONTH(*date*)
返回某日期的月份。 月份是介于 1 到 12 之间的整数。
### YEAR
##### YEAR(*date*)
返回某日期的年份。
### HOUR
##### HOUR(*date*)
返回某日期的小时数。
### MINUTE
##### MINUTE(*date*)
返回某日期的分钟数。
### SECOND
##### SECOND(*date*)
返回某日期的秒数。
### 日期函数综合运用举例
录入护照生效日期,自动计算到期时间,到期时间为年份+10,月份不变,天数-1。
思路:提取出“护照生效日期”字段的年月日,进行加减计算出到期时间,再通过DATE()转换成日期对象,放入日期控件中得到“护照到期时间”
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e113bd5745.png)
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e118611444.png)
### DAYS
##### DAYS(*end*date*, *start*date*)
返回两个日期之间的天数。
* *end_date:* 必需。结束日期。
* *start_date:* 必需。起始日期。
### ![](http://dn-jdy-blog.qbox.me/2016-04-13_570dfc81bd491.jpg)
![](http://dn-jdy-blog.qbox.me/2016-04-13_570dfd53bf186.png)
### DAYS360
##### DAYS360(*end*date*, *start*date*, *method*)
按照一年 360 天的算法(每个月以 30 天计,一年共计 12 个月),DAYS360 函数返回两个日期间相差的天数,这在一些会计计算中将会用到。 如果财会系统是基于一年 12 个月,每月 30 天,可使用此函数帮助计算支付款项。
* *end_date:* 必需。结束日期。
* *start_date:* 必需。起始日期。
* *method:* 可选。用于指定在计算中是采用美国方法还是欧洲方法。不填或false表示是美国方法,true表示是欧洲方法。
![](http://dn-jdy-blog.qbox.me/2016-04-12_570cc6c22e7aa.png)
### DATEDELTA
##### DATEDELTA(*date*, *deltadays*)
将指定日期加/减指定天数。
* *date:* 必需。初始日期。
* *deltadays:* 必需。需要加减的天数。正数为增加,负数为减少。
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e05d0afba8.png)
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e05936d575.png)
### WEEKNUM
##### WEEKNUM(*date*, *return_type*)
返回特定日期的周数。例如,包含1月1里的周为该年的第1周,其编号为第1周。
* *data: *必需。指定日期。代表一周中的日期。应使用DATE函数输入日期,或者将日期作为其他公式或函数的结果输入
* *return_type: *可选。一数字,确定星期从哪一天开始。默认值为1。
![](http://dn-jdy-blog.qbox.me/2016-04-12_570cb38df350c.jpg)
从星期日开始计算周次
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e085d172ed.png)
从星期一开始计算周次
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e087633f09.png)
效果如下:
![](http://dn-jdy-blog.qbox.me/2016-04-13_570e08858a971.png)
### ISOWEEKNUM
##### ISOWEEKNUM(*date*)
返回给定日期在全年中的ISO周数。
* *data: *必需。日期是Ecxel用于日期和时间计算的日期-时间代码。
## 高级函数
> 用于获取表数据的一系列高级函数方法。
### MAPX
###### MAPX(operation, mapvalue, mapfield, result_field)
当指定表单的map_field列的值为map_value时,返回result_field的所有值,然后根据指定的聚合操作operation得到对应的返回值。
* operation: 必需。聚合操作。
* map_value: 必需。条件字段值。
* map_field: 必需。条件字段名。
* result_field:必需。字段返回值。
其中operation参数为字符串,可选值如下:
| 参数值 | 含义 |
| "first" | 获取返回值的第一个 |
| "last" | 获取返回值的最后一个 |
| "max" | 最大值 |
| "min" | 最小值 |
| "avg" | 平均值 |
| "sum" | 求和 |
| "count" | 获取返回值的个数 |
MAPX函数是一个“跨表单”函数。即上面的所有函数都是在当前表单运算的函数,无法读取和调用已经提交的其他表单。MAPX函数可以在一定程度上弥补这样的不足。
跨表有两种情况:(1)1张表单,录入时调用之前已经提交的数据。(2)2张表单。A表录入数据时,调用B表单已经录入的数据
下面我们举例说明一下:
这里有一个选课表,课程信息字段里有几个可选择的课程,但是每个课程有人数限制,每当一个人报名,就要累加1个。
对“我是第几个报名的”字段进行编辑函数:
![](http://dn-jdy-blog.qbox.me/2016-05-04_57297328f1a48.png)
根据MAPX函数的定义,括号里的第1个值为聚合操作,第2个值为需要检索的值,第3个值为检索范围,第4个值为返回值。对于这个例子,可解释为:在所有录入过的“课程信息”字段里查找本次录入的“课程信息”,每找到一个本次录入的“课程信息”,就返回一个“我是第几个报名”,最后用COUNT函数统计一下返回了几个“我是第几个报名的”,当然这里用来计数的字段可以选择“请输入学号”或“姓名”。看一下效果:
![](http://dn-jdy-blog.qbox.me/2016-05-03_57283fcbca500.png)
选择了健身课,发现自己是第三个报名的,已经有2人报名。
### UUID
###### UUID()
随机码生成器。
可适用于随机流水号的使用场景等。
### RECNO
###### RECNO()
累计器,依据当前表单被新打开的次数进行不断累计,起始值为1。
可适用于固定前缀或后缀的累加型流水号的使用场景等。
使用举例:
CONCATENATE('前缀',RECNO(),'后缀')
- 简介
- 1.快速入门
- 1.1新建应用
- 1.2新建表单
- 1.3表单共享
- 1.4新建报表
- 1.5总结
- 2.创建应用
- 2.1创建新应用
- 2.2应用基础设置
- 2.3.应用中心
- 3.表单
- 3.1表单设计
- 3.1.1控件类型与属性
- 3.1.2数据关联与数据联动
- 3.1.3.选项关联控件
- 3.1.4.公式与函数
- 3.1.5.表单校验
- 3.1.6.隐藏控件赋值
- 3.1.7.表单排版
- 3.1.8.成员控件
- 3.1.9.定位控件
- 3.1.10.关联查询
- 3.1.11.关联数据
- 3.2.数据管理
- 3.2.1.数据编辑
- 3.2.2.Excel导入与导出
- 3.3.表单设置
- 3.3.1.表单链接
- 3.3.2.公开查询
- 3.3.3.推送提醒
- 3.4.流程
- 3.4.1.流程设定
- 3.4.2.流程案例
- 4.报表
- 4.1.报表设计
- 4.1.1.图表类型与属性
- 4.1.2.多表关联
- 4.1.3.联动
- 4.1.4.显示格式
- 4.1.5.打印
- 4.2.报表外链
- 4.3.公式计算逻辑
- 5.聚合表
- 6.应用设置
- 6.1.应用概述
- 6.2.页面共享
- 6.3.数据权限
- 7.应用平台
- 7.1.微信企业号
- 7.2.钉钉安装详解
- 8.专题应用
- 8.1.进销存