Excel自动化,哪些表格活儿真值得交给机器人
每周一上午,运营要把三个系统导出的数据粘进一个表格,匹配金额、清洗手机号、汇总成日报,手工做一次一个半小时。这篇讲表格里的三类活怎么分,为什么很多需求不值得上自动化,CSV中转、编码和数字格式这些坑怎么填,匹配和异常怎么处理,跑完之后怎么对账才算数,以及哪些表格本来就不该碰。
周一上午九点,运营从三个系统各导一份表,粘进同一个 Excel,做 VLOOKUP 匹配,把手机号里的横杠和空格清干净,金额列加个合计,最后粘成一段话发到群里。手工做一次一个半小时,这活儿她干了快一年。
这一年里同事劝过她三次上机器人。她一直没上,理由是「表结构太乱,改一次要弄半天」。这句话后来成了我做表格自动化时第一个要问的问题。
做之前得先分清一件事。表格里的活儿有三类,价值差得很远。分不清就上机器人,很容易把 Excel 干得很好的地方换成机器人干得很差的地方。Excel自动化做出来是加分还是减分,第一步就定了。
表格里其实有三类活

第一类是计算。求和、汇总、环比、占比、透视表。这类活 Excel 自己干得又快又准,写成公式拖一下就完了。搬到机器人里,等于把计算器换成手摇。
第二类是搬运。从一个系统下载一份,粘进另一个系统的模板里,再导出去。这个过程不需要任何判断,只是重复的复制粘贴。它最容易出错,也最容易被自动化。
第三类是判断。两张表按某个键对上,重复的挑出来,格式不对的标出来。这一类最费时间,也最容易出错,因为错的地方往往藏在中间几行,人扫一眼看不出来。
一个表格流程的价值,大头在搬运和判断这两段。如果一个需求九成是求和和透视,RPA处理Excel表格大概是个亏本买卖,先把数据源接进 Excel,用它自带的功能做。
反过来,如果一个需求是「每天从五个地方各取一份表,按某个编号对上,对不上的挑出来」,这种基本不用犹豫,值得写。
这段判断放在Excel自动化开工之前做,能省掉整条流程。做完了发现九成是求和,多半会不甘心,接着硬做,那笔账就白算了。
先想清楚,表格是入口还是出口
大多数人一上手,就让机器人直接读写 .xlsx 文件。Excel自动化走这条路的人最多,坑也最多。更稳的做法是把 Excel 降级成中间格式,当入口或者当出口,中间一律走 CSV。
原因在文件格式本身。.xlsx 是个压缩包,里面除了数据还有样式、公式、合并记录、图片。程序去读它,要么依赖一堆库,要么就按单元格的坐标硬取。坐标这层一旦碰上有人调整列宽或者插一行,后面全错位。CSV 是一行一条记录、逗号分隔,格式简单到没有出错的余地。
所以常见的分工是这样。机器人负责搬,把网页上的、系统里的、邮件附件里的文件抓下来,按统一格式落成 CSV。判断也在机器人这边做,匹配、查重、标异常,做完输出一张干净表和一张异常表。最后人在 Excel 里看结果,或者把结果贴回系统。
如果流程确实需要带格式的最终报表,比如带条件格式、带图表的,那就在最后一步再转成 .xlsx。中间过程不碰格式,一步都不碰。
中文表格绕不开的四个坑
下面四条,几乎每接一个表格流程都会遇到一遍,提前说清楚能省掉大半调试时间。
编码。Excel 另存为 CSV,在中文 Windows 上默认存 GBK,程序读文件默认按 UTF-8。列名会全是乱码。更麻烦的是程序不报错,它照样把数据读进去、算出来、写出去,你看到的是一张名字乱码、数值正常的表。办法是全程指定编码,入口读文件写明 UTF-8,出口写文件也写明 UTF-8,中间转换明确写出源编码和目标编码,不要靠猜。
数字被存成了文本。手机号一串数字存进去自动变成科学计数法,带前导零的编号 0012 变成 12。发票号、订单号、合同编号都是这样丢的,而且丢得很安静,表格里看不出来,等到下游比对才发现对不上。办法是约定字段类型,号段类的字段一律当字符串处理,读进来之后先做一次格式校验,长度不对就进异常表。
日期写法混着用。一张表里 2026/1/5、2026-01-05、20260105、2026年1月5日四种写法都有。程序做字符串排序,结果跟人想的完全不一样。办法是入口统一解析成一种格式,解析不了的进异常表,不要让它猜。
合并单元格和空行。标题占两行、中间空一行是很多人做表的习惯,程序读到的列名会变成空字符串,后面每一行都错位。办法是给模板定死规矩,第一行是唯一表头,中间不许有空行,不许有合并单元格。
这四个坑有个共同点,机器不报错,人眼扫一眼就能看出来。所以每次流程上线前,先把输入文件单独打开看一眼,比跑完几百行再回头查快得多。
匹配用键,不要用位置
两张表要合在一起,靠什么对齐,只能靠键。订单号、合同号、员工工号、身份证号,这种在业务上唯一的编号。用「第几行对第几行」的做法,表头插一行就全乱。
键要选得稳。如果编号在源系统里可能重复,那它在两边都不是键,得再找一个组合键,两三个字段一起比。这时候要提前定好一件事,一对多的时候留哪一条,按时间取最新,按金额取最大,还是全都留。
匹配不上的行不要静默跳过。跳过就丢了,丢在哪一步没人知道。输出一张未匹配表,写上原始行号、原始值、为什么没对上。再统计一下没对上的比例,这个比例突然升高,通常说明上游改了什么。
对上的行也要抽样看一眼。金额列最容易在这种时候出问题,肉眼看十行,比不上跑一万行。加一条规则,关键金额合计必须等于源表里对应记录的合计,对不上就停下来。
异常单独走一条路
表格处理里最怕遇错就停。第一行有个空值,整个流程停在那里,昨天能跑的今天不能跑,业务那边完全不知道为什么。
更稳的做法是遇到单行错误就跳过它,记下来,继续往下跑。一千行里错了三行,流程跑完了,输出一张三行的异常表,人看一眼处理掉就行。
异常表要有四列。原始行号,原始值,错在哪个字段,人该做什么动作。写「原始值」而不是「错误值」,因为很多时候原文是对的,是规则套错了行。写清楚动作比写清楚错误有用,收到异常表的人不用再猜一遍。
但有些错误不能自己往下走。金额、数量、税率这类不能猜的字段,错了就得停下来问人。可以设一个阈值,异常行超过总数的百分之几就挂起流程,其余正常跑完,等人处理完再继续。
还有一类错误必须拦下来。源表行数比上次少了一半以上,或者合计金额差了一个数量级。这种情况是上游出问题了,继续跑下去只会产出更多垃圾数据。
跑完要对一次账
流程没报错不代表它算对了。这一步最容易被跳过,也最不该跳过。
对三样东西。行数,源表多少行进来,出去多少行,中间丢没丢。金额,关键字段的合计对不对得上源表。差异行,匹配失败和异常行各多少条。
对账结果别只打在日志里。写进输出的一个备注页,或者文件名里带上日期和批次,让看结果的人第一眼就知道这次跑得干不干净。
表格数据自动整理这件事,最后拼的其实不是技术,是这套约定。表头固定、命名统一、字段类型写清、异常怎么处理、结果怎么核对。这些写下来贴在一个地方,新人接手不用问。
表格数据自动整理做到这一步,才算真有交付。RPA处理Excel表格最容易停在跑通那一步,脚本能跑,没人敢信结果,一份报表发出去还要手工复核一遍,那等于没省下事。
什么情况下别做表格自动化
得说几句反面的话。有些表格自动化是错的,投入产出算不过来。
一次性干一次的表别做。写流程的时间比手工做一遍还长。
表结构一个月变三次的别做。改到后来维护的时间比做的时间长,还得多养一个人盯着。
口径说不清的别做。业务自己都说不清这个月该按哪个日期归集,机器人跑得再稳也是错的。这种时候先把口径定下来,定不下来就先手工做,做半年你自然知道口径该怎么定。
数据量小的别做。一天二十行,手工复制粘贴三分钟,比写流程省事。
规则藏在老人脑子里的也别做。「这个客户一般算特殊」这种话写不成规则,硬写出来的规则会错得让人不敢用。
还有一种情况别绕。系统明明有接口,但没人愿意给。这种时候拿界面自动化绕过去,短期能跑,长期会出事。接口会变,权限会被人管起来,出问题那天没人认。
反过来,如果一个表每天都要动、字段固定、键对得上、口径已经写在纸上,它就是表格自动化的好料。剩下的就是找到对的方式把它做扎实。
那张每周一上午粘一个半小时的表,最后是这么解决的。搬运那段交给机器人,人只负责确认最后那三行异常。力气花在了定规则上,写代码是后面的事。
延伸阅读