跟开发方提需求的时候,导入 Excel 常常是一句话带过的功能。真用起来,用户上传十次有八次报错,还不知道错在哪,最后干脆放弃,回到手工录入。
导入功能的难点不在读取文件,在处理各种不规范的数据和给出清楚的反馈。
一、模板和格式的坑
最基础的问题是模板。有没有提供标准模板让人下载,模板里的列名是否和表头一致,能不能容忍用户加了一列备注或者删掉了一列。
实际情况是,用户很少老老实实按模板填。他会从别的系统导出数据直接传上来,列的顺序不一样,表头文字差一个字,中间多几行空白。导入功能要能识别并给出提示,或者尽量兼容。
还有合并单元格。用户喜欢把相同内容的单元格合并起来,看着整齐。程序读的时候只有第一行有值,后面的行是空的。这种情况要么在模板里明确禁止并给出提示,要么程序做向下填充的处理。两种做法都可以,关键是要想到。
日期格式是另一个高频问题。同一个文件里可能同时存在几种写法,两种不同的日期格式、文本格式的日期、带时间的日期。程序要能识别常见格式,识别不了的明确报出来是哪一行哪一列。
二、校验和重复判断
数据进库之前要校验。必填项有没有值、数值字段是不是数字、日期是否合法、引用的编码在系统里存不存在。这些校验要在导入时一次做完,而不是等入库之后才发现问题。
重复判断最需要提前约定。同一条数据已经存在,是覆盖、跳过还是报错,三种处理方式都合理,但要事先说清楚。比较常用的是让用户在导入时自己选,同时默认先校验后确认,把重复的条数列出来让用户决定。
判断重复用什么字段也要定。用编号还是用名称加日期,判断标准不同,结果差别很大。这个要结合业务实际,不清楚的地方问业务方。
三、失败怎么处理
导入最容易被忽略的是失败处理。一批一千条数据,第九百条出错了,前面九百条怎么办。
两种做法各有道理。全部回滚,一条都不入库,优点是不会留下半截数据,缺点是用户要改完错误重新导一遍一千条。部分成功,前面的入库,出错的行返回给用户修改后单独导入,优点是效率高,缺点是可能出现数据不完整的情况。
比较实用的做法是先校验后导入。用户上传之后,系统先全量校验,把有问题的行标出来,让用户下载一份带错误标注的文件去修改。用户确认没问题了,再执行真正的导入。这样导入阶段基本不会失败,也不会有半截数据的问题。
四、一个合格的导入功能该有什么表现
能下载标准模板。上传后能看到预校验结果。错误提示要具体到第几行第几列错在哪。能下载错误清单。确认导入后能给出成功多少条、失败多少条。导入历史可查,能知道谁在什么时候导了多少条。
这六条不难做到,但每一条都能显著减少用户求助的次数。做需求的时候把这几条写进去,比后期一遍遍打补丁省事得多。
上一篇项目文档最后都去哪了
