ARTICLE · 1076405
别再把带公式的Excel直接丢给AI:一个脚本先锁后查,改了公式当场拦住
上个月我们差点栽在一张报价表上。
招标方发来的附件Excel里,有一行"超时服务费",总价是公式自动算的。同事把文件丢给一个通用AI帮忙填,表拿回来看着整整齐齐,数字也都在——直到提交前我们自己复算,发现那行成本被乘了6倍,虚增了一大截。
原因不复杂:AI填表的时候,把那个公式格写成了一个固定数字。表面看格子里还是个数,公式已经没了,后面的联动全断。这种错肉眼根本看不出来。
今天讲清楚怎么防。三步:先体检,再上锁,回来逐格比对。脚本就一个文件,三十秒能跑完。
先说清楚:AI改Excel,坑在哪
带公式的Excel交给通用AI,有两个它自己都未必意识到的动作:
一是把公式拍成固定值。单元格里显示的还是1200,但原本写的是=B2*C2,数量一变它不会跟着变。
二是动那些"看着是空的"格子。有些格子没填内容,但带着边框、底色、特殊数字格式——那是留好的格式位,删了或改了,整张表的口径就乱了。
这两类格子,人眼一扫全是"正常",等你发现的时候,往往已经交出去了。
第一步:体检,先看清楚表里藏了什么
拿到一张要交出去、或者要让AI填的表,先跑scan:
python3 excel_guard.py scan 报价表.xlsx我们用一张小表演示,输出长这样:
### 工作表: 报价表 (维度 A1:E5) 公式单元格 3 个: D2: =B2*C2 D3: =B3*C3 D4: =SUM(D2:D3) 带格式的空白单元格 1 个(不可随意改/删): E5 >> 汇总: 公式 3 | 带格式空格 1 >> 铁律: 上述单元格不得交给通用 AI 直接修改;填写前先 lock。它把两类危险格全列出来了:哪些是公式,哪些是空但带格式的。你心里先有张地图,知道这张表哪些地方碰不得。
需要给别的程序用,加--json,能拿到一份完整的结构化清单。
第二步:上锁,做一份"只能填空白格"的副本
看清楚之后,不要把原件发出去,跑lock生成一份护身副本:
python3 excel_guard.py lock 报价表.xlsx -o 报价表.guarded.xlsx输出:
>> 护身副本已生成: 报价表.guarded.xlsx >> 锁定 4 个公式/带格式空格;普通格可正常填写。 >> 原始文件未改动。它干的事是:把公式格和带格式空格全部锁住、开启工作表保护,普通要填的格子反而解锁。这样无论是人在Excel里填,还是把文件给AI,那几个关键格都改不动。
原件一个字节没动,永远封存。对外只发这份.guarded副本。
第三步:回来逐格比对,公式被动过直接拦截
表填完拿回来,别急着用。留一份空白护身副本当底,跑diff:
python3 excel_guard.py diff 空白副本.xlsx 填完的副本.xlsx我们模拟了一次AI"帮倒忙"——把D2的公式写成固定值1200,还顺手把单价200改成180:
🔴 [FORMULA] 报价表!D2 '=B2*C2' → 1200 🟡 [VALUE] 报价表!B2 200 → 180 ---------------------------------------------------------------- >> 共 2 处变动,其中公式被改 1 处。红色是公式被改,黄色是普通数值变化,格式变动会标灰色。一眼看清对方到底动了什么。
关键是退出码:只要有一处公式被改,这条命令返回退出码2。这意味着你可以把它挂成一道关卡——文件过不了这一关,就不允许提交、不允许发出去。人可以偷懒,关卡不会。
注意一个用法细节:diff要拿"空白护身副本"去比"填完的副本",两份都是上了锁的,格式指纹一致,才不会报一堆无关的格式差异。别拿没锁过的原件去比锁过的副本,那样会把锁的动作本身也当成改动。
为什么值得养成这个习惯
这套动作不针对报价表。凡是带公式的Excel——成本核算、工资表、预算表、统计汇总——只要有一格是算出来的、不是手填的,就适用。
核心思路就一句话:原件不动,发锁过的副本,回来逐格对账,公式被改当场拦下。
AI填表很快,快到你来不及一格格复核。那就别靠眼睛,靠一道一定跑、跑不过就拦的关卡。
脚本和使用说明都在我们的工具目录里,excel_guard.py,一个文件,三个命令,开箱即用。需要的话可以私聊我。
投稿:硅基聊斋