本帖最后由 phoben 于 2024-3-1 12:47 编辑
需求背景
在项目中,我们经常遇到一个需求,就是直接导入Excel数据,常见的做法一般是设计好一个导入模板,让用户按照模板填写进行导入。
但是很多场景中,让用户提供这样的模板是一件很难的事儿,毕竟这需要用户几乎重新做一张符合系统要求的表格。
这时候我不禁在想,如果能让用户直接选择它原本的Excel进行导入,那该多好,说做就做。
下面我介绍我的方法。
实现思路
1、选择文件;
2、列名映射;
3、获取数据;
4、导入数据库;
第1和第4没有任何难度,关键在于2和3两个步骤,存在两个难题:
1、如何将数据库字段名和Excel的列名进行映射?
2、如何只获取我要的列?
3、如何将Excel数据按照数据库字段名转为JSON数组方便写表?
要解决这个问题,还需要代码来做,这里只需要通过应用市场的"Excel处理器"插件辅助,就可以实现这个效果。
功能实现
首先我们来制作一个包含两个Sheet的表格来做测试,这个文件两个Sheet的标题行所在位置是不一样的,但列名是一样
sheet1
sheet2
我们要做的,就是将这个Excel按照数据的字段名进行映射,取我们要的列,转为JSON数组存到数据库;
下面是活字格的DEMO效果:
1、选择文件
2、设置列名对应关系
这里"数据库字段名"是固定的,我们让用户填写"Excel中列名"即可;
3、获取Excel数据
可以看到,Excel文件已经被转为JSON数组,并且列名已经按照我们定义的范围进行映射。
我们只需要将这个JSON数组循环写入数据库就可以。
到这里就大功告成,我们实现了让用户上传任意Excel文件,并由用户自行指定列名对应关系来实现数据导入。
实现原理
1、下载好所需插件:marketplace.grapecity.com.cn//ApplicationDetails?productID=SP2401300001&productDetailID=D2401300004
2、准备好测试表格
多Sheet表格导入文件.zip
(11.26 KB, 下载次数: 59)
|