CN103838845A - 一种通用导入Excel数据的实现方法 - Google Patents
一种通用导入Excel数据的实现方法 Download PDFInfo
- Publication number
- CN103838845A CN103838845A CN201410078143.4A CN201410078143A CN103838845A CN 103838845 A CN103838845 A CN 103838845A CN 201410078143 A CN201410078143 A CN 201410078143A CN 103838845 A CN103838845 A CN 103838845A
- Authority
- CN
- China
- Prior art keywords
- function
- processor
- field
- information
- importing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种通用导入Excel数据的实现方法,包括以下步骤:设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;读取Excel数据文档;依次执行BeforeSave()函数、默认字段赋值、普通字段赋值、BeforeFunc()函数、FuncList、AfterFunc()函数和AfterSave()函数;把AfterSave()函数中的处理结果提交数据库;遍历下一行,直到文件结束;提示用户导入结果信息。本发明通过上述原理,实现对Excel文件行级导入,支持枚举、外键字段、支持对单元格字段进行自定义处理、每行特殊处理,支持多表同时导入。
Description
技术领域
本发明涉及数据导入方法,具体涉及一种通用导入Excel数据的实现方法。
背景技术
随着信息技术的发展,目前许多的智能化平台都需要采用数据库存储各种庞大的过程、结果数据,而很多资料和报表都以EXCEL文件方式输入、保存、查询、汇总、导出,因此EXCEL数据的输入和查询是非常重要的。而信息化系统项目在上线运行初期,需要将用户的基础数据录入到系统里,这些数据一般都存放在Excel文件中;或是在系统运行期,需要录入用户的Excel数据,当这些Excel记录数过大时,通过系统逐条录入会花费大量的人力和时间。
而现有的Excel通用导入,基本原理都是将Excel单元格与实体类或数据库中某个字段进行绑定,一般采用实体类注解或是XML配置文件的方式,而且基本上都只支持单表String字段的导入,无法实现对某个单元格字段的一般特殊处理,如枚举和外键等,也无法实现对某个单元格字段的自定义处理和多表同时导入。
发明内容
本发明克服了现有技术的不足,提供一种通用导入Excel数据的实现方法,通过在Excel模板中自定义表达式,定义出枚举、外键、函数等单元格,实现对Excel文件行级导入,支持枚举、外键字段、支持对单元格字段进行自定义处理、每行特殊处理,支持多表同时导入。
为解决上述的技术问题,本发明采用以下技术方案:一种通用导入Excel数据的实现方法,包括以下步骤:
(a) 设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;
(b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;
(c)处理器执行BeforeSave()函数;
(d)处理器执行默认字段赋值;
(e)处理器执行普通字段赋值;
(f)处理器执行BeforeFunc()函数;
(g)处理器统一执行FuncList;
(h)处理器执行AfterFunc()函数;
(i)处理器执行AfterSave()函数;
(j)处理器把步骤(i)中的处理结果提交数据库;
(k)处理器遍历下一行,直到文件结束;
(l)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。
每一步都是通过反射组装需要写到数据库的实体对象。操作说简单点就是构建entity对象,执行自定义函数func。至于在func里做什么则由二次开发人员根据实际需要设计。通过4个行级自定义函数和N个字段级自定义函数,二次开发者可以进行任何维度的自由扩展。其中的行级自定义函数可以在单行导入时期内,通过切面插入4个不同时机的自定义操作。其中的字段级自定义函数可以对不属于entity的字段进行操作,从而实现了多表同时导入。实现了以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术中只支持单表类型的字段,如string和int,只支持单表导入的缺陷。其中的切面插入4个不同时机的自定义操作即是可以同时对四个自定义函数进行操作。
优选的,所述的自定义函数集合funcList由二次开发人员根据功能需要进行开发。
优选的,步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。四个行级自定义函数为系统申明的四个函数,实现了在一行导入过程中的不同时期插入你想做的事情。
优选的,步骤(b)中的单行导入包括以下步骤:
(b1)创建Entity表达式;
(b2)遍历此行单元格,Entity字段赋值,遇到字段级自定义函数则放入funclist中;
(b3)执行funclist;
(b4)保存Entity。
优选的,所述的表达式信息$F为普通字段、特殊字段或者是公共字段。
优选的,所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()解析时均通过jave反射找到A,找到对应的F方法,F为通过解析这个表达式获得的java方法,A为三个参数entity,单元格value和固定参数。
优选的,所述的行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()的执行时机不同。
优选的,所述的行级自定义函数BeforeSave()的执行时机在单行导入的步骤(b1)和步骤(b2)之间执行,BeforeFunc()的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSave()的执行时机在单行导入的步骤(b4)之后执行。
与现有技术相比,本发明的有益效果是:
1、 本发明以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术只支持简单类型的字段,如string和int,只支持单表导入的缺陷。
2、 本发明实现对某个单元格字段的一般特殊处理,如枚举和外键等,实现对某个单元格字段的自定义处理和每行的特殊处理。
附图说明
图1为本发明的流程框图;
图2为本发明的解析模板;
图3为待导入数据示例。
具体实施方式
下面结合附图对本发明作进一步阐述,本发明的实施例不限于此。
实施例1:
如1-3图所示,本发明包括以下步骤:
(a) 如图2所示,设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;其中的函数集合funcList根据如图3中需要导入的表格信息进行如图2所示的设置,其中的$Entity{}、$BeforeSave{}、$AfterSave{}、$AfterFunc{}和$F{}括号内设置的信息可根据用户需要进行不同设置,但各个函数需要保留,如$F{line.name}识别航线信息沪宁线和沪杭线,$F{line.name}识别图3中的常州工区和镇江工区,依次类推解析模板中对应函数分别对导入的整个excel表格中的不同信息模块进行同时识别。
(b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;
(c)处理器执行BeforeSave()函数;
(d)处理器执行默认字段赋值;
(e)处理器执行普通字段赋值;
(f)处理器执行BeforeFunc()函数;
(g)处理器统一执行FuncList;
(h)处理器执行AfterFunc()函数;
(i)处理器执行AfterSave()函数;
(j)处理器把步骤(i)中的处理结果提交数据库;
(k)处理器遍历下一行,直到文件结束;
(l)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。
自定义函数集合funcList由二次开发人员根据功能需要进行开发。
其中的默认字段表达式为$F{A}.defaultValue(B),其中的A表示字段名,B表示默认值,该表达式表式当前excel每行数据都一样的字段,此表达式也支持特殊字段,例如:$F{wzresinfo.customcode}.defaultValue(GD_DWD)。其中的普通字段表达式为$F{A },存在于entity内,A 表示单元格value对应的字段名,此处支持外键。解析时通过java反射将value写到entity对应的字段上。如果是外键则通过value找到对应的id,再将id写到entity对应的字段上,例如:$F{setloc},$F{deptid.name}。其中的BeforeSave()函数的表达式为$BeforeSave(A,B,C…),A 表示 包名.类名.方法名,B,C… 表示方法固定参数,例如:$BeforeSave{com.jdgm.equipment.service.bds.EquipSetService.startSaveEquipSet},而$BeforeFunc()、$AfterFunc()、$AfterSave()与$BeforeSave()定义相同,只是执行时机不同。本发明通过在Excel模板中自定义表达式,定义出枚举、外键、函数等单元格,可以达到对每行的特殊处理,每个单元格字段的特殊处理,支持多表同时导入和Excel文件行级导入。
实施例2:
本实施例在实施例1的基础上优选步骤如下:步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。通过4个行级自定义函数和N个字段级自定义函数,二次开发者可以进行任何维度的自由扩展。行级自定义函数可以在单行导入时期内,通过切面插入4个不同时机的自定义操作。字段级自定义函数可以对不属于entity的字段进行操作,从而实现了多表同时导入。
实施例3:
本实施例在上述实施例的基础上优选步骤如下:步骤(b)中的单行导入包括以下步骤:
(b1)创建Entity表达式;
(b2)遍历此行单元格,Entity字段赋值,遇到字段级自定义函数则放入funclist中;
(b3)执行funclist;
(b4)保存Entity。 能够更好的实现对某个单元格字段的一般特殊处理和某个单元格字段的自定义处理。
实施例4:
本实施例在上述实施例的基础上优选步骤如下:表达式信息$F为普通字段、特殊字段或者是公共字段。行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()解析时均通过jave反射找到A(entity,单元格value,固定参数)找到对应的F方法,F为通过解析这个表达式获得的java方法。行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave()的执行时机不同。
其中的特殊字段的表达式为$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{wzresinfo.customcode}.defaultValue(GD_DWD)。
实施例5:
本实施例在上述实施例的基础上优选步骤如下:行级自定义函数BeforeSave()的执行时机在单行导入的步骤(b1)和步骤(b2)之间执行,BeforeFunc()的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSave()的执行时机在单行导入的步骤(b4)之后执行。该方法是最佳的执行方式,以对象为基础,支持对象字段,支持多表导入,支持很高自由度的扩展,克服了现有技术只支持简单类型的字段,如string和int,只支持单表导入的缺陷。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (7)
1.一种通用导入Excel数据的实现方法,其特征在于:包括以下步骤:
(a)设置解析模板,获取记录开始行号、行级函数信息、单元格字段信息、默认字段信息和自定义函数集合funcList;
(b)处理器读取Excel数据文档,从记录开始行号开始遍历,执行单行导入操作;
(c)处理器执行BeforeSave()函数;
(d)处理器执行默认字段赋值;
(e)处理器执行普通字段赋值;
(f)处理器执行BeforeFunc()函数;
(g)处理器统一执行FuncList;
(h)处理器执行AfterFunc()函数;
(i)处理器执行AfterSave()函数;
(j)处理器把步骤(i)中的处理结果提交数据库;
(k)处理器遍历下一行,直到文件结束;
(l)处理器提示用户导入结果信息,包括成功数、失败数、警告数、失败行号及原因、警告行号及原因。
2.根据权利要求1所述的一种通用导入Excel数据的实现方法,其特征在于:步骤(a)中设置解析模板分为三行,第一行包括Entity表达式以及四个行级自定义函数BeforeSave()、BeforeFunc()、AfterFunc()和AfterSave();第二行包括单行数据的表达式信息$F;第三行包括defaultValue表达式。
3.根据权利要求2所述的一种通用导入Excel数据的实现方法,其特征在于:步骤(b)中的单行导入包括以下步骤:
(b1)创建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()的执行时机在单行导入的步骤(b1)和步骤(b2)之间执行,BeforeFunc()的执行时机在单行导入的步骤(b2)和步骤(b3)之间执行,AfterFunc()的执行时机在单行导入的步骤(b3)和步骤(b4)之间执行,AfterSave()的执行时机在单行导入的步骤(b4)之后执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410078143.4A CN103838845A (zh) | 2014-03-05 | 2014-03-05 | 一种通用导入Excel数据的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410078143.4A CN103838845A (zh) | 2014-03-05 | 2014-03-05 | 一种通用导入Excel数据的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103838845A true CN103838845A (zh) | 2014-06-04 |
Family
ID=50802342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410078143.4A Pending CN103838845A (zh) | 2014-03-05 | 2014-03-05 | 一种通用导入Excel数据的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103838845A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317974A (zh) * | 2014-11-21 | 2015-01-28 | 武汉理工大学 | 一种可重构的erp系统中多源数据导入方法 |
CN105138500A (zh) * | 2015-08-10 | 2015-12-09 | 闻泰通讯股份有限公司 | Excel拼接语法导入apn的方法 |
CN106528102A (zh) * | 2016-10-31 | 2017-03-22 | 中国银行股份有限公司 | 一种读取、生成Excel文档的方法及装置 |
-
2014
- 2014-03-05 CN CN201410078143.4A patent/CN103838845A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317974A (zh) * | 2014-11-21 | 2015-01-28 | 武汉理工大学 | 一种可重构的erp系统中多源数据导入方法 |
CN104317974B (zh) * | 2014-11-21 | 2017-07-11 | 武汉理工大学 | 一种可重构的erp系统中多源数据导入方法 |
CN105138500A (zh) * | 2015-08-10 | 2015-12-09 | 闻泰通讯股份有限公司 | Excel拼接语法导入apn的方法 |
CN106528102A (zh) * | 2016-10-31 | 2017-03-22 | 中国银行股份有限公司 | 一种读取、生成Excel文档的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104133772B (zh) | 一种自动生成测试数据的方法 | |
JP2021099819A (ja) | データへの論理的妥当性検査規則の指定および適用 | |
CN103838672A (zh) | 一种通用报表的自动化测试方法及装置 | |
CN105354036A (zh) | 数据库操作代码生成方法及装置 | |
CN104035754A (zh) | 一种基于xml的自定义代码生成方法及生成器 | |
CN103530223A (zh) | 一种自动生成单元测试用例的方法及装置 | |
CN111291024A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN103714180A (zh) | 一种生物信息学数据库系统和数据处理方法 | |
CN102053912A (zh) | 一种基于uml图形对软件进行自动化测试的装置及方法 | |
CN106649239A (zh) | 一种基于可视化的云监控系统中报表生成方法及装置 | |
CN106055528A (zh) | 文书自动生成方法及装置 | |
CN114338855B (zh) | 一种实现hl7、fhir标准、自定义xml消息的解析生成方法 | |
CN109376093A (zh) | 保险产品的测试方法及装置、存储介质及电子设备 | |
CN111399828B (zh) | 一种基于模型驱动的逻辑设备建模方法及终端 | |
CN108241720B (zh) | 数据处理方法、装置和计算机可读存储介质 | |
CN113704094A (zh) | 测试用例知识库构建方法、装置、电子设备及存储介质 | |
CN110209584A (zh) | 一种测试数据自动生成方法和相关装置 | |
CN103544107A (zh) | 生成测试用例文档的方法及装置 | |
CN103838845A (zh) | 一种通用导入Excel数据的实现方法 | |
CN104156198A (zh) | 一种自动生成软件集成版本更新说明方法及装置 | |
CN108665244A (zh) | 基于61850模型的定值单自动生成方法及存储介质 | |
CN111324781A (zh) | 一种数据分析方法、装置及设备 | |
CN114169860A (zh) | 企业组织结构同步方法 | |
CN107562808B (zh) | 一种异构双链自动化数据的验证方法 | |
CN109583726B (zh) | 检测工艺状态的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140604 |