前两天一个客户准备上系统,跟我说"数据我都整理好了,你导吧",然后甩过来 7 个 Excel 文件。我一个个点开,看到第三个的时候沉默了。
给大家看看里面是什么样的:合并单元格做的大表头;数字存成了文本(带小绿三角那种);一个格子里塞着"黑色/大号/12个"三个信息;红色字体表示缺货、绿色表示正常;表里每 20 行插一行"小计";日期有2026/10/1、10.1、十月一日、20261001四种写法;某个单元格的批注里写着"这个数不准,问老李"。
这不是他不用心。这是 Excel 用了五年之后的正常样子。
很多人以为上系统就是把表导进去。我做了这么多单,实话实说:真正花时间的不是写代码,是把这些表收拾干净。3271 行数据,我清洗了三个晚上,比写导入功能本身的时间还长。这篇就摊开讲讲,我拿到一堆烂表之后,到底是怎么一步步把它变准的——不只是技巧,更多是顺序和取舍。
一、第一步不是动手,是先问三句话
我拿到表的第一件事,一个字都不改,先问客户:
- 这几张表,哪一张你现在天天在用?
- 这个数据是谁在维护?
- 多久更新一次?
为什么要先问?因为 7 张表里,通常只有 1 张是"活"的,剩下 6 张是某个时间点的快照。这个客户就是这样——7 张表里有 4 张是去年的,他自己以为都还在用。
基准表找错了,后面全白干。这一步省下的不是时间,是返工。
二、所有操作都在副本上做,原件一个字不动
我把 7 个文件各复制一份,文件名统一加后缀,比如库存表-副本-20261013-清洗中.xlsx,原件锁起来不动。
这么啰嗦是有原因的:清洗这活,改着改着一定会发现"刚才那步改错了"。没有原件,你连原来是多少都查不回来。
一句话讲清楚:清洗不是编辑,是考古。你得随时能回到挖之前的状态。
三、先修"结构",再修"内容"
这个顺序不能反。结构不对,内容改得再对也导不进去。
结构问题(先修):
- 取消所有合并单元格,拆出来的空格逐个填满;
- 表头只保留第一行,大标题、说明行全删掉;
- 删掉所有"小计""合计"行(这些是给人看的,不是数据);
- 一个格子只留一个信息,"黑色/大号/12个"拆成三列。
内容问题(后修):
- 文本型数字转成真数字;
- 日期统一成一种格式;
- 单位单独开一列,别写进数量里;
- 用颜色表示的信息,必须变成一列文字(比如加一列"状态",填"缺货/正常")。
最后这条最容易被忽略。颜色、批注、加粗这些,人看着一目了然,但系统一个都读不懂——程序眼里等于没有。你不把它变成实实在在的一列文字,这个信息在导入的那一刻就永久丢失了。
四、拿第二份来源去对,别自己闷头改
清洗完我觉得挺干净了,然后做了一件事:拿仓库的手工账,跟这张表逐条对了一遍。
对出来48 条对不上——有的表里有货架上没有(早卖掉了没销账),有的货架上有表里没有(新进的没登记),有的数量差一两个。
这 48 条我一条都没自己改。我列了个清单发回给客户:“这 48 条您确认一下。”
原因很简单:我不是他们公司的人,我没有判断权。我凭经验猜出来的数,长得跟真的一样,以后谁都发现不了它是猜的。
五、最重要的一条:允许"确认不了"
客户回了 40 条,剩下 8 条他也不知道。
我一开始挺着急,想着要不要按经验估一个填上。后来我没估——我给这 8 条打了个标记,导进系统时单独归到"待确认"分组里,然后跟客户说:“这 8 条您找个时间实盘一下,数完在系统里改一下就行。”
现在回头看,这是我那三个晚上做过最对的决定。
清洗到最后,一定会剩下一堆确认不了的东西。这不是失败,这是正常。你要是为了"全部对上"硬填一个数,那才是真的脏数据——因为它看起来跟真的没区别。
最后的结果
三个晚上,3271 行,最终导进系统:
- 3203 条正常导入
- 60 条修正后导入
- 8 条标记待确认
客户看完说了一句:"原来我这些数据这么乱啊。"我说不是你的问题,Excel 用到第五年,谁都这样。
顺带说一句,也是因为吃过这个亏,我在做 minierp 的时候,把导入功能特意设计成"先导 20 条 → 人工核对 → 再导剩下的",就是被这 7 张表吓出来的。批量操作,对了是批量的,错了也是批量的。
写在最后
我在做一套自研 ERP,叫 minierp,目前还在开发阶段,开发日常会持续更在这里。
如果你手头也有一堆年头很久的 Excel,正打算搬进系统又不知道从哪下手,可以在评论区说说你的表大概什么情况——我回不了所有人,但每条都会看。
关注我,看我怎么把 minierp 这套 ERP 一点点做出来。