Appearance
计算公式专题:「逻辑函数」
逻辑函数 是一类返回值为 真(true)/ 假(false) 的函数。
注意
在逻辑函数中,部分字段类型存在特别含义0、空值(null)、未定义(undefined) 代表 假(false)非0数值、文本、数组 代表 真(true)
1. IF
函数格式 :IF(条件, 表达式1, 表达式2)
功能说明 :若条件为真,则执行表达式1,否则执行表达式2
参数 :
条件:能得到真(true)、假(false)两种结果之一的表达式
“条件”举例
花费金额 > 60:当金额为 70 时,结果为真(true)姓名 == "小李":仅当姓名值为小李时,才为真(true)IF(幸运数 > 60, 幸运数, 幸运数 + 60):函数可嵌套,函数也可以作为条件本身年龄:只要年龄不为0,结果就不为假(false)
表达式1,表达式2:数值 / 文本 / 基础运算,例如 1 + 2 / 其他自定义函数
IF函数举例
IF(花费金额 > 60, 花费金额 * 0.8, 花费金额):仅当花费金额超过60时,打八折;否则不打折IF(姓名 == "小李", "到", "做作业"):仅当老师叫到小李的姓名后,才回复到;否则继续做作业IF(IF(幸运数 > 60, 幸运数, 幸运数 + 60) < 80, "中奖", "重在参与"):幸运数在 60-80 区间内,可以直接获奖;如果幸运数不大于 60,则为其增加 60,结果仍然小于 80 时,也可中奖IF(年龄, YEAR(当前日期) - 年龄, YEAR(当前日期)):依据年龄粗略倒推出生年份;年龄为0时,返回今年年份
使用举例 :
- 当存在库存数量的时候,对外告知“可下单”;否则,贴出“已售罄”的告示

- 如果输入了年龄,则粗略估计出生年份

2. IFS
提示
IFS 属于 IF 函数的变体,具备判断多个条件的功能,其余方面与 IF 无异
函数格式 :IFS(条件1, 表达式1, 条件2, 表达式2, ......)
功能说明 :逐个判断 条件,返回第一个 真条件 后的 表达式 的结果。
参数 :
条件x:能得到真(true)、假(false)两种结果之一的表达式,表达式x:数值 / 文本 / 基础运算,例如 1 + 2 / 其他自定义函数
条件x, 表达式x
IFS 中的参数需要 成对 看待:
当 条件1 为真,则返回 表达式1 的结果,并中止后续执行;否则执行后一判断;
当 条件2 为真,则返回 表达式2 的结果,并中止后续执行;否则执行后一判断;
...以此类推。
使用举例 :
- 根据成绩分数所在区间,来判断最终评价

条件的位置变化,会改变输出
若上图将 成绩分数 >= 60, "合格" 与 成绩分数 >= 75, "良好" 交换位置,变换后如下:
IFS(成绩分数 >= 90, "优秀", 成绩分数 >= 60, "合格", 成绩分数 >= 75, "良好", 成绩分数 < 60, "不合格")则输入 76 的判断结果为 合格 而不是 良好。这个结果并非预期,但符合 IFS 执行逻辑。
- 依据用电量分段计费电费,假设用电量越少,单位度数电费越贵。

- 不同抽奖方式(例如,刮刮乐和大转盘)的相同奖项(一等、二等...)分别对应不同的金额

3. CONTAIN
函数格式 :CONTAIN(数组1, 数组2)
功能说明 :判断 数组2 是否为 数组1 的子集。
参数 :
数组1,数组2: 数组内元素为文本 / 数值。
使用举例 :

4. BELONG
函数格式 : BELONG(数组1, 数组2)
功能说明 :判断 数组1 是否为 数组2 的子集
提示
功能上与 CONTAIN 函数完全一致,仅参数位置互换。
即 CONTAIN(计划采购, 实际采购) 等同于 BELONG(实际采购, 计划采购)。
含义均为:实际采购物品全都属于计划采购的物品吗?
参数 :
数组1,数组2: 数组内元素为文本 / 数值。
使用举例 :

4. IS_EMPTY
函数格式 :IS_EMPTY(参数)
功能说明 :当 参数 为空时返回 真
参数 :数值 / 文本 / 数组
使用举例 :
- 当表单中存在必填项,且另一个控件需要根据必填项的填写情况,来做出对应的行为,可参考此示例:

5. IS_EXIST
函数格式 :IS_EXIST(参数)
功能说明 :当 参数 不为空时返回 真,使用方式与 IS_EMPTY 完全一致,但返回值 相反 的函数。
参数 :数值 / 文本 / 数组 / 其他函数
使用举例:
IS_EMPTY(100)返回 假,而IS_EXIST(100)返回 真。- 保持功能相同,使用
IS_EXIST改写IS_EMPTY中的例子
js
IF(IS_EXIST(必填项), "已填写", "未填写")
// 等价于
IF(IS_EMPTY(必填项), "未填写", "已填写")6. NOT
函数格式 :NOT(条件)
功能说明 :对 条件 取 相反 结果
参数 :数值 / 文本 / 数组 / 逻辑函数
使用举例 :
IF(NOT(残次品数量 == 0), "发出告警", "持续运转"):当出现残次品时,发出告警;
7. AND
函数格式 :AND(条件1, 条件2, ...)
功能说明 :当 所有 条件均为 真(true) 时,返回 真(true)。
参数 :数值 / 文本 / 数组 / 逻辑函数
使用举例 :

8. OR
函数格式 :OR(条件1, 条件2, ...)
功能说明 :当 任意 条件为 真(true) 时,返回 真(true)。
参数 :数值 / 文本 / 数组 / 逻辑函数
使用举例 :
- 在 AND 函数的示例中,将
AND换为OR,综合评价便是合格。- 替换后的公式:
IF(AND(语文 > 60, 数学 > 60), "合格", "不合格") - 即,只要有一门功课的分数大于60,综合评价便可视为合格
- 替换后的公式:
提示
使用方式与 AND 完全一致,且 条件 至少有两个的情况下,返回结果不同。
9. TRUE | FALSE
函数格式 :TRUE() | FALSE()
功能说明 :返回 真(true) | 假(false),通常与其他函数配合使用,几乎没有单独使用的场景。
参数 :无
使用举例 :
- 同意并接受协议判断举例,含义如下:
- 若勾选是,则
接受显示true,拒绝显示false - 若勾选否,则
接受显示false,拒绝显示true - 若均未勾选,则控件
同意并接受协议值为空(null),他不等于false 或 true,所以计算结果均为false
- 若勾选是,则

注意
虽然 IF | IFS 等函数将 空值(null) 等价为 false, 但是 false 本身与 空值(NULL) 是不相等的
10. 嵌套举例
更多案例
这里会存放一些相对简单的案例,复杂或常用案例可以移步至 常用公式举例 查阅。
- 以下公式相对较长,遂调整 排版 方便阅读
- 部分场景会提供
IFS和IF等价的实现
提示
同一个场景描述不一定只有一个公式,以下均为实现对应需求的公式之一
10.1 IFS / IF
- 会员等级制消费与全店叠加折扣,折上折
- 若为初级会员,则打 9 折
- 若为中级会员,则打 8 折
- 若为高级会员,则打 7 折
- 若启动全店促销,则额外打 8 折
- 非会员仅能参与节日促销
JS
IF(
是否启用全店促销,
IFS(
会员等级 == "非会员", 1,
会员等级 == "初级会员", 0.9,
会员等级 == "中级会员", 0.8,
会员等级 == "高级会员", 0.7,
) * 消费总额 * 0.8,
消费总额
)10.2 IF / CONTAIN / BELONG
- 店家解谜活动,如果购买了答案商品,则对总消费金额打折
- 此处假设答案商品是 "苹果"
JS
IF(
CONTAIN(购物商品清单, ["苹果"]), 消费总额 * 0.7, 消费总额
)- 使用
BELONG改写
JS
IF(
BELONG(["苹果"], 购物商品清单), 消费总额 * 0.7, 消费总额
)10.3 IFS / IS_EMPTY
- 选课系统,根据年级不同,自动给出对应选修列表
- 一年级,给出乒乓球、羽毛球
- 二年级,给出跨栏、足球
- 三年级,给出太极、健美操
- 未选择,给出提示信息
JS
IFS(
年级 == "一年级", ["乒乓球", "羽毛球"],
年级 == "二年级", ["跨栏", "足球"],
年级 == "三年级", ["太极", "健美操"],
IS_EMPTY(年级), "请选择年级"
)10.4 IF / AND / OR / IFS
- 当且仅当主课目(语数外)全部及格,副课目(理化生)一门及格,综合评价便视为合格;否则不合格
JS
IF(
AND(
AND(语文 >= 60, 数学 >= 60, 外语 >= 60),
OR(物理 >= 60, 化学 >= 60, 生物 >= 60)
),
"合格", "不合格"
)- 使用 IFS 改写公式
JS
IFS(
OR(
物理 < 60, "不合格",
化学 < 60, "不合格",
生物 < 60, "不合格",
),
语文 < 60, "不合格",
数学 < 60, "不合格",
外语 < 60, "不合格",
外语 >= 60, "合格"
)10.5 IF / OR / IS_EMPTY / AND / IS_EXIST
- 税额计算
- 当总价格不存在,返回 0,此时税率是否存在无意义
- 当总价格存在,但总价格不大于 0,返回 0
- 当总价格存在,总价格大于 0,但税率不存在,或者税率不位于 (0, 1],区间时,返回 -1
- 否则,说明总价格与税率同时存在,且总价格大于 0,税率位于区间 (0, 1] 时,执行折扣计算;
JS
IF(
IS_EMPTY(总价格), 0,
IF(
总价格 <= 0, 0,
IF(
OR(
IS_EMPTY(税率), 税率 < 0, 税率 > 1
), -1, 总价格 * 税率
)
)
)- 使用
IS_EXIST和AND改写
JS
IF(
IS_EXIST(总价格),
IF(
总价格 > 0,
IF(
AND(
IS_EXIST(税率), 税率 > 0, 税率 < 1
), 总价格 * 税率, -1
), 0
), 0
)