通用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 联系我,非常感谢。
相关推荐
《通用收据打印专家V1.0》...总结来说,《通用收据打印专家V1.0》是一款强大的工具,它通过其丰富的模板、自定义选项、数据管理及自动化功能,为用户在日常收据管理中带来了极大的便利,是企业或个人财务管理的好帮手。
由于没有具体的标签,我们可以假设这个工具是通用的,适用于任何使用MySQL作为数据库后端的ASP.NET项目。通过这样的工具,开发者和管理员可以更方便地进行数据库的日常管理和维护工作,提高工作效率。 总结来说,这...
CSV(Comma Separated Values)文件与TXT类似,但更规范,它使用逗号分隔各个数据项,使得数据可以轻松导入到电子表格软件如Excel中进行初步分析。 BLF格式则是CANoe的标准日志格式,包含了详细的CAN网络数据,包括...
这样的功能极大地提高了数据的可移植性和使用范围,比如,可以快速将查询结果导入到报表制作工具,或者在网页上展示数据。 - 文本格式:简洁明了,适合纯数据交换。 - Excel:适用于数据分析,具备强大的计算和图表...
《狂龙汉字转换器v1.0:全能的汉字转换工具》 在信息化时代,汉字作为中华文化的重要载体,其在不同领域中的应用广泛且多样。然而,面对不同的系统和应用场景,有时我们需要对汉字进行各种编码转换,这时就需要一款...
简易成绩分析系统使用说明 四川省泸州市纳溪区大渡中学 石明富制作 电话:13551664747 email:ddzx2122@sina.com ※※※※一、特色 1、EXCEL平台 本作品采用EXCEL 公式+VBA制作,既可根据你平时使用EXCEL的习惯和...
《通用EXCEL表格套打工具1.0:高效办公的新利器》 在信息化办公的时代,数据处理和报表制作成为日常工作中不可或缺的一部分。通用EXCEL表格套打工具1.0正是一款专为解决这一问题而设计的专业软件,它以其便捷、高效...
CSV(Comma Separated Values)是一种通用的数据交换格式,可以轻松地导入到电子表格程序如Excel中。这些文件很可能存储了每种材料的密度、比重、常见规格等信息,以便软件能够根据输入的尺寸和形状来计算材料的重量...
由于并非所有用户都熟悉这种格式,或者需要将数据导入更通用、功能更强大的分析工具如Excel,因此,ONEView 1.0的出现就显得尤为必要。它能够将QRP文件中的复杂数据结构快速转换成Excel的表格形式,使得数据处理更加...
CSV是一种通用的数据交换格式,易于读取和处理,广泛应用于数据导入到其他应用程序,如电子表格软件(如Microsoft Excel)或数据分析工具。这种功能使得数据共享和进一步分析变得更加便捷。 **安装版与绿色版** ...
《通用数据库操作程序1.0》是一款专为非专业人员设计的数据库管理工具,它简化了对数据库的复杂操作,使得不具备SQLSERVER等专业数据库管理系统使用经验的用户也能轻松进行数据管理。这款软件的主要功能包括数据的增...
户口管理系统V1.0是一款基于VB6.0开发的...总结来说,户口管理系统V1.0是一个基于VB6.0的户口数据管理应用,具备用户友好的界面,支持数据排序、查询、备份、编辑以及与Excel的交互,旨在方便地管理和维护户口信息。
"Finance V1.0"是一个基于Excel开发的财务模块,专为处理和分析财务数据而设计。Excel作为广泛使用的电子表格工具,拥有强大的计算、数据分析和图表制作功能,使其成为财务管理的理想选择。在这个模块中,可能包含了...
综上所述,批量挂QQIphone工具豆包批量挂QQIphone工具 v1.0是针对iPhone用户的一款实用工具,通过自动化处理技术实现了多个QQ账号的同时在线管理,为日常使用带来了显著的效率提升。用户在使用时应关注其安全性和...
《中小学生学籍管理 译煊全国中小学生学籍信息离线管理工具 v1.0》 在信息化的时代背景下,教育管理的数字化已经成为趋势。全国中小学生学籍信息离线管理工具是针对这一需求应运而生的专业软件,其核心功能是帮助...
用户可以直接在PDF中填写表格,或从Excel等应用程序导入表格数据,大大提高了数据管理的效率。 4. **PDF签名**:在电子文档中,数字签名是确认身份和验证文档完整性的关键。Adobe提供了安全的签名功能,允许用户...
已包含所需的Jar包,使得开发者可以直接使用提供的工具。 首先,我们需要了解Apache POI的基本用法。Apache POI提供了HSSF(处理.xls文件)和XSSF(处理.xlsx文件)两个API。这里我们主要关注XSSF,因为它是处理...
手机电话簿vcf-csv转换工具,可以实现换电话时,不同电话簿的格式转换,支持批量导入导出、修改!解决换手机的头疼问题! 此版本在原作者基础上增加通讯录管理大师DAT格式,功能更多,更加完美解决从仅支持JAVA的...
蓝麒麟成绩统计系统WL1.0 说 明 一、系统简介: 本成绩统计系统适用于初、高中各年段、高中学业水平、高考批次的统计,有较高的智能性,使用本系统成绩统计不到3分钟时间。 本系统操作简单,直观方便,比较容易让...
Java使用Apache POI库解析Excel 2003(.xls)和2007(.xlsx)文件是一项常见的任务,特别是在数据导入、数据分析或自动化处理场景中。Apache POI是一个开源项目,提供了读写Microsoft Office格式文件的能力,包括...