一种通用导入Excel数据的实现方法

文档序号:6539549阅读:203来源:国知局
一种通用导入Excel数据的实现方法【专利摘要】本发明公开了一种通用导入Excel数据的实现方法,包括以下步骤:设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;读取Excel数据文档;依次执行BeforeSave()函数、默认字段赋值、普通字段赋值、BeforeFunc()函数、FuncList、AfterFunc()函数和AfterSave()函数;把AfterSave()函数中的处理结果提交数据库;遍历下一行,直到文件结束;提示用户导入结果信息。本发明通过上述原理,实现对Excel文件行级导入,支持枚举、外键字段、支持对单元格字段进行自定义处理、每行特殊处理,支持多表同时导入。【专利说明】一种通用导入Excel数据的实现方法【
技术领域
】[0001]本发明涉及数据导入方法,具体涉及一种通用导入Excel数据的实现方法。【
背景技术
】[0002]随着信息技术的发展,目前许多的智能化平台都需要采用数据库存储各种庞大的过程、结果数据,而很多资料和报表都以EXCEL文件方式输入、保存、查询、汇总、导出,因此EXCEL数据的输入和查询是非常重要的。而信息化系统项目在上线运行初期,需要将用户的基础数据录入到系统里,这些数据一般都存放在Excel文件中;或是在系统运行期,需要录入用户的Excel数据,当这些Excel记录数过大时,通过系统逐条录入会花费大量的人力和时间。[0003]而现有的Excel通用导入,基本原理都是将Excel单元格与实体类或数据库中某个字段进行绑定,一般采用实体类注解或是XML配置文件的方式,而且基本上都只支持单表String字段的导入,无法实现对某个单元格字段的一般特殊处理,如枚举和外键等,也无法实现对某个单元格字段的自定义处理和多表同时导入。【
发明内容】[0004]本发明克服了现有技术的不足,提供一种通用导入Excel数据的实现方法,通过在Excel模板中自定义表达式,定义出枚举、外键、函数等单元格,实现对Excel文件行级导入,支持枚举、外键字段、支持对单元格字段进行自定义处理、每行特殊处理,支持多表同时导入。[0005]为解决上述的技术问题,本发明采用以下技术方案:一种通用导入Excel数据的实现方法,包括以下步骤:(a)设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;(b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;(C)处理器执行BeforeSave()函数;Cd)处理器执行默认字段赋值;Ce)处理器执行普通字段赋值;Cf)处理器执行BeforeFunc()函数;(g)处理器统一执行FuncList;(h)处理器执行AfterFunc()函数;(i)处理器执行AfterSave()函数;(j)处理器把步骤(i)中的处理结果提交数据库;(k)处理器遍历下一行,直到文件结束;(I)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。[0006]每一步都是通过反射组装需要写到数据库的实体对象。操作说简单点就是构建entity对象,执行自定义函数func。至于在func里做什么则由二次开发人员根据实际需要设计。通过4个行级自定义函数和N个字段级自定义函数,二次开发者可以进行任何维度的自由扩展。其中的行级自定义函数可以在单行导入时期内,通过切面插入4个不同时机的自定义操作。其中的字段级自定义函数可以对不属于entity的字段进行操作,从而实现了多表同时导入。实现了以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术中只支持单表类型的字段,如string和int,只支持单表导入的缺陷。其中的切面插入4个不同时机的自定义操作即是可以同时对四个自定义函数进行操作。[0007]优选的,所述的自定义函数集合funcList由二次开发人员根据功能需要进行开发。[0008]优选的,步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。四个行级自定义函数为系统申明的四个函数,实现了在一行导入过程中的不同时期插入你想做的事情。[0009]优选的,步骤(b)中的单行导入包括以下步骤:(bl)创建Entity表达式;(b2)遍历此行单元格,Entity字段赋值,遇到字段级自定义函数则放入funclist中;(b3)执行funclist;(b4)保存Entity。[0010]优选的,所述的表达式信息$F为普通字段、特殊字段或者是公共字段。[0011]优选的,所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()解析时均通过jave反射找到A,找到对应的F方法,F为通过解析这个表达式获得的java方法,A为三个参数entity,单元格value和固定参数。[0012]优选的,所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()的执行时机不同。[0013]优选的,所述的行级自定义函数BeforeSave()的执行时机在单行导入的步骤(bl)和步骤(b2)之间执行,BeforeFuncO的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSaveO的执行时机在单行导入的步骤(b4)之后执行。[0014]与现有技术相比,本发明的有益效果是:1、本发明以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术只支持简单类型的字段,如String和int,只支持单表导入的缺陷。[0015]2、本发明实现对某个单元格字段的一般特殊处理,如枚举和外键等,实现对某个单元格字段的自定义处理和每行的特殊处理。【专利附图】【附图说明】[0016]图1为本发明的流程框图;图2为本发明的解析模板;图3为待导入数据示例。【具体实施方式】[0017]下面结合附图对本发明作进一步阐述,本发明的实施例不限于此。[0018]实施例1:如1-3图所示,本发明包括以下步骤:Ca)如图2所示,设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;其中的函数集合funcList根据如图3中需要导入的表格信息进行如图2所示的设置,其中的$Entity{}、$BeforeSave{},SAfterSave{}JAfterFunc{}和$F{}括号内设置的信息可根据用户需要进行不同设置,但各个函数需要保留,如$F{line,name}识别航线信息沪宁线和沪杭线,$F{line,name}识别图3中的常州工区和镇江工区,依次类推解析模板中对应函数分别对导入的整个excel表格中的不同信息模块进行同时识别。[0019](b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;(C)处理器执行BeforeSave()函数;Cd)处理器执行默认字段赋值;Ce)处理器执行普通字段赋值;Cf)处理器执行BeforeFunc()函数;(g)处理器统一执行FuncList;(h)处理器执行AfterFunc()函数;`(i)处理器执行AfterSave()函数;(j)处理器把步骤(i)中的处理结果提交数据库;(k)处理器遍历下一行,直到文件结束;(I)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。[0020]自定义函数集合funcList由二次开发人员根据功能需要进行开发。[0021]其中的默认字段表达式为$F{A}.defaultValue(B),其中的A表示字段名,B表示默认值,该表达式表式当前excel每行数据都一样的字段,此表达式也支持特殊字段,例如:$F{wzresinf0.customcode}.defaultValue(GD_DWD)。其中的普通字段表达式为$F{A},存在于entity内,A表示单元格value对应的字段名,此处支持外键。解析时通过java反射将value写到entity对应的字段上。如果是外键则通过value找到对应的id,再将id写到entity对应的字段上,例如:$F{setloc},$F{deptid.name}。其中的BeforeSave()函数的表达式为$BeforeSave(Α,Β,0..),Α表示包名.类名.方法名,B,C...表示方法固定参数,例如:$BeforeSave{com.jdgm.equipment.service,bds.EquipSetService.startSaveEquipSet},而$BeforeFunc()、$AfterFunc()、$AfterSave()与$BeforeSave()定义相同,只是执行时机不同。本发明通过在Excel模板中自定义表达式,定义出枚举、外键、函数等单元格,可以达到对每行的特殊处理,每个单元格字段的特殊处理,支持多表同时导入和Excel文件行级导入。[0022]实施例2:本实施例在实施例1的基础上优选步骤如下:步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。通过4个行级自定义函数和N个字段级自定义函数,二次开发者可以进行任何维度的自由扩展。行级自定义函数可以在单行导入时期内,通过切面插入4个不同时机的自定义操作。字段级自定义函数可以对不属于entity的字段进行操作,从而实现了多表同时导入。[0023]实施例3:本实施例在上述实施例的基础上优选步骤如下:步骤(b)中的单行导入包括以下步骤:(bl)创建Entity表达式;(b2)遍历此行单元格,Entity字段赋值,遇到字段级自定义函数则放入funclist中;(b3)执行funclist;(b4)保存Entity。能够更好的实现对某个单元格字段的一般特殊处理和某个单元格字段的自定义处理。[0024]实施例4:本实施例在上述实施例的基础上优选步骤如下:表达式信息$F为普通字段、特殊字段或者是公共字段。行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()解析时均通过jave反射找到A(entity,单元格value,固定参数)找到对应的F方法,F为通过解析这个表达式获得的java方法。行级自定义函数BeforeSave()、BeforeFunc()>AfterFunc()和AfterSave()的执行时机不同。[0025]其中的特殊字段的表达式为$F{A}[.enum(B).codetable(B)|.func(B,C,D…)],Enum、codetable、func三者不能共存,当存在enum表达式,表示这是一个枚举字段,A是字段名,B是枚举的名称;当存在codetable表达式,表示这是一个码表字段,A是字段名,B是码表的code;当存在func表达式,表示这是一个自定义函数,A是字段名,B是方法名,C,D..是固定参数,与$BeforeFunc()类似,执行时机是在每行解析单元格时执行一次。实现了处理枚举、码表和自定义函数(字段级)。其中的公共字段的表达式为$F{A}.defaultValue(B),A表示字段名;B表示默认值;此表达式支持特殊字段,例如:$F{wzresinf0.customcode}.defaultValue(GD_DWD)。[0026]实施例5:本实施例在上述实施例的基础上优选步骤如下:行级自定义函数BeforeSave()的执行时机在单行导入的步骤(bl)和步骤(b2)之间执行,BeforeFunc()的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSave()的执行时机在单行导入的步骤(b4)之后执行。该方法是最佳的执行方式,以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术只支持简单类型的字段,如string和int,只支持单表导入的缺陷。[0027]以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本【
技术领域
】的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。【权利要求】1.一种通用导入Excel数据的实现方法,其特征在于:包括以下步骤:(a)设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;(b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;(C)处理器执行BeforeSave()函数;Cd)处理器执行默认字段赋值;Ce)处理器执行普通字段赋值;Cf)处理器执行BeforeFunc()函数;(g)处理器统一执行FuncList;(h)处理器执行AfterFunc()函数;(i)处理器执行AfterSave()函数;(j)处理器把步骤(i)中的处理结果提交数据库;(k)处理器遍历下一行,直到文件结束;(I)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。2.根据权利要求1所述的一种通用导入Excel数据的实现方法,其特征在于:步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。3.根据权利要求2所述的一种通用导入Excel数据的实现方法,其特征在于:步骤(b)中的单行导入包括以下步骤:(bl)创建Entity表达式;(b2)遍历此行单元格,Entity字段赋值,遇到字段级自定义函数则放入funclist中;(b3)执行funclist;(b4)保存Entity。4.根据权利要求2所述的一种通用导入Excel数据的实现方法,其特征在于:所述的表达式信息$F为普通字段、特殊字段或者是公共字段。5.根据权利要求3所述的一种通用导入Excel数据的实现方法,其特征在于:所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()解析时均通过jave反射找到A,找到对应的F方法,F为通过解析这个表达式获得的java方法,A为三个参数entity,单元格value和固定参数。6.根据权利要求5所述的一种通用导入Excel数据的实现方法,其特征在于:所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()的执行时机不同。7.根据权利要求6所述的一种通用导入Excel数据的实现方法,其特征在于:所述的行级自定义函数BeforeSave()的执行时机在单行导入的步骤(bI)和步骤(b2)之间执行,BeforeFunc()的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSave()的执行时机在单行导入的步骤(b4)之后执行。【文档编号】G06F17/30GK103838845SQ201410078143【公开日】2014年6月4日申请日期:2014年3月5日优先权日:2014年3月5日【发明者】蒋凯,陈奇志申请人:成都交大光芒科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1