发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于RPA的Excel文档智能填报系统及其方法,能够实现Excel文档表格的自动填报,降低了工作强度,提高了填报的准确性和效率。
为达到上述目的,本发明是采用下述技术方案实现的:
一方面,本发明提供了一种基于RPA的Excel文档智能填报方法,包括如下步骤:
基于待填报原始Excel文档的表格表头信息,将获取的原始数据转换为CSV格式的原始数据集;
将原始数据集转换成YML格式的临时数据集,所述临时数据集的配置参数包括sheetName,tableType,parentHead和tableData,所述sheetName用于存储待填报原始Excel文档的工作表名称,所述tableType用于存储工作表中表格填报类型,所述parentHead用于存储表格的父表头名称,所述tableData用于存储与所述父表头的子表头相对应原始数据集的字段数据;
利用虚拟DOM算法对待填报原始Excel文档进行解析,生成包含原始Excel文档表格的父表头、子表头及位置关系的虚拟DOM结构;
基于所述虚拟DOM结构确定所述tableData中字段数据填报的起始位置,并按照所述tableType的填报类型填报到原始Excel文档的指定表格中。
进一步的,还包括获取待填报的原始数据,原始数据的获取方法包括从数据库、消息队列、日志文档或配置文档中采集指定数据。
进一步的,原始数据集的CSV格式表示为:
c1,c2,…,cN
v11,v12,…,v1N
v21,v22,…,v2N
……
vM1,vM2,…,vMN
其中,[c1,c2,…,cN]为CVS格式数据的N个字段名称集合,[v11,v12,…,v1N]为第1条数据记录,[v21,v22,…,v2N]为第2条数据记录,[vM1,vM2,…,vMN]为第M条数据记录。
进一步的,YML模板文档的格式如下所示:
sheetName:工作表名称
tableType:“colum/row”
parentHead:[父表头名称列表]
tableMap:
-c1:w1
-c2:w2
……
-cN:wN
其中,sheetName表示原始Excel文档中的工作表名称,tableType表示Excel表格的填报类型,parentHead表示Excel表格中父表头名称列表,[w1,w2,…,wN]为Excel表格中子表头名称列表。
进一步的,所述临时数据集的格式如下表示:
sheetName:工作表名称
tableType:“colum/row”
parentHead:[父表头名称列表]
tableData:
-w1:[v11,v21,...,vM1]
-w2:[v12,v22,...,vM2]
-wN:[v1N,v2N,...,vMN]
其中,[w1,w2,…,wN]为Excel表格中子表头名称列表。
进一步的,将原始数据集转换成YML格式的临时数据集的方法包括如下步骤:
读取YML模板文档并解析获得YML模板文档的sheetName、tableType、parentHead和tableMap配置参数;
读取原始数据集并解析获得原始数据集的字段名称集合[c1,c2,…,cN]和对应的所有数据记录;
依次遍历所有数据记录,对每一条数据记录[vM1,vM2,…,vMN]进行解析,将每一条数据记录中的每一个元素与字段名称集合[c1,c2,…,cN]中对应的元素建立对应关系,形成哈希表HC,哈希表HC表示为{<c1,[v11,v21,…,vM1]>,<c2,[v12,v22,…,vM2]>,…,<cN,[v1N,v2N,…,VMN]>};
解析YML模板文档的tableMap参数,建立字段名称集合[c1,c2,…,cN]中每一个元素与原始Word文档表格的表头名称集合[w1,w2,…,wN]中对应元素的对应关系,将哈希表HC转换为哈希表HW,哈希表HW表示为{<w1,[v11,v21,..vM1]>,<w2,[v12,v22,…,vM2]>,…<wN,[v1N,v2N,…,VMN]>};
创建YML数据格式的临时数据集,将YML模板文档的配置参数sheetName、tableType和parentHead保存到临时数据集中;
将哈希表HW保存到临时数据集的配置参数tableData中。
进一步的,利用虚拟DOM算法对待填报原始Excel文档进行解析,生成包含原始Excel文档表格的父表头、子表头及位置关系的虚拟DOM结构的方法包括如下步骤:
通过虚拟DOM算法对原始Excel文档进行解析,读取原始Excel文档获取每个工作表的所有非空单元格,并记录所述非空单元格的名称和位置的对应关系;
将所有非空单元格的名称和位置对应关系中父表头名称和位置的对应关系挂接到root根节点下,再将集合D中子表头名称和位置的对应关系挂接到对应的父节点下。
进一步的,基于所述虚拟DOM结构确定所述tableData中字段数据填报的起始位置的方法包括如下步骤:
根据parentHead参数查找所述虚拟DOM结构,获得父表头节点;
获得父表头节点的所有子节点集合,读取每一个子节点,找到与tableData中子表头对应的子节点的位置数据作为子表头填写字段数据的起始位置。
进一步的,按照所述tableType的填报类型填报到原始Excel文档的指定表格中的方法包括如下步骤:
根据tableType参数确定子表头数据的填写方式:
如果tableType取值为“column”,将子表头名称对应的字段数据按照行的方式填写到指定的单元格中。;
如果tableType取值为“row”,将子表头名称对应的字段数据按照列的方式填写到指定的单元格中。
另一方面,本发明提供了一种基于RPA的Excel文档智能填报系统,包括如下模块:
数据采集模块,用于基于待填报原始Excel文档的表格表头信息,将获取的原始数据转换为CSV格式的原始数据集;
数据预处理模块,用于将原始数据集转换成YML格式的临时数据集,所述临时数据集的配置参数包括sheetName,tableType,parentHead和tableData,所述sheetName用于存储待填报原始Excel文档的工作表名称,所述tableType用于存储工作表中表格填报类型,所述parentHead用于存储表格的父表头名称,所述tableData用于存储与所述父表头的子表头相对应原始数据集的字段数据;
数据智能解析模块,用于利用虚拟DOM算法对待填报原始Excel文档进行解析,生成包含原始Excel文档表格的父表头、子表头及位置关系的虚拟DOM结构;
数据智能填报模块,用于基于所述虚拟DOM结构确定所述tableData中字段数据填报的起始位置,并按照所述tableType的填报类型填报到原始Excel文档的指定表格中。
与现有技术相比,本发明所达到的有益效果:
本发明提供的基于RPA的Excel文档智能填报系统及其方法能够将获取的原始数据转化为CSV格式的原始数据集,进而形成YML格式的临时数据集,基于虚拟DOM结构识别待填报Excel表格的结构确定自动填报位置,按照预先设置的模板参数的填报类型实现数据自动填报,降低了工作强度,提高了填报的准确性和效率,简单且扩展性强,能够适用广泛应用场景。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
如图1所示,本发明实施例提供了一种基于RPA的excel文档智能填报方法,包括如下步骤:
基于待填报原始Excel文档的表格表头信息,将获取的原始数据转换为CSV格式的原始数据集;
将原始数据集转换成YML格式的临时数据集,所述临时数据集的配置参数包括sheetName,tableType,parentHead和tableData,所述sheetName用于存储待填报原始Excel文档的工作表名称,所述tableType用于存储工作表中表格填报类型,所述parentHead用于存储表格的父表头名称,所述tableData用于存储与所述父表头的子表头相对应原始数据集的字段数据;
利用虚拟DOM算法对待填报原始Excel文档进行解析,生成包含原始Excel文档表格的父表头、子表头及位置关系的虚拟DOM结构;
基于所述虚拟DOM结构确定所述tableData中字段数据填报的起始位置,并按照所述tableType的填报类型填报到原始Excel文档的指定表格中。
如图4所示,本发明实施例还提供了一种基于RPA的excel文档智能填报系统,包括如下模块:
数据采集模块,用于基于待填报原始Excel文档的表格表头信息,将获取的原始数据转换为CSV格式的原始数据集;
数据预处理模块,用于将原始数据集转换成YML格式的临时数据集,所述临时数据集的配置参数包括sheetName,tableType,parentHead和tableData,所述sheetName用于存储待填报原始Excel文档的工作表名称,所述tableType用于存储工作表中表格填报类型,所述parentHead用于存储表格的父表头名称,所述tableData用于存储与所述父表头的子表头相对应原始数据集的字段数据;
数据智能解析模块,用于利用虚拟DOM算法对待填报原始Excel文档进行解析,生成包含原始Excel文档表格的父表头、子表头及位置关系的虚拟DOM结构;
数据智能填报模块,用于基于所述虚拟DOM结构确定所述tableData中字段数据填报的起始位置,并按照所述tableType的填报类型填报到原始Excel文档的指定表格中。
在本实施例中,YML(Yet Another Markup Language)模板文档用于配置Excel文档智能填报相关的参数,包括sheetName、tableType、tableMap、parentHead等参数,YML模板文档的格式如下所示:
sheetName:工作表名称
tableType:“colum/row”
parentHead:[父表头名称列表]
tableMap:
-c1:w1
-c2:w2
……
-cN:wN
其中,参数sheetName表示原始Excel文档中的工作表(sheet)名称,一个Excel文档可以包括多个工作表(sheet),每个工作表(sheet)都有不同的名称。
参数tableType表示Excel表格的填报类型。一个Excel表格由表头单元格和数据单元格组成,如果表头是按行方式排列,则数据单元格的填写按列的方式,即从上到下的顺序填写,如下表1所示:
表1
如果表头是列方式排列,则数据的填写按行的方式,即从左到右的顺序填写,如下表2所示:
表2
表头名称1 |
数据11 |
数据12 |
表头名称2 |
数据21 |
数据22 |
表头名称3 |
数据31 |
数据32 |
参数tableType表示表格填报类型,其取值范围为[“column”,“row”],其中“column”表示数据单元格按列的方式填写,“row”表示数据单元格按行的方式填写。
parentHead参数表示父表头名称,当没有父表头名称时,参数为空。一个工作表(sheet)可以包括多个表格,这些表格的表头可能包括父表头和子表头。例如下表3所示的工作表1(sheet):
表3
在工作表1中包括财务部和研发部两个表格,其中“财务部”和“研发部”为父表头,第2行的表头A[“工号”,“姓名”,“考勤天数”]为“财务部”的子表头,第7行的表头B[“工号”,“姓名”,“考勤天数”]为“研发部”的子表头。
通常情况下,父表头的单元格与对应的子表头的单元格紧密连接,比如“财务部”的位置与表头A的位置最接近,因此分别计算表头A、表头B与“财务部”表头的位置距离,就可以判断出表头A而不是表头B是财务部的子表头。
tableMap参数配置了CSV原始数据集A的字段和Excel表头名称之间的对应关系。一个CVS原始数据集A包括按CVS格式保存多条原始数据记录,每一条记录包括多个字段,一个CVS格式的数据可以表示如下:
c1,c2,…,cN
v11,v12,…,v1N
v21,v22,…,v2N
……
vM1,vM2,…,vMN
其中,[c1,c2,…,cN]为CVS数据的字段名称集合,[v11,v12,…,v1N]为第1条记录的数据,[v21,v22,…,v2N]为第2条记录的数据,其他数据以此类推。
待填报的Excel文档的某一个表格包括多个子表头名称,这些子表头名称集合可以用[w1,w2,…,wN]表示,tableMap记录了字段名称集合[c1,c2,…,cN]与表头名称集合[w1,w2,…,wN]的对应关系。
在本实施例中,可以从数据库、消息队列、日志文档、配置文档等位置采集指定的数据,形成CVS原始数据集A,tableMap参数建立CSV原始数据集A的字段和Excel表头名称之间的对应关系,使原始数据集和Excel文档的填报数据解耦合,增强了系统及方法的扩展性。
YML临时数据集B的数据格式如下:
sheetName:工作表名称
tableType:“colum/row”
parentHead:[父表头名称列表]
tableData:
-w1:[v11,v21,...,vM1]
-w2:[v12,v22,...,vM2]
-wN:[v1N,v2N,...,vMN]
其中,YML临时数据集B的sheetName、tableType和parentHead参数含义与YML模板文档的相应配置参数含义一致。YML临时数据集B的tableData参数记录了Excel表头每一个字段需要填写的数据,数据预处理模块读取YML配置文档的信息,根据tableMap参数将CVS原始数据集A中的字段名称集合[c1,c2,…,cN]转换为Excel表头名称集合[w1,w2,…,wN],并将CVS原始数据集A中的数据保存到YML临时数据集B中。
数据智能解析模块解析原始Excel文档中的指定工作表(sheet),生成虚拟DOM(Document Object Model)结构,虚拟DOM结构记录了工作表(sheet)所有表格的位置数据。以工作表1(sheet)为例,为了能够正确区分财务部和研发部两个表格,从而达到正确填写不同部门的数据的目的,数据智能解析模块使用虚拟DOM算法,创建虚拟DOM结构,如图3所示。
虚拟DOM算法首先对工作表(sheet)的所有单元格进行解析,获得所有非空单元格名称和位置数据的对应关系,把这些关系保存到集合D中,然后根据parentHead检索集合D,获得父表头名称和对应位置数据的对应关系,将这些关系挂接到root根节点下,最后再将集合D中其他对应关系挂接到对应的父节点下。
数据智能填报模块根据parentHead参数查找虚拟DOM结构,获得父表头对应的子表头的位置,再根据tableType参数确定子表头数据的填写方式,然后按照行方式或列方式将tableMap参数中的数据依次填写到原始Excel文档指定的单元格内。
在本实施例中,如图2所示,基于RPA的excel文档智能填报系统的具体实施步骤描述如下:
步骤1、数据采集模块使用JDBC技术向数据库发起连接,连接字符串指定数据库的用户名、密码,然后从数据库表TX中读取相应的原始数据记录。具体地,从数据库、消息队列、日志文档、配置文档等位置采集指定的数据。
步骤2、数据采集模块获得数据库表TX获得对应的表字段名称列表,表TX字段名称列表可以用[c1,c2,…,cN]表示,然后使用JavaCSV库将表TX的字段名称列表[c1,c2,…,cN]保存到CSV原始数据集A中的第一行,所有字段之间用逗号分隔,数据库中读取的数据保存到CSV原始数据集A中。
步骤3、数据采集模块使用游标遍历表TX,然后将每一条记录依次保存到CSV原始数据集A中,记录中所有数据用逗号分隔,形成完整的CSV原始数据集A,CSV原始数据集A的数据可以表示如下:
c1,c2,…,cN
v11,v12,…,v1N
v21,v22,…,v2N
……
vM1,vM2,…,vMN
其中,[c1,c2,…,cN]为CVS数据的N个字段名称集合,[v11,v12,…,v1N]为第1条记录的数据,[v21,v22,…,v2N]为第2条记录的数据,[vM1,vM2,…,vMN]为第M条记录的数据。
步骤4、数据预处理模块使用snakeymal库读取YML模板文档,分别解析出sheetName、tableType、parentHead和tableMap参数。
步骤5、数据预处理模块读取CSV原始数据集A,解析出字段名称集合[c1,c2,…,cN]和所有的数据记录,然后创建哈希表HC,哈希表HC用于记录每一个字段名称和对应的数据记录。
步骤6、数据预处理模块将字段名称集合[c1,c2,…,cN]中所有元素插入到哈希表HC中作为key键,然后读取CSV原始数据集A中的所有记录,首先对第1条记录[v11,v12,…,v1N]进行解析,将v11插入到哈希表HC的key键c1对应的数据集合中,然后将v12、…、V1N按照同样的方式操作,此时哈希表HC可以表示为{<c1,[v11]>,<c2,[v12]>,…,<cN,[v1N]>}。
步骤7、数据预处理模块对原始数据集A中的第2条至第n条纪录均按第1条纪录的处理方式进行操作,即将记录中的每一个元素与[c1,c2,…,cN]中对应的元素建立对应关系,最终的哈希表HC可以表示为{<c1,[v11,v12,…,vM1]>,<c2,[v12,v22,…,vM2]>,…<cN,[v1N,v2N,…,VMN]>}。
步骤8、数据预处理模块解析tableMap参数,获得[c1,c2,…,cN]中每一个元素与[w1,w2,…,wN]中对应元素的对应关系,tableMap可以表示为{<c1,w1>,<c2,w2>,…,<cN,wN>}。
步骤9、数据预处理模块创建哈希表HW,并遍历tableMap,首先获得tableMap的第1个元素<c1,w1>,根据c1检索哈希表HC的key键,获得对应的值[v11,v12,..vM1]。然后将元素<c1,w1>中的w1作为key键,将[v11,v12,..vM1]作为对应的值插入到哈希表HW中。
步骤10、数据预处理模块继续遍历tableMap,对tableMap表中的第2至第n个元素均按步骤9的方式进行操作,此时的哈希表HW可以表示为{<w1,[v11,v12,..vM1]>,<w2,[v12,v22,…,vM2]>,…<wN,[v1N,v2N,…,vMN]>}。
步骤11、数据预处理模块创建YML临时数据集B,将sheetName、tableType和parentHead数据保存到YML临时数据集B中,然后根据哈希表HW生成tableData参数,并将tableData参数保存到YML临时数据集B中。
步骤12、数据智能解析模块通过虚拟DOM算法对原始Excel文档进行解析。虚拟DOM算法首先创建集合D,然后读取原始Excel文档,并根据sheetName参数读取指定的工作表(sheet),对工作表(sheet)的所有单元格进行读取操作,如果单元格的名称不为空,则创建对应关系c(name,loc),其中name表示单元格内容,loc表示该单元格的位置。数据智能解析模块遍将工作表(sheet)中所有的对应关系c插入到集合D,集合D可表示为{<name1,loc1>,<name1,loc1>,…,<nameN,locN>}。
步骤13、虚拟DOM算法读取parentHead参数,parentHead参数是父表头名称列表,可以表示为[p1,p2,…,pN]。
如果parentHead不为空,表示要填报的数据位于父表格,此时数据智能解析模块遍历parentHead列表中的元素,对任意一个元素pK(k位于[1,N]),检索集合D,获得集合D中的每一个c对应的name,比较name与pK是否相同。
如果相同,说明c为父表头,则将c从集合D中删除,然后将c挂接到虚拟DOM结构的root根节点下,形成父表头节点,父表头节点可以用cParent表示。
步骤14、虚拟DOM算法遍历集合D,此时集合D中的每一个元素c都不是父表头。首先提取出集合D中的第一个元素c<name1,loc1>,通过loc计算c与每一个父表头节点cParent的位置距离。如果c与某个父节点cParent距离最近,则认为该c节点是该父表头节点cParent的子表头,则将该c节点挂载到对应的cParent节点下。
步骤15、数据智能填报模块使用snakeymal库读取YML临时数据集B,解析出tableData参数,并将其转换为哈希表HW。数据智能填报模块遍历哈希表HW,获得key键列表[w1,w2,…,wN]。
步骤16、数据智能填报模块从key键列表中取出第1个元素w1,并获得w1对应的数据列表[v11,v21,..,vN1],然后根据使用jacob库读取原始Excel文档,根据sheetName参数打开指定的工作表(sheet),接着使用parentHead参数检索虚拟DOM结构,获得父表头节点cParent,再根据cParent获得所有的子节点集合,读取每一个子节点c,判断子节点c的name是否与w1相同,如果相同,则取出c的位置数据loc,位置数据loc即为w1子表头填写数据的起始位置。
步骤17、数据智能填报模块根据tableType参数确定子表头数据的填写方式,如果tableType取值为“column”,表示数据单元格按列的方式填写,数据智能填报模块遍历w1对应的数据列表[v11,v21,..,vM1],将v11填写到loc所在的单元中,将v21填写到loc下方的单元中,以此类推,直到将vM1填写到指定的单元中;如果tableType取值为“row”,表示数据单元格按行的方式填写,数据智能填报模块遍历w1对应的数据列表[v11,v21,..,vM1],将v11填写到loc所在的单元中,将v21填写到loc右侧的单元中,以此类推,直到将vM1填写到指定的单元中。
步骤18、数据智能填报模块从key键列表中依次取出w2、…、wN,并按照步骤16和17的方式进行操作,直到将tableData的所有数据都填写到指定的单元中。
步骤19、数据智能填报模块将原始Excel文档进行保存,形成目标Excel文档。
本发明提供的基于RPA的Excel文档智能填报系统及其方法能够将获取的原始数据转化为CSV格式的原始数据集,进而形成YML格式的临时数据集,基于虚拟DOM结构识别待填报Excel表格的结构确定自动填报位置,按照预先设置的模板参数的填报类型实现数据自动填报,降低了工作强度,提高了填报的准确性和效率,简单且扩展性强,能够适用广泛应用场景
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。