3

只有小功能没有小需求,6000字详解导入Excel

 1 year ago
source link: https://www.woshipm.com/data-analysis/5873836.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

只有小功能没有小需求,6000字详解导入Excel

2023-07-27
2 评论 1770 浏览 17 收藏 25 分钟
释放双眼,带上耳机,听听看~!
00:00
00:00

在B端产品中,导入是最常见的功能之一。当我们做项目时,需要涉及到大量的数据,应该如何处理数据?本文介绍了将Excel数据导入到数据库中需要注意的点和方法,希望对你有所帮助。

bcf3b564-fdc0-11ed-9128-00163e0b5ff3.jpg

最近在从0到1做一个新的项目,涉及到大量数据的维护,有简单的基础字典数据的维护,也涉及到“严肃数据”的维护,这些数据有个要求:一个都不能错。

我们是第一期版本,本来想直接写SQL更新,但是运维不让搞,也没有足够的时间去开发页面功能,为了快速生产数据,这个时候最好的方式就是“批量导入excel”。把导入的功能搞上线后,坑我踩了不少,同时导入功能也是B端产品中最常见的功能。

咱们今天就说说导入excel~接下来我先不按照导入的流程说,因为导入整体的流程比较简单。大流程就是将Excel数据导入到数据库中。

s1HKNdJiNpol9vNkxJHD.png

在细化一点,就是模板制作,用户下载模板,填写完数据后再上传文件。程序开始数据校验,有错误数据用户再修改,直到导入成功进入到数据库。

eO2jcDnyIXxOswPCLcfB.png

我就不按照导入的流程说了,直接说我个人感觉比较重要的地方,这些弄清楚那导入就没问题了。

我整理了以下4点,咱们一个个说。

OnP2aCPpPRABOiK08Kqo.png

一、导入校验

导入时为了保证数据的准确性,最重要的就是“校验”了。

因为是导入的数据最终是到数据库,如果你对数据库有了解,校验逻辑你肯定会清楚很多。

不懂也没事,咱们先说校验。

校验一般分为以下内容:

8NVO04DSzC23CZenaHCn.png

我们一个一个的说下:

1、文件校验

(1)导入文件格式

对于excel,常见的格式有xlsx、xls、csv;

推荐xlsx格式,它不仅是目前主流的excel格式,而且相同行+列数据时,xlsx格式文件体积较小。

(2)导入文件大小

对于导入文件体积大小的限制,对文件大小添加限制的主要原因是文件过大时,程序处理起来会很费劲,所以可以添加大小限制。

可以根据数据量大小设置,建议最大值在5M。

当然也可以对文件内的“行数”添加限制,比如说每次导入最多2000条等。

目的都是为了加个限制。

(3)导入文件名称

校验上传文件的文件名,当上传与要求的文件名称不一致时则报错。

当文件名称没有特殊作用时,不建议对名称进行校验。

2、模板校验

模板里有表头名称、sheet页名称,用于让程序知道需要更新数据库里的哪个表,哪个字段。

表头名称是指导入模板内的列名,当导入到数据库的时候,程序知道哪个列对应数据库里的表字段,当与导入模板要求不同时则报错。

由于一个excel里可以添加多个sheet页,如果你的模板里涉及到多个sheet页,这个时候就需要对sheet页名称进行校验。

另外还有对表头字段名称顺序的校验,我们可以加上字段顺序的校验,当字段列顺序和模板不一样的时候,则提示模板不对。

当然也可以直接按照字段名称去匹配,不管字段顺序。

当模板校验通过后,在进入到下一步的数据校验。

3、文件内数据校验

当模板校验通过后,然后在对Excel内的数据进行校验,这个时候可以对文件内的必填的单元格数据、不可重复的单元格数据进行校验。

这个时候还是对Excel内的数据进行校验,还没有到数据库。

当然有个极端情况,就是模板内数据为空,只有个表头,这个时候不需要处理,直接提示:文件内数据为空,请补充数据后再上传。

接下来就是对字段进行其他校验,具体的校验咱们在下边一起说。

4、字段校验

(1)字段是否必填

如果字段是必填值,导入的excel里单元格为空,所以数据就是错误的,则需要进行报错提示。

(2)字段是否唯一

对于一些字段,我们要求是唯一的,但是会存在2种情况:

  1. 文件内的数据有重复值
  2. 文件内的数据和数据库里已有的值存在重复

对于这2种情况,都是由于数据有误引起的,我们可以制定规则:按照最新的唯一值进行更新数据,或者是直接提示报错,

下边会细聊。

(3)字段格式

如数字格式、日期格式、时间格式、字符串格式。如果这列字段和数据库表字段的格式对不上,也导不进去。

还有就是数字的大小,比如只能输入个位数,导入时填写了100,则这个数据就有问题,就需要报错。

还有小数点位数、手机号、身份证号、税号等基础格式的校验。

这个校验需要针对每个字段进行校验逻辑说明。

(4)字段长度

比如说最大长度是250个字符,但是excel里的字段长度写了500字符,那就导不进去了,得提示报错了。

(5)固定值校验

如果某个字段需要填写的固定值。

比如说单元格内只能填写是或者否,填写其他内容时,则无法导入数据库。

对于要填写固定值的单元格,我们可以在excel模板里添加下拉框,让用户直接选择,而不用再去输入。

(6)关联校验

关联校验有2种情况:

1、当填写某个字段后,另外一个字段则必须填写。

举个例子:当填写年龄最小值或者最大值时,则必须填写年龄单位;当填写年龄单位时,则必须填写最大值或者最小值。

EjBbGwe1HvRozyk1Jxze.png

2、字段跨sheet页校验

对于模板里有多个sheet页时,且sheet页之间存在数据关系时,这个时候需要说清楚sheet页之间的校验。

举个例子:“说明书药品基本信息”中的商品编码与“说明书用法用量”中的“商品编码”需要对应上,当这两个sheet页里的商品编码对不上的时候,就是错误数据,这个时候就要报错。

TC7qGlpGyQYSiWEgtpWa.png
Dpp1pcQboteLsvJAKRmP.png

5、其它校验

整行数据重复校验:如果一行数据相同,我们就可以认为是数据存在重复值,这个时候可以进行报错提示。

多个字段联合重复校验:多个字段合并在一起联合作为唯一值,则存在重复时则可以进行提示。

根据填写的字段做更细的校验:

比如填写是数字,则需要考虑数字的大小,数字的小数点位数。

如果填写的是手机号,则需要考虑手机号格式的校验。

当以上校验通过后,接下来程序就需要将数据导入到数据库了。

我们回顾以上的校验逻辑,可以发现,这些校验和“表单录入”功能需要考虑到的校验基本相似。

二、导入报错提示

在导入时,一定会存在填写内容不对的时候,这个时候就需要进行提示出问题数据了。

首先我们先确定错误提示的时机,就是“什么时候提示”。

一般分为2种:

  1. 发现错误,立即报错
  2. 发现错误,记录错误,最后统一报错

因为报错的时机是跟着校验走的,我们需要根据错误类型进行判断:

oIhTY0Amf8luwMR1NlMc.png

1、当对文件校验不通过时,需要立即提示

因为文件校验不通过,压根无法处理数据,这个时候直接报错提示。如文件类型不对、文件大小过大、文件名称不对等等。

对于文件类型的限制,我们可以在选择文件的时候,限制选择的类型,在选择文件的弹窗内,仅展示支持的文件类型,过滤掉其它类型的文件。

对于文件体积大小的校验,可以在选择文件后,由前端进行校验,直接进行提示。

kDupytiAiCW078wU2ohQ.png

对于文件名称的校验,我建议不校验,如果非要校验,可以在上传后由前端或者后端进行校验,出现错误后直接报错提示。

2、当导入模板不对时,则立即提示

模板不对没有办法进行下一步字段校验,这个时候需要报错。

如果模板错误,我们需要将全部错误的表头一起报错出来,而不是发现一个错误表头后就立刻报错。

报错的方式,可以直接展示出错误的表头名称,并提示出正确的表头名称。

4uUC0TDcQD8Yw9krB5Vc.png

3、字段校验不通过,则统一报错

当导入模板正确,这时系统会对填写的每个字段数据进行校验,这种时候出现的问题,我认为可以在最后进行统一提示。

对于字段校验时的错误数据,有几种方式我们可以参考:

方法1:直接文字提示

说清楚sheet页名称+第几行+第几列+错误信息+正确信息。让用户线下修改,重新导入。

对于错误的信息,需要制定个排序方式,有条理的展示出错误数据,可以按照sheet页顺序+行数顺序+列顺序依次展示。

8HppdBjpVcja5ya33J73.png

不过在提醒第几行时,有个小细节,这个第几行要和excel文件内的行数对应,要提醒研发注意。

方法2:导出错误数据

功能上支持导出错误数据,在excel文件内加一列【错误信息】列,展示出每行的问题数据,让用户导出错误数据进行线下修改。

eGxyDrh4x2BjD8yWKUOO.png
Qztdv1fdFq3qkufffXx1.png

这种比较适合导入字段内容较多,数据量较大的情况。

方法3:在线修改错误数据

展示出报错数据,并提供功能让用户自己在线更改。这种方式比较适合excel内字段内容较少,校验逻辑较少的情况。

三、数据处理

当导入数据后,程序会一边跑数据,一边校验。这个时候还有几个点需要注意。

什么样的数据才能进数据库?

  1. 哪条数据校验通过,哪条数据进数据库某条数据通过校验则直接导入进数据库,对于错误的数据,则不进入数据库。
  2. 全部数据校验通过后,全部导入进数据库意思就是excel里的全部数据都通过校验后,将excel内的数据全部导入进数据库;当存在任何一条数据是错误的,则整个excel内的数据都无法导入进数据库。

重复数据的处理方式?

在导入时,当唯一值存在重复时,这个重复有2种情况:一个是在excel文件内有重复,一个是excel文件内唯一值与数据库已有的数据存在重复值。对于重复值有以下处理方式:

  • 报错,把重复值作为错误数据提示报错,让用户线下处理。这种方式比较严谨,我倒是比较推荐这种方式。
  • 更新数据不进行报错,直接按照唯一值更新数据。对于经常进行变更的数据我们可以采用这种方式。
  • 跳过数据,不进行处理当唯一值已存在时,则跳过数据,不更新数据。当已存在的唯一值无法进行更新,或者更新后影响其他数据时,则建议使用这种方式。当然,如果区分不了什么时候更新、什么时候跳过时,可以提供功能让用户选择处理。

过滤不必要的数据:

(1)过滤空格

填写在单元格里的数据当有空格时,如果没有单独要求,则可以让程序过滤掉空格。

如果空格没过滤,导入到数据库后则会形成脏数据。

如果用户填写的数据就有空格时,这个时候可以考虑清空单元格数据内的前后空格。

(2)过滤全行空白数据

当excel中的数据整行数据全部为空时,可以将空白行以及之后的行数据都不做处理。

如果我们在excel里使用了下拉框等方式,虽然没有填写值,但是程序在处理的时候会认为里边有值。

我们可以设置个规则:当一行数据全部为空时,则认为此行以及之后行都无数据。

四、导入模板制作

对于导入模板,我们需要说清楚模板怎么填写,需要把上边提到的字段校验说清楚,同时结合excel的功能制作模板。

1、制定好模板

定义好需要填写字段的表头名称,名称要和功能上的名称一致。

提供下载模板功能,让用户下载模板使用。

对于1对1的关系,这个就很简单,每列对应数据库表中的一个字段,定义好模板中的每个表头列名。

当有1对多的关系时,我们可以设计2种方式。

WQDs9Tl4lqCqNZSOPYb6.png

①一个单元格填写多个值

在单元格内填写多个值,通过一个固定的分隔符号,比如用中文逗号,中文顿号、空格等固定值,让程序知道该怎么分隔。

②分成多行填写

将1对多的关系,按照多行填写。

我们可以根据实际填写的场景设置,把规则说清楚即可。

2、制定好模板字段的填写逻辑

说明每个字段的填写要求,哪些字段是必填、哪些字段不能重复等等,就是要说清楚字段该怎么填才能导进去。

如果字段过多时,可以拉个excel表,单独说明校验逻辑提供给研发。

示例如下:

iyvJ33DRd50IeYq507Pw.png

3、说清楚“如何填写模板”

对于导入模板的填写我们可以使用以下方式:

①新增一个sheet页写模板说明

OYmZqfVeQ0ThLay0i033.png

②在模板前几行填写模板说明

eGDNUtDaFmAvtNQSqiS3.png

③在单元格添加批注的方式填写说明

MqDiQSMP1eMtzQB6YZ3w.png

④填写示例数据

新增一行示例数据,让用户知道该怎么填写。

以上的方式我们也可以结合在一起,同时提示用户该怎么填。

4、结合excel里的功能设计模板

① 如果填写的数据是固定值,我们可以使用下拉框,直接让用户下拉选择。

9vwVFeguwMwr4AP4vFJp.png

如果字典值过多的时候,可以新增一个sheet页,通过设置下拉框取值范围即可。

②在模板内的添加基础校验

Ar4lyzsI3SSOnNtUms6d.png

使用excel里的“有效性”,添加基础的校验。

yBWRBHFjkJLxq5WYZhRX.png

五、其它注意点

1、每次导入文件的数量

在开始导入前,首先要看每次支持导入的文件数量。一般每次导入1个文件。当然也能一次导入多个文件,直接每次选择多个文件即可。当同时导入多个文件时,需要注意每个文件直接是否有关系,每个文件的处理是否有处理顺序。

2、同步还是异步处理

同步处理就是导入后,直接处理,页面处于加载状态,后台进行导入处理,此时用户不能进行其它操作,只能当处理完成后,才能进行其他操作。对于数据量较小,处理时间在用户可接受时间内,比如说10秒内,可以采用同步处理的方式。我和研发沟通后,同步处理起来比较方便,我们采用的都是同步处理方式。

异步处理,就是上传文件后,在后台进行处理,用户可以进行其他操作。当后台处理完成后,在提示用户处理结果。对于数据量较大,处理时间较长时,可以采用异步处理的方式。

3、导入文件交互方式的选择

导入文件的交互方式要看采用哪种数据处理方式,才能设计对应的页面交互。

我就不一个个说了,给大家举个例子:

最简单的,每次导入1个文件+出现一个错误数据则无法导入+同步处理。

下载模板:列表里有个下载模板的入口

qOpB0eMstLxanv5WJtZP.png

选择文件:点击导入,直接弹出文件选择框,每次只能选择1个文件,上传文件就开始进行导入。

gmBMbPZpitkM7MXgvKiR.png

导入后,程序同步处理,添加个加载状态,当有错误数据时,则报错提示。

F1owEhqo1ae8JZ6H7P0i.png

导入成功后,加个“导入成功”的提示。

BeONljKJAZqqvvcn7NZs.png

其它的交互方式大家可以搜搜看,有很多。

4、添加日志记录

由于我们对数据要求很严格,所以我们添加了日志记录,用于数据追查。

5、保证功能的连续性

在我们系统中,数据导入后,需要将导入的数据提交给审核人员进行审核,所以我们在导入成功后,添加了“提交审核”的功能,用户可以直接提交数据去审核。

为了保证流程的流畅,我们可以在导入完成后,提供接下来的功能操作入口。

说了很多,导入excel是常见的基础功能,但是涉及到的内容很多,是个细活,从模板制作到校验逻辑,到报错提示,直到数据导入成功。

能把导入excel搞清楚,那我们弄其它数据相关的需求也就so easy 了。

咱们再回头看,导入excel其实就是导入到数据库。

当你对数据库有了解,你就会清晰很多,数据库有字段格式、长度、是否为空,外键等要求,这些不就是excel中的校验。

B4SHXHm0eQvhHCLU6vAn.png

所以还是推荐大家了解数据库的知识来丰富自己~

专栏作家

王大鹿,公众号:产品大鹿,人人都是产品经理专栏作家。关注医疗领域,擅长原型设计、需求分析和方案设计,分享能落地的工作技能~

本文原创发布于人人都是产品经理,未经许可,禁止转载

题图来自 Unsplash,基于 CC0 协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK