在制作表單時,可以設置控件與控件之間的數據聯動關系。給例如編輯完單價和數量后,自動計算總價等這樣的業務場景提供了支撐。
### 1.公式規則
(1)公式面板左側可以選擇公式所要用到的字段,被選擇后,字段在公式面板中會以反引號包裹的形式顯示。
(2)函數在簡道云里的設置是大寫,即在運用函數的時候,請用純大寫字母。
(3)公式面板除了支持基本的運算操作符+、-、*、/,還支持比較操作符>、=、
(4)函數運用時要注意參數數據類型和返回值數據類型,不對應則無法獲得正確的結果。
表單控件與其返回值的數據類型的對應關系如下表所示:
**這里要說明的是,使用公式時,該字段一定要對應返回的數據類型。字符串或數字,不能混淆。**
**
**
## 邏輯函數
返回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

?
### 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

?
### FALSE
##### FALSE()
返回邏輯值false。
### TRUE
##### TRUE()
返回邏輯值true。
TRUE和FALSE一樣,都是強制括號中的邏輯式為1或0。
### IF
##### IF(*判斷條件*,*結果為true的返回值*,?*結果為false的返回值*)
判斷一個條件能否滿足;如果滿足返回一個值,如果不滿足則返回另外一個值。
IF(A,B,C),表示如果滿足條件A,那么返回B,否則返回C。
(1)IF函數支持多層嵌套,如下圖:

(2)IF應用于下拉框/單選按鈕組,如下圖:


(3)IF用于下拉復選框/復選框組,如下圖:

?
### NOT
##### NOT(*logical*)
對參數邏輯值求反。
NOT比較簡單,就是把括號里為true的值變成false,括號里為false的值變為true。
### XOR
##### XOR(*logical1*,*[logical2]*, ...)
返回所有參數的異或值。
異或的含義是,兩個值相同,返回0,兩個值不同,返回1。
## 文本函數
處理字符串文本的一系列函數方法。
### CONCATENATE
##### CONCATENATE(*text1*,*[text2]*, ...)
將多個文本字符串合并成一個文本字符串。示例:
CONCATENATE(A,B,C),即返回值為ABC


### EXACT
##### EXACT(*text1*,*text2*)
比較兩個字符串是否完全相同(區分大小寫)。完全相同則返回true,否則返回false。示例:

?
### LEFT
##### LEFT(*text*,*[num_chars]*)
從一個文本字符串的第一個字符開始返回指定個數的字符。


### LEN
##### LEN(*text*)
返回文本字符串中的字符個數。


### LOWER
##### LOWER(*text*)
將一個文本字符串中的所有大寫字母轉換為小寫字母。


### 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來替換。


### REPT
##### REPT(*text*,?*number_times*)
將文本重復一定次數。
* *text:*?必需。需要重復顯示的文本。
* *Number_times:*?必需。用于指定文本重復次數的正數。


### SEARCH
##### SEARCH(*find*text*,*within*text*,*[start_num]*)
在第二個文本字符串中查找第一個文本字符串,并返回第一個文本字符串的起始位置的編號,該編號從第二個文本字符串的第一個字符算起。返回0則表示未查找到。
* *find_text:*?必需。要查找的文本。
* *within_text:*?必需。要在其中搜索find_text參數的值的文本。
* *start_num:*?可選。within_text參數中從之開始搜索的字符編號。

?
### RIGHT
##### RIGHT(*text*,*[num_chars]*)
返回文本值中最右邊的字符。
* *text:*?必需。包含要提取字符的文本字符串。
* *num_chars:*?可選。指定希望提取的字符數。


### SPLIT
##### SPLIT(*text*,?*text_separator*)
將文本按指定字符串分割成數組。


### TRIM
##### TRIM(*text*)
刪除字符串首尾的空格,但會保留字符串內部作為詞與詞之間分隔的空格。


### UPPER
##### UPPER(*text*)
將一個文本字符串中的所有小寫字母轉換為大寫字母。

### MID
##### MID(*text*,?*start*num*,?*num*chars*)
返回文本字符串中從指定位置開始的特定數目的字符,該數目由用戶指定。
* *text:*?必需。 包含要提取字符的文本字符串。
* *start_num:*?必需。 文本中要提取的第一個字符的位置。 文本中第一個字符的start_num為 1,以此類推。
* *num_chars:*?必需。 指定希望從文本中返回字符的個數。
這個函數將用的比較多,舉一個在身份證號中提取生日的例子:

這個函數用了一個嵌套,用了前面說的CONCATENATE連接字符串的函數。提取身份證號的第7到10位,后面接“-”,提取身份證號的11、12位,接“-”,最后提取身份證號的13、14位。我們看下結果:

### 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的之前加字符即是前綴,支持中文字符,英文大小寫,¥,$,及空格。
可根據自己需要自由組合.
使用舉例


##### TEXT(*date*,?*text_format*)
其中text_format的含義如下:
* *yyyy*表示年
* *MM*表示月
* *dd*表示日
* *HH*表示24小時制的時
* *mm*表示分
* *ss*表示秒
* *E*表示星期,結果為0~6,分別表示星期日~星期六
* *EE*表示星期,例如:日、一、二等
* *EEE*表示星期,例如:星期日、星期一、星期二等
使用舉例:


### VALUE
##### VALUE(*text*)
將文本轉化為數字。


### GETUSERNAME
##### GETUSERNAME(*text*)
獲取當前用戶的昵稱。
舉例:與其他字段組合,實現不允許重復提交


###
### **字符串函數綜合運用舉例**
這里給出一個,根據身份證號碼自動算性別的函數,筆者水平有限,無法把各種函數的綜合運用一一例舉,這里用一個典型的函數來給大家啟發。
在這個表單里我要輸入身份證號碼,自動生成性別。單行文本“性別”字段的函數為:
需要解釋的是,身份證號碼第17位為性別位,奇數為男性,偶數為女性。所以此處我們用兩種方式來判斷性別。
(1)身份證的第17位數為奇數的時候,返回“男”,否則返回“女”。

(2)身份證的第17位數為1,3,5,7,9的時候,返回“男”,否則返回“女”。

我們看看效果:

第17位為0,性別“女”,完美展現。
## 數學函數
處理數字的一系列函數方法。
### AVERAGE
##### AVERAGE(*number1*,?*[number2]*, ...)
返回參數的平均值(算術平均值)。


### COUNT
##### COUNT(*value1*,?*[value2]*, ...)


統計參數個數。
### LARGE
##### LARGE(*array*,*k*)
返回數據集中第k個最大值。
* *Array:*?必需。 需要確定第k個最大值的數組或數據區域。
* *k:*?必需。 返回值在數組中的位置(從大到小排)。
### MAX
##### MAX(*number1*,?*[number2]*, ...)
返回一組值中的最大值。


### MIN
##### MIN(*number1*,?*[number2]*, ...)
返回一組值中的最小值。
用法同MAX函數。
### SMALL
##### SMALL(*array*,*k*)
返回數據集中第k個最小值。
* *Array:*?必需。 需要確定第k個最小值的數組或數據區域。
* *k:*?必需。 返回值在數組中的位置(從小到大排)。
### ABS
##### ABS(number)
返回數字的絕對值。


### ROUND
##### ROUND(*number*,?*num_digits*)
將數字四舍五入到指定的位數。
* *number:*?必需。 要四舍五入的數字。
* *num_digits:*?必需。 要進行四舍五入運算的位數。


### CEILING
##### CEILING(*number*,?*significance*)
返回將參數 number 向上舍入(沿絕對值增大的方向)為最接近的指定基數的倍數。
* *Number:*?必需。 要舍入的值。
* *significance:*?必需。 要舍入到的倍數。


### FLOOR
##### FLOOR(*number*,?*significance*)
將參數number向下舍入(沿絕對值減小的方向)為最接近的significance的倍數。
* *number:*?必需。 要舍入的數值。
* *significance:*?必需。 要舍入到的倍數。
用法同CEILING
### INT
##### INT(*number*)
將數字向下舍入到最接近的整數。

## 
### LOG
##### LOG(*number*,?*[base]*)
根據指定底數返回數字的對數。
* *number:*?必需。 想要計算其對數的正實數。
* *base:*?可選。 對數的底數。 如果省略 base,則假定其值為 10。
### MOD
##### MOD(*number*,?*divisor*)
返回兩數相除的余數。 結果的符號與除數相同。
* *number:*?必需。 要計算余數的被除數。
* *divisor:*?必需。 除數。


### POWER
##### POWER(*number*,?*power*)
返回數字乘冪的結果。
* *number:*?必需。 基數。 可為任意實數。
* *power:*?必需。 基數乘冪運算的指數。
### PRODUCT
##### PRODUCT(*number1*,?*[number2]*, ...)
函數使所有以參數形式給出的數字相乘并返回乘積。

當然,也可以直接相乘

兩種效果是一樣的

### SQRT
##### SQRT(*number*)
返回正的平方根。
### SUM
##### SUM(*number1*,?*[number2]*, ...)
函數使所有以參數形式給出的數字相加并返回和。


### 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


### 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()轉換成日期對象,放入日期控件中得到“護照到期時間”


### DAYS
##### DAYS(*end*date*,?*start*date*)
返回兩個日期之間的天數。
* *end_date:*?必需。結束日期。
* *start_date:*?必需。起始日期。
### 

### DAYS360
##### DAYS360(*end*date*,?*start*date*,?*method*)
按照一年 360 天的算法(每個月以 30 天計,一年共計 12 個月),DAYS360 函數返回兩個日期間相差的天數,這在一些會計計算中將會用到。 如果財會系統是基于一年 12 個月,每月 30 天,可使用此函數幫助計算支付款項。
* *end_date:*?必需。結束日期。
* *start_date:*?必需。起始日期。
* *method:*?可選。用于指定在計算中是采用美國方法還是歐洲方法。不填或false表示是美國方法,true表示是歐洲方法。

### DATEDELTA
##### DATEDELTA(*date*,?*deltadays*)
將指定日期加/減指定天數。
* *date:*?必需。初始日期。
* *deltadays:*?必需。需要加減的天數。正數為增加,負數為減少。


### WEEKNUM
##### WEEKNUM(*date*,?*return_type*)
返回特定日期的周數。例如,包含1月1里的周為該年的第1周,其編號為第1周。
* *data:?*必需。指定日期。代表一周中的日期。應使用DATE函數輸入日期,或者將日期作為其他公式或函數的結果輸入
* *return_type:?*可選。一數字,確定星期從哪一天開始。默認值為1。

從星期日開始計算周次

從星期一開始計算周次

效果如下:

### 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個。
對“我是第幾個報名的”字段進行編輯函數:

根據MAPX函數的定義,括號里的第1個值為聚合操作,第2個值為需要檢索的值,第3個值為檢索范圍,第4個值為返回值。對于這個例子,可解釋為:在所有錄入過的“課程信息”字段里查找本次錄入的“課程信息”,每找到一個本次錄入的“課程信息”,就返回一個“我是第幾個報名”,最后用COUNT函數統計一下返回了幾個“我是第幾個報名的”,當然這里用來計數的字段可以選擇“請輸入學號”或“姓名”。看一下效果:

選擇了健身課,發現自己是第三個報名的,已經有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.進銷存