AI 生成公式不难,难的是你怎么证明它算对了

“按单价和数量计算销售额”,模型很快给出 =B2*C2;“按部门汇总”,它也能写出 SUMIF 或 SUMIFS。
但公式能被写进单元格,只能证明语法像公式,不能证明结果符合业务。
公式错误至少有四种
第一种是语法错误,比如括号没闭合、函数名不存在。它最容易发现。
第二种是引用错误。模型本来应该引用 B2*C2,却因为表头判断偏了一行,写成了 B1*C1。
第三种是业务错误。公式计算过程完全合法,但“销售额”应该扣除退款,模型只算了单价乘数量。
第四种最隐蔽:第一行公式正确,批量填充后相对引用发生了偏移,某几行引用到了错误区域。
因此公式工具不能只是:
setFormula({ range, formula })
它还要承担验证职责。

写入之前先解析
SpreadJS 的计算引擎可以把公式转换成表达式。调用 formulaToExpression 时如果解析抛出异常,至少可以确定输入不是合法公式。
概念代码如下:
function validateFormula(sheet, formula, spread) {
try {
GC.Spread.Sheets.CalcEngine.formulaToExpression(
sheet,
formula,
0,
0,
spread.options.referenceStyle ===
GC.Spread.Sheets.CalcEngine.ReferenceStyle.r1c1
);
return { valid: true };
} catch (error) {
return { valid: false, message: error.message };
}
}
这一步只能拦住语法问题,但非常值得做。模型生成的内容不能因为长得像代码,就跳过解析直接写入。
先写一个样本,再批量扩展
如果要给 3000 行填充公式,不要第一步就修改 3000 个单元格。
可以先选择 3 到 5 行有代表性的样本:
- 第一行数据;
- 中间一行;
- 最后一行;
- 包含空值的一行;
- 包含异常值的一行。
在临时区域或预览状态中计算结果,再做规则校验:
{
"formula": "=B2*C2",
"samples": [
{"row": 2, "expected": 1200, "actual": 1200},
{"row": 57, "expected": 0, "actual": 0},
{"row": 3001, "expected": 860, "actual": 860}
]
}
样本通过后再批量填充,比写完再看有没有报错可靠得多。
相对引用要交给表格引擎
模型经常会生成一整列公式数组。这不仅浪费 Token,也容易在行号上犯错。
更合理的方式是让模型只描述一个基准公式和目标范围,由确定性代码完成相对引用扩展。SpreadJS 的区域公式支持自动调整相对引用,适合把同一规则应用到多行。
模型负责说“销售额等于本行单价乘数量”,工具负责把基准公式应用到正确范围。不要让模型手写 3000 个只差行号的字符串。
计算结果也要做体检
合法公式仍然可能产生 #VALUE!、除零错误或不符合业务的结果。
执行后可以检查:
- 错误值数量;
- 空结果数量;
- 是否出现循环引用;
- 结果的最小值、最大值和分布;
- 是否破坏已有公式;
- 公式引用是否越过目标数据区。
SpreadJS 工作簿可以获取循环引用信息。对于财务和经营表,再加一层业务断言会更有效,例如:
销售额不得为负
毛利率应在 -100% 到 100% 之间
汇总金额应等于明细金额之和
新增公式不得引用隐藏的临时工作表
这些规则不是模型自己“想出来”的,而是产品团队和业务人员共同定义的。
让用户看到公式,不只看到答案
有些 AI 产品生成结果后,只显示“已完成”。这会让公式变成黑盒。
更好的反馈是:
已在 D2:D3001 填充销售额公式
基准公式:=B2*C2
抽样验证:5/5 通过
错误值:0
循环引用:0
如果任务涉及关键指标,还可以先预览公式和影响范围,让用户确认后再落表。
AI 可以提公式,验证必须由系统完成
生成公式是概率问题,执行公式是确定性问题,验证公式是工程问题。
真正可用的链路应该是:
理解业务意图
-> 生成基准公式
-> 语法解析
-> 样本计算
-> 业务断言
-> 批量填充
-> 结果体检
少了后面几步,AI 公式功能越方便,批量制造错误的速度也越快。

在 SpreadJS AI Agent 实战中,公式不会被当成一段字符串直接写入,而会进入结构化工具、预执行和结果回传链路。这也是把 Demo 变成业务功能的关键一步。
想把这套方案真正跑起来
公式能生成并不代表能安全落表。课程不会只演示模型输出,而会把结构化工具、知识查询、受控代码执行、预执行和失败恢复放在同一条链路中,帮助你建立“生成之后还要验证”的工程边界。
课程《从0到1掌握企业级表格 Agent 搭建》基于公开的 SpreadJS AI Agent 项目,共 7 节,每节约 20 分钟,从整体架构一路讲到安全确认、快照回滚和调试体系。
更多推荐




所有评论(0)