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
)