在这里插入图片描述

做表单的人都会遇到同一类需求:验收单要自动算总金额,检查表要自动数异常项,工单要自动算处理时长。以前这些事都堆在 Excel 里,表单收上来的数据还得再导出来算一遍。

ZeroCode 平台的表单设计器里有一个「公式」组件,把这件事直接搬进了表单:字段点一下就能引用,公式存好之后,填表的人每改一个值,结果立刻跟着变。这篇文章把它拆开讲清楚:三种计算方式、函数编辑器怎么用、内置了哪些函数、以及它是怎么保证"算得对"的。

在这里插入图片描述

一、三种计算方式:数值、日期、函数

在表单设计器里拖一个「公式」字段(高级分类下),右侧设置面板会出现「计算方式」三个选项:

在这里插入图片描述

1. 数值——最常用的四则运算。表达式框下方有一排运算符按钮(+ - * / ( ))和当前表单的字段标签,点字段插入引用、点运算符连接,不用手写任何语法。下方可以配小数位数(0-6 位)、前缀(如 ¥)、后缀(如 元、%),算出来的结果直接带格式展示。

2. 日期——三种算法:

  • 日期间的时长:选开始、结束两个日期字段,自动算间隔;
  • 为日期加减时间:表达式写 +8h+1m-1d+8h 这种格式,单位支持 年/月/天/时/分;
  • 距离此刻的时长:拿日期字段和当前时间比,适合算"已进行几天"“还剩几小时”。

输出格式可选日期+时间、天、小时、分钟。

3. 函数——打开一个独立的函数编辑器,是整个组件能力的天花板,下一节细说。

二、函数编辑器:左边挑函数和字段,右边写表达式

计算方式切到「函数」,点击表达式框,会打开一个 960px 宽的编辑器:

在这里插入图片描述

布局是经典的左右两栏:

  • 左侧面板:「函数」「字段」两个页签 + 搜索框。函数按分类分组折叠(常用函数、数学函数、日期函数、文本函数、逻辑函数、高级函数);字段页签列出当前表单所有可引用字段。
  • 右侧编辑区:第一行是「字段名 =」,下面是等宽字体的表达式编辑框,支持空格、缩进、换行。
  • 实时提示:鼠标悬停在左侧任何函数上,下方提示区立刻显示这个函数的名称、语法、示例和说明——相当于内置了一本速查手册。
  • 语法校验:输入过程中实时检查括号匹配,不匹配立刻标红「语法错误:括号不匹配」。
  • 点击插入:点函数名,函数名() 直接插进光标位置且光标落在括号内;切到字段页签点字段,$字段名$ 引用自动插入。整个表达式基本可以不碰键盘拼出来。

再看函数列表本体:

在这里插入图片描述

三、内置函数全景:5 大类 67 个,底层还有 431 个 Excel 函数

编辑器里可以直接查到的函数有 67 个,分五类:

在这里插入图片描述

挑常用的列个速查表:

数学函数(求和、均值、舍入、幂对数)

函数说明示例
SUM求和=SUM(10,20,30) → 60
AVERAGE平均值=AVERAGE(10,20,30) → 20
MAX / MIN最大 / 最小值=MAX(10,20,30) → 30
ROUND四舍五入到指定位数=ROUND(3.14159,4) → 3.1416
ROUNDUP / ROUNDDOWN向上 / 向下舍入=ROUNDUP(3.14,1) → 3.2
CEILING / FLOOR按倍数向上 / 向下舍入=CEILING(7,3) → 9
PRODUCT乘积=PRODUCT(15,4) → 60
ABS / INT / MOD绝对值 / 求整 / 求余=MOD(15,4) → 3
POWER / LOG幂 / 对数=POWER(2,3) → 8
COUNTA / COUNTBLANK计非空 / 计空值=COUNTA(1月,2月,3月) → 2
COUNTCHAR计字符数=COUNTCHAR(标题) → 12
COUNTARRAY计数组类字段数量(子表、多选、附件等)=COUNTARRAY(工序) → 7
NUMBER / STRING强制转数值 / 转文本=NUMBER('-1')+5 → 4
RANDBETWEEN区间随机整数=RANDBETWEEN(1,10) → 7

日期函数(时长、加减、工作日)

函数说明示例
DATEIF两日期之间时长=DATEIF('2021-3-8','2021-3-14',2,'d') → 7天
DATEADD日期加减时间段=DATEADD('2008-11-11 12:23','+8h',2) → 2008-11-11 20:23
NETWORKDAY两日期间工作日数(可排节假日)=NETWORKDAY('2021-3-8','2021-3-14',['2021-3-8']) → 4天
WORKDAY相隔指定工作日的日期=WORKDAY('2025-2-19',10) → 2025-03-05
DATENOW当前时间=DATENOW()
YEAR / MONTH / DAY取年 / 月 / 日=YEAR('2021-5-1') → 2021
WEEKDAY / WEEKNUM星期几 / 一年中第几周=WEEKNUM('2025-2-19',2) → 8
HOUR / MINUTE取时 / 分=HOUR('2021-5-1 11:59') → 11

文本函数(合并、提取、替换)

函数说明示例
CONCAT合并多段文本=CONCAT('aaaa','2021') → aaaa2021
LEFT / RIGHT / MID从左 / 右 / 中间提取=MID($编号$,5,4) → 2021
REPLACE / SUBSTITUTE按位置 / 按内容替换=REPLACE('+86135...',1,3,'') → 去掉区号
TRIM / CLEAN删首尾 / 删全部空格=TRIM(' 南京 ') → ‘南京’
UPPER / LOWER转大写 / 小写=UPPER('hello') → HELLO
FIND / FINDA找间隔符之间的内容(单个 / 全部)=FINDA("(X2022)2f(NZ)","(",")") → X2022,NZ
SPLIT / JOIN分割 / 拼接=SPLIT("HX045-SZ190","-") → HX045,SZ190
REPT重复生成字符=REPT('*',5) → *****
STRREVERSE字符串反转=STRREVERSE('Hello') → olleH

逻辑函数(判断、组合)

函数说明示例
IF条件分支=IF($分数$>=60,'及格','不及格')
IFS多条件顺序匹配=IFS($A$>10,"大",$A$<5,"小",TRUE(),"中")
AND / OR / NOT与 / 或 / 非=AND($语文$>=60,$英语$>=60)
ISBLANK判断为空=ISBLANK($年龄$)
INCLUDE包含判断=INCLUDE("上海市闵行区","闵行") → true

高级函数(URL 编解码、定位)

函数说明
ENCODEURI / DECODEURIURI 编 / 解码
ENCODEURICOMPONENT / DECODEURICOMPONENTURI 组件编 / 解码(转义所有特殊字符)
DISTANCE两定位字段间距离(千米)
GETPOSITION从定位字段取标题 / 地址 / 经纬度

这 67 个是编辑器里有说明书的部分。底层引擎基于 hot-formula-parser(Handsontable 的 formulajs),标准 Excel 函数大部分直接可用——合计 431 个函数兜底,再加上平台自己注册的 CONCAT/NUMBER/COUNTARRAY/DATEIF/DATEADD/DATENOW 等语义修正版。

四、字段引用与子表汇总:跨行聚合是标配

公式里引用字段有两种写法,编辑器都帮你自动处理:

  • 主表字段:$字段名$(编辑器插入的格式),运行时归一成 {字段名} 求值;
  • 子表字段:{子表名.字段名},放在聚合函数里就是跨行汇总:
SUM({采购明细.小计})        ← 采购明细每一行的"小计"求和,即订单总额
AVERAGE({检查项.得分})      ← 所有检查行的平均分
COUNTA({巡检点.状态})       ← 巡检点行数

甚至裸写 {子表.字段} 不套函数,引擎默认按"整列求和"处理——这是明细表最常见的意图。

五、实时计算,前后端双引擎兜底

在这里插入图片描述

填表时每改一个值,公式结果立刻刷新——前端跑着一套共享公式引擎(hot-formula-parser),主表单、子表格、记录编辑弹窗用的都是同一个运行时,子表某一行改个数,主表的 SUM 汇总马上重算。

但要强调一点:前端算的只是实时预览,真正落库的值由后端公式引擎在保存时重算覆盖。这样即使前后端引擎有细微语义差异,数据库里的数字也只有一个权威来源,读路径统一走后端重算,不会出现"页面上一个数、导出来另一个数"。

六、三个业务场景,直接抄

场景 1:日管控检查表——异常项自动计数
检查结果用单选(正常/异常),配一个公式字段:
IF($检查结果$=='异常',1,0),整列加总就是异常项数;再配 COUNTCHAR($异常说明$) 控制描述字数是否达标。

场景 2:采购/销售单——子表明细自动汇总
子表里每行配 数量*单价 的小计公式,主表配 SUM({采购明细.小计}),改任何一行的数量,订单总额实时变,提交时后端再算一遍兜底。

场景 3:工单时效管理
DATEIF($开始时间$,$结束时间$,2,'h') 算处理时长;WORKDAY($受理日期$,3) 算承诺办结日;DATEIF($受理时间$,DATENOW(),2,'h') 对未结工单实时算已耗时,超时预警的数据源就有了。

七、三步上手

  1. 表单设计器 → 高级字段 → 拖「公式」到画布;
  2. 右侧选计算方式:数值点字段拼表达式 / 日期选算法 / 函数打开编辑器挑函数;
  3. 配输出格式(小数位、前后缀或文本/数值/日期),保存。填表时公式字段自动计算、只读展示。

八、在线体验与私有化部署

docker run -d -p 28888:80 registry.cn-zhangjiakou.aliyuncs.com/xuanyuanke/zerocode:latest

平台前后端代码开放,公式引擎基于 LiteFlow 体系外的独立计算服务,欢迎一起加函数、提场景。

如果这篇文章对你有启发,欢迎点赞收藏;你所在团队里还有哪些"表单收上来还得手动算"的场景,评论区聊聊。

Logo

一站式 AI 云服务平台

更多推荐