phoben 发表于 2024-2-7 16:03:59

Excel导入数据时,非得要固定模板?或许你可以这样解决列名不一致的问题!

本帖最后由 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、准备好测试表格


3、设计好页面


4、写好服务端命令
      这里重点是“列名配置”,这是从前端页面用用户填写后传入的。


5、测试:
获取多行数据:如何在活字格中实现Excel导入,并动态映射列名_哔哩哔哩_bilibili
获取指定单元格数据:Excel获取指定单元格数据插件演示_哔哩哔哩_bilibili








绿之雪 发表于 2024-2-8 09:59:22

137294886 发表于 2024-2-8 10:29:49

老师好,这个功能很实用,向老师学习!请问活字格的DEMO能否一并发一下吗?

phoben 发表于 2024-2-8 21:21:30

137294886 发表于 2024-2-8 10:29
老师好,这个功能很实用,向老师学习!请问活字格的DEMO能否一并发一下吗?

这会儿过年了,节后会发个DEMO

137294886 发表于 2024-2-8 23:07:01

谢谢,祝春节快乐!

tominson 发表于 2024-2-24 15:52:56

大神,能发个demo学习一下吗?

phoben 发表于 2024-2-25 20:23:02

tominson 发表于 2024-2-24 15:52
大神,能发个demo学习一下吗?

忙完了看做一个出来

gczxxu 发表于 2024-2-25 23:06:34

超哥,厉害

遇见未知的自己 发表于 2024-2-27 14:11:30

这个相当的厉害:hjyzw:

小卒 发表于 2024-3-1 12:04:05

好思路学习了,谢谢楼主分享。
页: [1]
查看完整版本: Excel导入数据时,非得要固定模板?或许你可以这样解决列名不一致的问题!