首页 > 代码库 > 导入Excel数据至数据库——思路整理
导入Excel数据至数据库——思路整理
说明
背景:
导入Excel数据到数据库成为目前项目中很常用的技术,整理以前的实现发现:在原来系统中的导入,没有实现方法复用,如果要实现某一处数据的导入,需要将原来的代码复制过去、修修改改,实现过程较为复杂,实现类似的功能需要对原来的代码重新梳理,结合业务修改代码。
为了让每次相同的功能都不需要重复的开发,我们需要实现一种能够得到复用的程序功能。
目的:
如图所示
我们需要将Excel中的数据记录插入到DB的表中,如何实现?
- 转换
- 将Excel转换为List
- 将Excel转换为DataTable
- 验证、解析
- 换列名——中文—属性名称(字段名称)
- 必要性——必要列、行数据
- 去重复——Excel数据的重复、Excel与DataTable数据的重复
- 默认列——Excel中没有,需要程序另外添加列、并赋予值的(导入题库:试卷Id—外键-参数传递)
- 换数据——汉字换为数字(男/女—1/0、是/否—1/0)
- 换外键——将外键列的数据更换为外键所在表的主键
- 关联表——第三张表:目标表的主键、关联表的主键、……
……
实现
示意图1:
示意图2:实现方式
Excel与数据库之间加入了XML的映射,对应Excel数据与数据库表设计之间关系,XML配置文件书写示例如下:
1.总体结构
<Excel> <Sheet name="学生" table="Student" primaryKey="StudentId" pkType="guid"> < Column> < /Column> < Column> < /Column> < Column> < /Column> …… </Sheet> </Excel>
2.详细说明
<Excel name="学生"> <!- name:Excel中Sheet的名称,不配置此属性,默认为“Sheet1”,table:对应DB中的数据表名称(使用EF生成表的话则为对应实体名),primaryKey:主键字段名,pkType:逐渐类型 -> <Sheet name="学生" table="TB_Student" primaryKey="StudentId" pkType="guid"> <!-- Column节点:name:Excel中对应列名(第一行),field:对应数据库中字段名,isNeccessary:是否必要(true/false) isVerifyRepeat=是否验证重复(true/false) --> <Column name="学号" field="SCode" isNecessary="true" isVerifyRepeat="true"> <DataType>string</DataType> <AvailableField isExistAvailableField="false" enableValue=http://www.mamicode.com/"true">Enable>
有了配置文件,剩下的工作便是通过程序将Excel与相应的XML配置结合起来,做一些中间解析、验证、转换等工作。中间的程序实现也就可以自由发挥了,当然,如果想做到比较完善,还是比较复杂的,但技术上也就没有什么大的问题了。我自己的一种实现方式,将在下一篇博客中介绍。
总结
配置文件应该是在项目中经常用到的,而一般我们的使用都是在别人已经封装好,已经制定下规定格式要求的前提下,例如web项目下的web.xml的配置,以及一些较为常用的框架,更是需要我们在其规定下进行使用。反过来想,为何我们不能在一些通用的需求功能应用上使用XML作为配置,规范出我们的规则,让程序更加灵活和通用,这便是框架的逐渐形成的方式吧。
导入Excel数据至数据库——思路整理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。