首页 > 代码库 > 导入Excel数据至数据库——思路整理

导入Excel数据至数据库——思路整理

说明

背景:

导入Excel数据到数据库成为目前项目中很常用的技术,整理以前的实现发现:在原来系统中的导入,没有实现方法复用,如果要实现某一处数据的导入,需要将原来的代码复制过去、修修改改,实现过程较为复杂,实现类似的功能需要对原来的代码重新梳理,结合业务修改代码。

为了让每次相同的功能都不需要重复的开发,我们需要实现一种能够得到复用的程序功能。

 

目的:

如图所示

技术分享

技术分享


我们需要将Excel中的数据记录插入到DB的表中,如何实现?

  1. 转换
    1. Excel转换为List
    2. Excel转换为DataTable
  2. 验证、解析
    1. 换列名——中文—属性名称(字段名称)
    2. 必要性——必要列、行数据
    3. 去重复——Excel数据的重复、ExcelDataTable数据的重复
    4. 默认列——Excel中没有,需要程序另外添加列、并赋予值的(导入题库:试卷Id—外键-参数传递)
    5. 换数据——汉字换为数字(男/女—1/0、是/否—1/0
    6. 换外键——将外键列的数据更换为外键所在表的主键
    7. 关联表——第三张表:目标表的主键、关联表的主键、……

      ……

实现

        示意图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数据至数据库——思路整理