`

通用Excel导入工具V1.0 使用说明

阅读更多

 

通用Excel导入工具V1.0

 

使用说明

有时候我们的数据存放在Excel中(特别是对于用户来说更喜欢使用Excel收集一些常用数据),而系统又需要这些数据来处理其他业务,那么此时我们就需要将这些数据导入到数据库中。但是鉴于Excel的样式多种多样,因此每次导入时都必须书写很多重复的代码。很明显对于一个软件开发者做这些重复劳动是一件很无趣的事情。那么怎样来寻找一种通用的方法呢?今天我们就看一下如何解决这个问题。

总体设计思路

设计通用Excel的目的就是为了避免重复工作,也就是说不必因为Excel的样式、数据等变化而重新从零做起、重复劳动。因此我们就必须抽取一个通用的东西出来,使用时只需要关注相关的业务而不必过度关注相关excel操作和存储。再简单一点就是封装共同点,暴漏个性点。考虑到这种情况,我们可以使用配置文件的方式来解决这个问题。在配置文件中我们配置Excle要导入的表、字段等信息,在进行导入时再依据配置文件将数据导入到数据库中。这样一来,在需要进行Excel导入时只需要为某个或多个excel配置一个xml文件,然后调用相关的类就可以完成整个excel导入工作了。

补充说明:通用的局限性

在这里说明一下,虽然我们设计的是一个通用的Excel导入程序,但是这里的"通用"只是相对来说的,并不是考虑了所有Excel的情况,因为Excel的设计情况十分的复杂多样,要将所有的情况都考虑进去是一个漫长的过程。程序目前暂时不考虑包含统计行的情况(可以包含合并行、代码表字段等)。

配置文件设计

考虑使用xml配置的方式来设计通用Excel导入,如何设计好xml就成了设计的重点。对于单表导入(一个Excel主要导入到一个数据库表中,不排除牵扯其他代码表的情况)我们的配置文件无论以数据库为基础设计(主要依据数据库表结构)还是以Excel(主要依据Excel格式设计)为基础设计都可以,但如果是多表导入(也就是一个Excel可以导入到几张表中的情况)考虑其复杂性还是以数据库为基础更为合适。基于此种考虑,我们整个配置设计会以数据库表结构为基础来设计。最终的配置文件设计样例如下:

<?xml version="1.0"?>
<Config EndTag="RowBlank" HeaderIndex="1" DataIndex="2" WorkSheetCount="0">  
	<Table Name="" DeleteRepeat="true" ExcludedColumns="" >      
		<Column IsPrimaryKey="" ColumnName="" HeaderText="" Required="true" DataType="number" DataLength="100" DefaultValue="" Comment="">      
			<CodeTalbe Name="" PrimaryKey=""  ReferenceColumn="" Condition=""/>
		</Column>      
	</Table>
</Config>

 

Config节点

Config节点位于最外层,代表整个配置。其属性EndTag(数据读取的结束标志,例如"RowBlank"代表空行结束,在读取Excel时遇到某行没有任何数据的情况则视为结束;也可以为某个列地址(如C),在导入时到了此列为空就会结束导入操作);

HeaderIndex代表excel表头对应的行值,相当于标题行(默认从1开始)。

DataIndex表示数据行起始行索引(从2开始)。

WorkSheetCount表示对于整个Excel文件,如果其包含多个工作表,则会根据所设的值处理前几个工作表,属性值为0,则会处理所有工作表,默认为0。

Table节点

Table节点位于Config节点内,对应数据库中的表,可以有多个;

Name属性对应要导入的表名称;

DeleteRepeat属性表示是否删除重复行(如果为true则会根据主键先删除重复行再执行插入操作);

ExcludedColumns表示排除列,多个列名使用","分割(这些字段不会导入)。

Column节点

Column节点位于Table节点内,对列的相应配置,通常有多个(注意对于excel中没有的列,而数据库表需要导入的,也需要配置Column节点,此时HeaderText为空或不配置HeaderText属性);

IsPrimarykey属性表示是否为主键(当Table节点配置DeleteRepeat为ture时必须至少指定一个Column节点的IsPrimaryKey为true,此属性是为delete条件做准备的[有可能它不是真正的主键]);

ColumnName表示对应的列名;

HeaderText表示对应的Excel列头(在依据Excel别名导入时根据此值确定导入的列);

Required指定此列是否为必须导入的列(如果配置为true,excel中此列为空并且没有配置默认值则会抛出异常);

DataType为数据类型(例如string、number、datetime用于数据校验);

DefaultValue为默认值(注意其值不一定是指定的字符值,可以是"Max"、"NewID"、如果指定为“WORKSHEETNAME”则取当前工作薄的名称做为其值,如果为Max,那么此列必须为数值类型,此时在导入的时候如果需要使用默认值,就会在原来数据库表中此列最大值的基础上加上1导入到数据库中,如果为NewID在导入的时候需要使用默认值系统就会自动生成Guid值);

Comment是此列的说明。

CodeTable节点

在Column节点中还可以配置CodeTable节点,表示代码表。

Name属性值表示引用表的表名称;

PrimaryKey指待引用主表的主键,也就是子表的外键,Column配置节点的ColumnName属性值应该与CodeTable节点的PrimaryKey属性值设置一至,如以下配置:

<ColumnColumnName="CategoryID"HeaderText="商品种类"DefaultValue="">

<CodeTalbeName="Categories"PrimaryKey="CategoryID"ReferenceColumn="CategoryName"/>

</Column>

ReferenceColumn表示对应代码字段关联名称列,就是我们导入时所依据的excel对应值(例如CategoryID对应CategoryName,那么ReferenceColumn就是CategoryName,往往Excel中可能存放的是类似于CategoryName的东西而不是CategoryID,而导入操作时需要CategoryID)。

导入实例说明:

图一待导入Excel文件,可同时导入多个工作薄(WorkSheet)


图二设置导入规则


图三使用开发的导入工具进行导入


图四导入完成后入库的数据

 

 

作者: EricHu
出处: http://blog.csdn.net/chinahuyong
微博: 腾讯
Email: 406590790@qq.com
QQ 交流:406590790 
平台博客: 【CSDN】http://blog.csdn.net/chinahuyong
         【CNBLOGS】http://www.cnblogs.com/huyong
关于作者:高级工程师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,精通DotNet,DB(SqlServer、Oracle等)技术。熟悉Java、Delhpi及Linux操作系统,有扎实的网络知识。在面向对象、面向服务以及数据库领域有一定的造诣。现从事DB管理与开发、WinForm、WCF、WebService、网页数据抓取以及ASP.NET等项目管理、开发、架构等工作。
如有问题或建议,请多多赐教!
本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。

 

分享到:
评论

相关推荐

    中小学学生成绩管理系统EXCEL V1.0版

    简易成绩分析系统使用说明 四川省泸州市纳溪区大渡中学 石明富制作 电话:13551664747 email:ddzx2122@sina.com ※※※※一、特色 1、EXCEL平台 本作品采用EXCEL 公式+VBA制作,既可根据你平时使用EXCEL的习惯和...

    蓝麒麟成绩统计系统WL1.0

    蓝麒麟成绩统计系统WL1.0 说 明 一、系统简介: 本成绩统计系统适用于初、高中各年段、高中学业水平、高考批次的统计,有较高的智能性,使用本系统成绩统计不到3分钟时间。 本系统操作简单,直观方便,比较容易让...

    asp.net知识库

    正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 ...

    基于ATmega32U4的同步MPPT降压太阳能充电器-电路方案

    您可以在Excel中导入txt文件 警告!始终根据您的电池类型调整输出电压和输出电流限制!! 效率在84%至92%之间(不包括约75mA的电路板供电电流) v1.0中的新功能: 初步提交,使用我的10W和20W太阳能电池板进行测试,...

    C#敏捷开发公共资源库

    6.xb.FrameWork.Office:此组件为Office操作组件,借助于NPOI2.1.1.0 可以实现对03到16版本的Excel的各种导入、导出功能,并且支持Word的导出功能(此导出功能非常强大,支持段落、表格导出,纸张、字体、标题的...

    人力资源管理软件(完全免费)

    人力资源管理软件使用说明 运行oclient.exe,初始化密码为空的 默认为演示库供学习练习,正式使用时使用右边的选择数据库切换到正式库 采用模板文件进行一次性导入或者按下面分别建立相关信息 建立部门信息,...

    大数据时代数据挖掘与分析-讲义.pdf

    数据分析工具概览 存储层 展现层 分析层 用户级 部门级 企业级 BI级 统计分析工具SPSS Statistics SPSS是专业的通用统计软件包,兼有数据管理、统计分析、 统计绘图和统计报表功能, SPSS统计分析软件具有下列特点 ...

    vc++ 应用源码包_1

    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...

    vc++ 应用源码包_2

    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...

    vc++ 应用源码包_3

    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...

    vc++ 应用源码包_6

    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...

    vc++ 应用源码包_5

    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...

    vc++ 开发实例源码包

    Excel文件的导入和导出操作 如题。主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件...

    网管教程 从入门到精通软件篇.txt

    Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...

    易语言程序免安装版下载

     使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib或.obj为后缀的将被视为静态库,可使用绝对路径或相对路径(相对当前源代码所在目录),如依赖多个静态库请分别列出并以逗号分隔;“在库中的...

    C#基类库(苏飞版)

    CSV文件导入DataTable和DataTable导出到Csv文件等操作 4.DEncrypt 加密/解密帮助类 DEncrypt C#DEncrypt加密/DEncrypt解密帮助类 ,多种方式,可以设置Key DESEncrypt C#DESEncrypt加密/DESEncrypt解密帮助类 ...

Global site tag (gtag.js) - Google Analytics