有次我把导出的订单表发给财务,对方回我一句"你这订单号怎么全是 0"。我打开自己这边看,明明好好的。来回传了两趟才发现,是我这边把 CSV 双击打开,订单号被 Excel 改过了,我发给财务的那份,尾数早就变成 0 了。
这个坑不大,但特别容易让人背锅,尤其是要拿订单号去对账的时候。这篇把我踩过的经过和解决办法写清楚,包括怎么导入才不变形。
订单号为什么会变成一长串 0
原因在 Excel 自己的规则上。它把一串纯数字默认当成数值来处理,而数值只保留十五位有效数字,超过的部分统一补成 0。拼多多的订单号远不止十五位,于是后面几位就被抹掉了,有的还会显示成带字母 E 的科学计数法,看着像一串乱码。
这里有个反常识的地方:你在单元格里看到的可能还是完整数字,但你点进去看编辑栏,尾数已经变成 0 了。也就是说,光看表面会以为没事,其实数据已经坏了。
我用的是订单编号,不是金额。金额位数少,不受影响,出事的基本都是订单号、手机号这类长数字。
我是怎么发现这个坑的
那次对账我按订单号做匹配,怎么都对不上,几十行里有一小半匹配不到。我一开始以为是发票那边的问题,核了半天。后来偶然把两边的订单号贴在一起比,才发现我这份的尾数是 0,另一份是原样,两边根本不是一个号。
再回头看,罪魁祸首就是我打开文件的方式。我当时是直接双击 CSV,系统默认用 Excel 打开,Excel 没问我,自己就把订单号当数值处理了。改过来之后再导一次,就好了。
后来我养成一个习惯,任何要发出去的表,发之前先在编辑栏里点一下订单号,看尾数是不是原样。就这么一个小动作,帮我拦下过好几次坏数据。别人传给我的表,我也一样先点开看一眼,确认订单号没坏再用。
变形之后会带来什么麻烦
最直接的就是对账对不上。订单号是你和发票之间唯一的锚点,这个号一坏,两边就断了联系,你只能靠金额和时间去猜,撞车的多了根本没法查。
第二个麻烦是发给别人的那份也是坏的。你以为自己这边的文件没问题,其实保存和转发的时候,坏的数据一并带出去了,等对方发现,来回沟通又要花时间。
第三种最隐蔽,就是把坏数据存进了长期台账。我当时那份月度表一直留着,后来复盘才发现,表里的订单号有相当一部分是错的,等于白存。
还有一点,坏数据一旦混进你按月份留的长期表,以后想追溯哪笔订单对应哪张票,基本就断了线索,只能回到平台上一笔笔重新导,前面花的时间等于白费。
手工导入 Excel 的时候怎么保住订单号
如果你不用工具,就用 Excel 自带的导入,别双击。走数据导入那条路,把 CSV 当外部数据源打开,导入向导里会问你每一列的格式,到了订单号那一列,手动选成文本,导进去就不会变形。
也可以先把那一列的单元格格式设成文本,再把数据粘进去。这个办法快,但要注意粘之前格式得先设好,粘完了再改格式,尾数已经丢了,改不回来。
这两种办法我都用过,能解决。缺点是每次导入都要记着做这一步,换台电脑、换个软件,又得重来一遍,时间长了容易漏。
还有一点,导入成功之后最好立刻另存一份,把订单号已经是文本的这份存下来当底稿。后面再怎么加工、再复制粘贴,都以这份底稿为准,别在已经改过的表上继续折腾。
商品名里带逗号,会串列
顺带说一个同源的问题。CSV 用逗号分隔字段,如果商品名里本身带逗号,打开的时候那一行就容易串列,商品名被拆成两格,后面所有列跟着错位。
这个我是吃过亏的。有一批货名里带了顿号和逗号,导出来一打开,金额列里混进了商品名的一部分,求和的时候数全乱了。后来我才知道,规范的导出会把字段内部的逗号换成全角,避开这个冲突。
我后来改成这样
上面那两个问题,根子都在"导出这一步的格式处理"上。手工去补不是不行,只是每次都得记着,我嫌烦,就把这段交给了工具。
我现在用的是多多开票助手(安装和第一次使用我写过教程),它是一个装在浏览器上的扩展,能把订单导成一张表格。它导出的时候给订单号这类长数字加了文本标记,我用 Excel 直接打开也不会变成 0;字段内部的逗号会先换成全角,商品名带逗号也不会串列。
但它能管的只是导出这一段的格式。导出来之后你怎么排序、怎么跟发票记录去核,还是你自己的工作,它不参与。票面上金额和抬头对不对,同样得自己一张张看。
常见问题
订单号在 Excel 里已经变成 0 了,还能改回来吗?
改不回来。被 Excel 抹掉的尾数就是丢了,只能重新导一次,这次记得在导入时把订单号设成文本。
把单元格格式先设成文本,再粘贴,有用吗?
有用,但顺序不能反。格式必须先设成文本,再粘数据;先粘后改格式,数据已经坏在里头了。
用 WPS 打开会不会好一点?
默认行为跟 Excel 类似,双击打开一样可能把长数字当数值。稳妥的做法是不管用哪个软件,都走"导入"而不是"双击"。
每次都要手动设文本,有没有一次搞定的办法?
用工具导出、让它在源头把长数字标成文本,就不用每次动手了。我用的多多开票助手就是这么处理的,省掉了导入时那一步。