零代码平台的公式组件(公式+函数)全解析

做表单的人都会遇到同一类需求:验收单要自动算总金额,检查表要自动数异常项,工单要自动算处理时长。以前这些事都堆在 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 / DECODEURI | URI 编 / 解码 |
| ENCODEURICOMPONENT / DECODEURICOMPONENT | URI 组件编 / 解码(转义所有特殊字符) |
| 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') 对未结工单实时算已耗时,超时预警的数据源就有了。
七、三步上手
- 表单设计器 → 高级字段 → 拖「公式」到画布;
- 右侧选计算方式:数值点字段拼表达式 / 日期选算法 / 函数打开编辑器挑函数;
- 配输出格式(小数位、前后缀或文本/数值/日期),保存。填表时公式字段自动计算、只读展示。
八、在线体验与私有化部署
- 在线体验:http://103.236.98.220:28888(开箱即用 demo)
- 私有化部署(Docker 一行起):
docker run -d -p 28888:80 registry.cn-zhangjiakou.aliyuncs.com/xuanyuanke/zerocode:latest
平台前后端代码开放,公式引擎基于 LiteFlow 体系外的独立计算服务,欢迎一起加函数、提场景。
如果这篇文章对你有启发,欢迎点赞收藏;你所在团队里还有哪些"表单收上来还得手动算"的场景,评论区聊聊。
更多推荐




所有评论(0)