基于SAX解析Excel文件至多表并提高数据精度的方法

文档序号:68865 发布日期:2021-10-01 浏览:15次 >En<

阅读说明:本技术 基于SAX解析Excel文件至多表并提高数据精度的方法 (Method for analyzing Excel file to multiple tables and improving data precision based on SAX ) 是由 张庆兵 于 2021-07-20 设计创作,主要内容包括:本发明公开一种基于SAX解析Excel文件至多表并提高数据精度的方法,涉及数据处理技术领域,包括:首先获取excel文件,excel文件包含多个映射,每个映射为excel文件的表头,配置目标数据表与表头的映射关系;然后比对excel文件中表头信息与配置目标数据表的映射关系,通过SAX解析excel文件每一个数据单元,并进行映射关系匹配验证,最后将excel文件按照匹配成功的映射关系进行数据导入拆分,当遍历数据到达设定的数据阈值或为新表头时,启动多线程和数据源的连接池进行数据导入处理。本发明旨在将excel文件通过SAX解析方式导入多个数据库表中,同时解决数据会丢失精度问题、时间格式无法正常转换问题和传统DOM解析方式带来的问题。(The invention discloses a method for analyzing Excel files to multiple tables and improving data precision based on SAX, which relates to the technical field of data processing and comprises the following steps: firstly, acquiring an excel file, wherein the excel file comprises a plurality of mappings, each mapping is a header of the excel file, and a mapping relation between a target data table and the header is configured; and then comparing the mapping relation between header information in the excel file and a configuration target data table, analyzing each data unit of the excel file through SAX, performing mapping relation matching verification, finally performing data import and splitting on the excel file according to the successfully matched mapping relation, and starting a connecting pool of multiple threads and a data source to perform data import processing when traversal data reaches a set data threshold or is a new header. The invention aims to introduce excel files into a plurality of database tables in an SAX (document object model) analysis mode, and simultaneously solves the problems that data can lose precision, time formats cannot be normally converted and the problems caused by the traditional DOM analysis mode.)

基于SAX解析Excel文件至多表并提高数据精度的方法

技术领域

本发明涉及数据处理

技术领域

,具体的说是一种基于SAX解析Excel文件至多表并提高数据精度的方法。

背景技术

对于excel文件解析导入数据库表,传统的方式存在以下几个问题:

(1)传统DOM解析方式一个几M的excel文件,解析的结果将会占用几百M的内存,导致JVM内存溢出;

(2)每一个excel文件仅能有一个表头信息,当一个excel文件中存在多个表头信息时,必须将该excel拆分为多个不同表头的excel(一个表头对应一个excel 数据文件),逐个导入;

(3)excel表头与数据表的映射关系必须完全匹配,不能按照指定的需求,进行部分匹配;

(4)SAX解析数据会丢失精度和时间格式无法正常转换。

对于上述的四点问题,设计研发一种基于SAX解析Excel文件至多表并提高数据精度的方法,以通过将解析excel的传统方式转化为SAX方式进行解析,并通过配置多个不同的excel表头与数据表的映射关系,和重写SAX抽象类,成功解决上述四点问题,使得excel文件的导入变得高效便捷。

发明内容

本发明针对目前技术发展的需求和不足之处,提供一种基于SAX解析Excel文件至多表并提高数据精度的方法,旨在将excel文件通过SAX解析方式导入多个数据库表中,同时解决数据会丢失精度问题、时间格式无法正常转换问题和传统DOM解析方式带来的问题。

本发明的一种基于SAX解析Excel文件至多表并提高数据精度的方法,解决上述技术问题采用的技术方案如下:

一种基于SAX解析Excel文件至多表并提高数据精度的方法,首先获取excel文件,excel文件包含多个映射,每个映射为excel文件的表头,配置目标数据表与表头的映射关系;然后比对excel文件中表头信息与配置目标数据表的映射关系,通过 SAX解析excel文件每一个数据单元,并进行映射关系匹配验证,最后将excel文件按照匹配成功的映射关系进行数据导入拆分,当遍历数据到达设定的数据阈值或为新表头时,启动多线程和数据源的连接池进行数据导入处理。

可选的,获取的excel文件包括03版本和07版本两种。

进一步可选的,针对03版本的excel文件,需要编写实现HSSFListener接口的抽象类XLSReader,实现processRecord方法,用于读取行列,且针对每种单元格数据类型根据record.getSid()进行处理。

进一步可选的,针对07版本的excel文件,需要编写继承DefaultHandler的抽象类XLSXReader,重写startElement和endElement,用于读取行列。

优选的,读取行列的过程中,将数字中日期类型的默认转为yyyy-MM-dd HH:mm:ss:SSS格式进行统一处理。

可选的,比对excel文件中表头信息与配置目标数据表的映射关系之前,需要根据部署机器的线程数、内存和EXCEL行数据大小,设置数据阈值。

可选的,比对excel文件中表头信息与配置目标数据表的映射关系,通过SAX解析excel文件每一个数据单元,并进行映射关系匹配验证,具体为:

采用SAX方式遍历excel文件的每行并与映射关系进行匹配,确认该excel文件中匹配的映射关系的相关信息,统计满足映射的表头个数,并记录满足匹配成功的映射的sheet页和行列信息。

进一步可选的,一个映射关系包括多个表头与数据列的映射。

本发明的一种基于SAX解析Excel文件至多表并提高数据精度的方法,与现有技术相比具有的有益效果是:

(1)本发明旨在将excel文件通过SAX解析方式导入多个数据库表中,同时解决数据会丢失精度问题、时间格式无法正常转换问题和传统DOM解析方式带来的问题;

(2)本发明采用SAX方式解析excel文件,并配置excel表头与数据表的多个映射关系,重写SAX抽象类,来提高excel文件导入的灵活性、效率和准确性;另外,还通过抽象类XLSXReader和XLSReader数据处理提高数据精度和日期数据处理能力。

附图说明

附图1是本发明的方法流程图。

具体实施方式

为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。

实施例一:

本实施例提出一种基于SAX解析Excel文件至多表并提高数据精度的方法,包括:

首先,获取excel文件,excel文件包含多个映射,每个映射为excel文件的表头,配置目标数据表与表头的映射关系。

根据部署机器的线程数、内存和EXCEL行数据大小,设置数据阈值。

然后,比对excel文件中表头信息与配置目标数据表的映射关系,通过SAX解析excel文件每一个数据单元,并进行映射关系匹配验证,具体为:

采用SAX方式遍历excel文件的每行并与映射关系进行匹配,确认该excel文件中匹配的映射关系的相关信息,一个映射关系包括多个表头与数据列的映射;统计满足映射的表头个数,并记录满足匹配成功的映射的sheet页和行列信息。

最后,将excel文件按照匹配成功的映射关系进行数据导入拆分,当遍历数据到达设定的数据阈值或为新表头时,启动多线程和数据源的连接池进行数据导入处理。

本实施例中,获取的excel文件为03版本,此时,需要编写实现HSSFListener 接口的抽象类XLSReader,实现processRecord方法,用于读取行列,且针对每种单元格数据类型根据record.getSid()进行处理。读取行列的过程中,将数字中日期类型的默认转为yyyy-MM-dd HH:mm:ss:SSS格式进行统一处理,尤其是个性化的m/d/yy、 yy、/yy、/m、m/、/d、d/、/年、年/、/月、月/、/日、日/等。

编写抽象类XLSReader的具体实现代码如下:

实施例二:

本实施例提出一种基于SAX解析Excel文件至多表并提高数据精度的方法,包括:

首先,获取excel文件,excel文件包含多个映射,每个映射为excel文件的表头,配置目标数据表与表头的映射关系。

根据部署机器的线程数、内存和EXCEL行数据大小,设置数据阈值。

然后,比对excel文件中表头信息与配置目标数据表的映射关系,通过SAX解析excel文件每一个数据单元,并进行映射关系匹配验证,具体为:

采用SAX方式遍历excel文件的每行并与映射关系进行匹配,确认该excel文件中匹配的映射关系的相关信息,一个映射关系包括多个表头与数据列的映射;统计满足映射的表头个数,并记录满足匹配成功的映射的sheet页和行列信息。

最后,将excel文件按照匹配成功的映射关系进行数据导入拆分,当遍历数据到达设定的数据阈值或为新表头时,启动多线程和数据源的连接池进行数据导入处理。

本实施例中,获取的excel文件为07版本,此时,需要需要编写继承DefaultHandler的抽象类XLSXReader,重写startElement和endElement,用于读取行列。读取行列的过程中,将数字中日期类型的默认转为yyyy-MM-dd HH:mm:ss:SSS 格式进行统一处理,尤其是个性化的m/d/yy、yy、/yy、/m、m/、/d、d/、/年、年/、 /月、月/、/日、日/等。

编写抽象类XLSXReader的具体实现代码如下:

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:自动生成摘要文档的方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!