导出的 18 位订单号在 Excel 里显示 1.23E+17,后六位全变 0,财务按订单号匹配失败 240 条。日志里能对上时间点,这种反而好排。
CSV 没有类型,Excel 把长数字串当数值解析,超过 15 位就丢精度。导出时也没有加引号或前置制表符。订单号本来该按文本处理。这一点先确认清楚,后面就不用反复试。
ws.cell(row=i, column=1, value=order_no).number_format = '@'
df.to_csv('orders.csv', quoting=csv.QUOTE_ALL)
「导出科学计数法」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:订单号列写成="123..." 或前置制表符强制文本;导出格式改成 xlsx 并显式设置单元格类型;和财务约定导入模板 不要直接双击 CSV;抽 240 条订单号回读 逐条比对。
结果对不对很好判断,Excel 里订单号完整显示 18 位,240 条匹配全部成功。
