CN111931460B - 支持可变列Excel文件解析方法及*** - Google Patents

支持可变列Excel文件解析方法及*** Download PDF

Info

Publication number
CN111931460B
CN111931460B CN202010625456.2A CN202010625456A CN111931460B CN 111931460 B CN111931460 B CN 111931460B CN 202010625456 A CN202010625456 A CN 202010625456A CN 111931460 B CN111931460 B CN 111931460B
Authority
CN
China
Prior art keywords
data
file
column
header
variable
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.)
Active
Application number
CN202010625456.2A
Other languages
English (en)
Other versions
CN111931460A (zh
Inventor
林大
王星宇
师文庆
旷黎明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Weiyi Intelligent Manufacturing Technology Co ltd
Original Assignee
Shanghai Weiyi Intelligent Manufacturing Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Weiyi Intelligent Manufacturing Technology Co ltd filed Critical Shanghai Weiyi Intelligent Manufacturing Technology Co ltd
Priority to CN202010625456.2A priority Critical patent/CN111931460B/zh
Publication of CN111931460A publication Critical patent/CN111931460A/zh
Application granted granted Critical
Publication of CN111931460B publication Critical patent/CN111931460B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种支持可变列Excel文件解析方法及***,将待解析Excel文件与基础模板文件进行表头校验,确定产品检测数据的所属类型,记录文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;消息中间件MQ消费端监听到消息后获取映射关系,将所属类型用于加载预先建立的解析对象java模型,将文件路径对应的Excel文件加载到内存中;读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;将存有数据的解析对象java模型序列化成JSON串,发送到Kafka进行落库。采用支持可变列的Excel解析方法,解决工厂产品检测数据入数据库的问题,助力工厂产品检测数据数字化。

Description

支持可变列Excel文件解析方法及***
技术领域
本发明涉及数据分析技术领域,具体地,涉及一种支持可变列Excel文件解析方法及***。
背景技术
工厂多种类型(如质量、工艺)的产品检测数据以Excel文件形式留存记录,表头固定部分是产品的基本信息,可变部分是具体的检测项信息。传统处理的方式是使用POI解析Excel表格,在固定行列的情况下一次性加载整个表格文件后,通过Java函数包进行解析,解析速度慢,且消耗内存大。
专利文献CN109933769A公开一种基于Excel的报表数据快速解析方法,首先定义需要解析Excel工作簿的格式标准;然后对Excel工作簿中不同Sheet工作表中的格式进行快速提取,获取标准化数据;最后基于获取的标准化数据,快速解析存储到需要中间类中,方便快速存储到数据库。其需要限定存储数据的相关类与Excel文件表头一一对应,不能支持可变列Excel文件的解析,尤其是对动态地添加表头列的内容无法获得解析。
专利文献CN106933835A公开一种兼容性解析Excel文件的数据导入方法和***,通过使用Workbook中的getSheetAt()处理excel文件的每个sheet表;针对每个sheet表,使用getLastRowNum()获取该sheet表的总行数,逐行使用getRow获取每个Row对象;针对每个Row对象,使用getLastCellNum()获取该sheet表的总列数,逐列使用getCell()获取每个单元格中的内容;将解析后的excel文件数据导入数据库。其采用传统的POI技术进行解析,一次性加载整个文件,占用内存高,文件较大时解析速度慢,且容易发生OOM内存溢出。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种支持可变列Excel文件解析方法及***。
根据本发明提供的一种支持可变列Excel文件解析方法,包括:
映射步骤:将待解析Excel文件与基础模板文件进行表头校验,确定Excel文件中产品检测数据的所属类型,记录待解析Excel文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;
加载步骤:消息中间件MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,将其中的所属类型用于加载预先建立的解析对象java模型,将其中的文件路径对应的Excel文件加载到内存中;
读取步骤:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;
解析步骤:将存有数据的解析对象java模型序列化成JSON串,发送到Kafka中进行落库。
优选地,所述映射步骤包括:
表头读取步骤:读取待解析Excel文件的第一表头,所述第一表头的内容区分为固定部分和可变部分,并读取基础模板文件的第二表头;
表头解析步骤:确定当前读取的基础模板文件的第二表头中固定部分的列数,令所述列数作为需要校验表头的列数基数;
表头校验步骤:在列数基数内,进行比较,即一一比对待解析Excel文件的第一表头和基础模板文件的第二表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的所属类型,记录待解析Excel文件的文件路径和所属类型之间的映射关系,并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的第二表头,重复上述比较。
优选地,所述加载步骤包括:
消息监听步骤:消息中间件MQ消费端监听到消息,并获取映射关系,根据映射关系中的所属类型加载预先建立的解析对象java模型,所述模型的具体属性字段存放行记录的固定部分数据,所述模型的List集合存放行记录可变部分的数据;
按行加载步骤:根据映射关系中的文件路径加载Excel文件到内存中,进行按行加载,即加载一行处理一行。
优选地,所述读取步骤包括:
按行读取步骤:按行读取内存中待解析Excel文件的每行数据到Map<key,value>中,其中key是行记录对应列的下标,value是行记录对应列的数据内容;
反射迁移步骤:采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中,并将解析对象java模型序列化成JSON串。
优选地,所述JSON串通过网络传输写到Kafka中,以完成待解析Excel文件中可变列的解析和数据落库。
根据本发明提供的一种支持可变列Excel文件解析***,包括:
映射模块:将待解析Excel文件与基础模板文件进行表头校验,确定Excel文件中产品检测数据的所属类型,记录待解析Excel文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;
加载模块:消息中间件MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,将其中的所属类型用于加载预先建立的解析对象java模型,将其中的文件路径对应的Excel文件加载到内存中;
读取模块:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;
解析模块:将存有数据的解析对象java模型序列化成JSON串,发送到Kafka中进行落库。
优选地,所述映射模块包括:
表头读取模块:读取待解析Excel文件的第一表头,所述第一表头的内容区分为固定部分和可变部分,并读取基础模板文件的第二表头;
表头解析模块:确定当前读取的基础模板文件的第二表头中固定部分的列数,令所述列数作为需要校验表头的列数基数;
表头校验模块:在列数基数内,进行比较,即一一比对待解析Excel文件的第一表头和基础模板文件的第二表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的所属类型,记录待解析Excel文件的文件路径和所属类型之间的映射关系,并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的第二表头,重复上述比较。
优选地,所述加载模块包括:
消息监听模块:消息中间件MQ消费端监听到消息,并获取映射关系,根据映射关系中的所属类型加载预先建立的解析对象java模型,所述模型的具体属性字段存放行记录的固定部分数据,所述模型的List集合存放行记录可变部分的数据;
按行加载模块:根据映射关系中的文件路径加载Excel文件到内存中,进行按行加载,即加载一行处理一行。
优选地,所述读取模块包括:
按行读取模块:按行读取内存中待解析Excel文件的每行数据到Map<key,value>中,其中key是行记录列的下标,value是行记录对应列的数据内容;
反射迁移模块:采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中。
与现有技术相比,本发明具有如下的有益效果:
1、通过采用预先建立的解析对象java模型,分离可变部分,巧妙地解决了动态列Excel文件的解析以及固定部分和可变部分数据的存放问题;
2、采用支持可变列的Excel解析方法,解决了工厂产品检测数据入数据库的问题,助力工厂产品检测数据数字化;
3、Excel文件采用按行解析的方式,解决了大Excel文件解析带来的内存占用过高问题;
4、采用消息中间件MQ实现表头校验和Excel文件解析异步解耦,提高了并行处理效率。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明的处理流程示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1
如图1所示,支持可变列的Excel文件解析方法,包括如下步骤:
步骤1:将待解析的Excel文件与抽象好的基础模板文件进行表头校验,确定Excel文件中产品检测数据的类型,记录待解析的Excel文件路径及所属的类型映射关系,将映射关系发送到消息中间件MQ中;
所述基础模板文件包括工艺-检测数据基础模板和质量-检测数据基础模板,工艺-检测数据基础模板中,包括基本的工艺检测信息,以及对该工艺进行的测试结果,不同的产品、产线需要进行的测试项会有所差异,故测试结果的数目可变,该模板可兼容不同产品、产线的检测项信息录入,不必为每种产品的工艺检测数据单独出具一份存储模板。具体参见表一:
表一 工艺-检测数据基础模板
Figure BDA0002566415150000051
质量-检测数据基础模板中包括基本的质量检测信息,以及对该产品进行质量检测存在的缺陷结果,不同的产品、产线需要进行的测试项会有所差异,故缺陷的数目及种类可变,该模板可兼容不同产品、产线的质量检测数据录入,不必为每种产品的质量检测数据单独出具一份存储模板。具体参见表二:
表二 质量-检测数据基础模板
Figure BDA0002566415150000052
步骤2:MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,其中的类型用于加载预先建立的解析对象java模型,将其中文件路径对应的Excel文件加载到内存中;
所述解析对象java模型包括质量检测数据-Java模型和工艺检测数据-Java模型,在质量检测数据-Java模型中,List<Map>存放可变列数据,即检测的缺陷种类及检测结果,其余具体属性字段存储基本的待检测产品信息。在工艺检测数据-Java模型中,List<Map>存放可变列数据,即针对该工艺的各种测试结果,其余具体属性字段存储基本的工艺信息。
步骤3:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;
步骤4:将存有数据的解析对象java模型序列化成JSON串,发送到kafka中进行落库。
所述步骤1的具体方法是:首先,读取待解析的Excel文件的表头,表头的内容逻辑上区分为固定部分和可变部分,然后读取抽象好的基础模板文件的表头;其次,确定当前读取的基础模板文件的表头中固定部分的列数(分离可变部分),该列数作为需要校验表头的列数基数;最后,在列数基数内,一一比对待解析的Excel文件的表头和基础模板文件的表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的类型,记录待解析的Excel文件的文件路径和类型映射关系并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的表头,重复上述比较过程。
所述步骤2的具体方法是:首先,MQ消费端监听到消息并获取映射关系,根据映射关系中的类型加载预先建立的解析对象java模型,该模型的具体属性字段存放行记录的固定部分数据,模型的List集合存放行记录可变部分的数据,集合的元素是Map<key,value>,key是行记录可变部分表头列的列名内容,value是行记录对应列的数据内容;其次,根据映射关系中的文件路径加载Excel文件到内存中,加载的方法基于传统POI解析技术的实现,重写覆盖其中一次性加载整个文件的方法,采用按行加载的方式,实现加载一行处理一行,加载完文件,对文件的处理也同步完成,除去基本的内存消耗外,数据部分只占用一行记录大小的内存空间,而不是所有行记录大小的内存空间,大大节约了内存空间的占用,提高了解析的速度,支持大文件Excel的解析。
所述步骤3的具体方法是:首先,按行读取内存中Excel文件的每行数据到Map<key,value>中,key是行记录列的下标,value是行记录对应列的数据内容;其次,采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中。所述List集合中的元素为Map<Key,Value>,记录行记录可变部分的列名和具体的列值,落库到Kafka后,由其他***的程序进行数据的行转列处理。
所述步骤4的具体方法是:将4所述的存放有数据的解析对象java模型序列化为JSON字符串,通过网络传输写到Kafka中,完成对可变列Excel的解析和数据落库。
实施例2
实施例2可以视为是实施例1的优选例。实施例2说明的支持可变列Excel文件解析***,利用了实施例1说明的支持可变列Excel文件解析方法的步骤。
一种支持可变列Excel文件解析***,包括:
映射模块:将待解析Excel文件与基础模板文件进行表头校验,确定Excel文件中产品检测数据的所属类型,记录待解析Excel文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;
加载模块:消息中间件MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,将其中的所属类型用于加载预先建立的解析对象java模型,将其中的文件路径对应的Excel文件加载到内存中;
读取模块:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;
解析模块:将存有数据的解析对象java模型序列化成JSON串,发送到Kafka中进行落库。
其中,所述映射模块包括:
表头读取模块:读取待解析Excel文件的第一表头,所述第一表头的内容区分为固定部分和可变部分,并读取基础模板文件的第二表头;
表头解析模块:确定当前读取的基础模板文件的第二表头中固定部分的列数,令所述列数作为需要校验表头的列数基数;
表头校验模块:在列数基数内,进行比较,即一一比对待解析Excel文件的第一表头和基础模板文件的第二表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的所属类型,记录待解析Excel文件的文件路径和所属类型之间的映射关系,并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的第二表头,重复上述比较。
所述加载模块包括:
消息监听模块:消息中间件MQ消费端监听到消息,并获取映射关系,根据映射关系中的所属类型加载预先建立的解析对象java模型,所述模型的具体属性字段存放行记录的固定部分数据,所述模型的List集合存放行记录可变部分的数据;
按行加载模块:根据映射关系中的文件路径加载Excel文件到内存中,进行按行加载,即加载一行处理一行。
所述读取模块包括:
按行读取模块:按行读取内存中待解析Excel文件的每行数据到Map<key,value>中,其中key是行记录列的下标,value是行记录对应列的数据内容;
反射迁移模块:采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中。
所述JSON串通过网络传输写到Kafka中,以完成待解析Excel文件中可变列的解析和数据落库。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的***、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的***、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的***、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

Claims (10)

1.一种工厂产品检测的支持可变列Excel文件解析方法,其特征在于,包括:
映射步骤:将待解析Excel文件与基础模板文件进行表头校验,确定待解析Excel文件中产品检测数据的所属类型,记录待解析Excel文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;具体方法是:首先,读取待解析的Excel文件的表头,表头的内容逻辑上区分为固定部分和可变部分,然后读取抽象好的基础模板文件的表头;其次,确定当前读取的基础模板文件的表头中固定部分的列数,即分离可变部分,该列数作为需要校验表头的列数基数;最后,在列数基数内,一一比对待解析的Excel文件的表头和基础模板文件的表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的类型,记录待解析的Excel文件的文件路径和类型映射关系并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的表头,重复上述比较过程;
加载步骤:消息中间件MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,将其中的所属类型用于加载预先建立的解析对象java模型,将其中的文件路径对应的Excel文件加载到内存中;具体方法是:首先,MQ消费端监听到消息并获取映射关系,根据映射关系中的类型加载预先建立的解析对象java模型,该模型的具体属性字段存放行记录的固定部分数据,模型的List集合存放行记录可变部分的数据,集合的元素是Map<key,value>,key是行记录可变部分表头列的列名内容,value是行记录对应列的数据内容;其次,根据映射关系中的文件路径加载Excel文件到内存中,加载的方法是重写覆盖其中一次性加载整个文件的方法,采用按行加载的方式,实现加载一行处理一行,加载完文件,对文件的处理也同步完成,除去基本的内存消耗外,数据部分只占用一行记录大小的内存空间,而不是所有行记录大小的内存空间;
读取步骤:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;具体方法是:首先,按行读取内存中Excel文件的每行数据到Map<key,value>中,key是行记录列的下标,value是行记录对应列的数据内容;其次,将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中, 所述List集合中的元素为Map<Key,Value>,记录行记录可变部分的列名和具体的列值,落库到Kafka后,进行数据的行转列处理;
解析步骤:将存有数据的解析对象java模型序列化成JSON串,发送到Kafka中进行落库;具体方法是:将所述的存放有数据的解析对象java模型序列化为JSON字符串,通过网络传输写到Kafka中,完成对可变列Excel的解析和数据落库;
所述基础模板文件包括工艺-检测数据基础模板和质量-检测数据基础模板,工艺-检测数据基础模板中,包括基本的工艺检测信息,以及对该工艺进行的测试结果,不同的产品、产线需要进行的测试项会有所差异,故测试结果的数目可变,该模板兼容不同产品、产线的检测项信息录入,不必为每种产品的工艺检测数据单独出具一份存储模板;具体见表一:
表一工艺-检测数据基础模板
Figure FDA0003042762420000021
质量-检测数据基础模板中包括基本的质量检测信息,以及对该产品进行质量检测存在的缺陷结果,不同的产品、产线需要进行的测试项会有所差异,故缺陷的数目及种类可变,该模板兼容不同产品、产线的质量检测数据录入,不必为每种产品的质量检测数据单独出具一份存储模板;具体见表二:
表二质量-检测数据基础模板
Figure FDA0003042762420000022
Figure FDA0003042762420000031
所述解析对象java模型包括质量检测数据-Java模型和工艺检测数据-Java模型,在质量检测数据-Java模型中,List<Map>存放可变列数据,即检测的缺陷种类及检测结果,其余具体属性字段存储基本的待检测产品信息;在工艺检测数据-Java模型中,List<Map>存放可变列数据,即针对该工艺的各种测试结果,其余具体属性字段存储基本的工艺信息。
2.根据权利要求1所述的一种工厂产品检测的支持可变列Excel文件解析方法,其特征在于,所述映射步骤包括:
表头读取步骤:读取待解析Excel文件的第一表头,所述第一表头的内容区分为固定部分和可变部分,并读取基础模板文件的第二表头;
表头解析步骤:确定当前读取的基础模板文件的第二表头中固定部分的列数,令所述列数作为需要校验表头的列数基数;
表头校验步骤:在列数基数内,进行比较,即一一比对待解析Excel文件的第一表头和基础模板文件的第二表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的所属类型,记录待解析Excel文件的文件路径和所属类型之间的映射关系,并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的第二表头,重复上述比较。
3.根据权利要求1所述的一种工厂产品检测的支持可变列Excel文件解析方法,其特征在于,所述加载步骤包括:
消息监听步骤:消息中间件MQ消费端监听到消息,并获取映射关系,根据映射关系中的所属类型加载预先建立的解析对象java模型,所述模型的具体属性字段存放行记录的固定部分数据,所述模型的List集合存放行记录可变部分的数据,所述List集合中的元素为Map<Key,Value>,记录行记录可变部分的列名和具体的列值;
按行加载步骤:根据映射关系中的文件路径加载Excel文件到内存中,进行按行加载,即加载一行处理一行。
4.根据权利要求1所述的一种工厂产品检测的支持可变列Excel文件解析方法,其特征在于,所述读取步骤包括:
按行读取步骤:按行读取内存中待解析Excel文件的每行数据到Map<key,value>中,其中key是行记录对应列的下标,value是行记录对应列的数据内容;
反射迁移步骤:采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中。
5.根据权利要求1所述的一种工厂产品检测的支持可变列Excel文件解析方法,其特征在于,所述JSON串通过网络传输写到Kafka中,以完成待解析Excel文件中可变列的解析和数据落库。
6.一种工厂产品检测的支持可变列Excel文件解析***,其特征在于,包括:
映射模块:将待解析Excel文件与基础模板文件进行表头校验,确定待解析Excel文件中产品检测数据的所属类型,记录待解析Excel文件路径与所属类型之间的映射关系,将所属映射关系发送到消息中间件MQ中;具体方法是:首先,读取待解析的Excel文件的表头,表头的内容逻辑上区分为固定部分和可变部分,然后读取抽象好的基础模板文件的表头;其次,确定当前读取的基础模板文件的表头中固定部分的列数,即分离可变部分,该列数作为需要校验表头的列数基数;最后,在列数基数内,一一比对待解析的Excel文件的表头和基础模板文件的表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的类型,记录待解析的Excel文件的文件路径和类型映射关系并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的表头,重复上述比较过程;
加载模块:消息中间件MQ消费端监听到消息,从消息中获取映射关系,根据映射关系,将其中的所属类型用于加载预先建立的解析对象java模型,将其中的文件路径对应的Excel文件加载到内存中;具体方法是:首先,MQ消费端监听到消息并获取映射关系,根据映射关系中的类型加载预先建立的解析对象java模型,该模型的具体属性字段存放行记录的固定部分数据,模型的List集合存放行记录可变部分的数据,集合的元素是Map<key,value>,key是行记录可变部分表头列的列名内容,value是行记录对应列的数据内容;其次,根据映射关系中的文件路径加载Excel文件到内存中,加载的方法是重写覆盖其中一次性加载整个文件的方法,采用按行加载的方式,实现加载一行处理一行,加载完文件,对文件的处理也同步完成,除去基本的内存消耗外,数据部分只占用一行记录大小的内存空间,而不是所有行记录大小的内存空间;
读取模块:读取内存中Excel文件的每行数据,存放到对应的解析对象java模型中;具体方法是:首先,按行读取内存中Excel文件的每行数据到Map<key,value>中,key是行记录列的下标,value是行记录对应列的数据内容;其次,将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中, 所述List集合中的元素为Map<Key,Value>,记录行记录可变部分的列名和具体的列值,落库到Kafka后,进行数据的行转列处理;
解析模块:将存有数据的解析对象java模型序列化成JSON串,发送到Kafka中进行落库;具体方法是:将所述的存放有数据的解析对象java模型序列化为JSON字符串,通过网络传输写到Kafka中,完成对可变列Excel的解析和数据落库;
所述基础模板文件包括工艺-检测数据基础模板和质量-检测数据基础模板,工艺-检测数据基础模板中,包括基本的工艺检测信息,以及对该工艺进行的测试结果,不同的产品、产线需要进行的测试项会有所差异,故测试结果的数目可变,该模板兼容不同产品、产线的检测项信息录入,不必为每种产品的工艺检测数据单独出具一份存储模板;具体见表一:
表一工艺-检测数据基础模板
Figure FDA0003042762420000051
质量-检测数据基础模板中包括基本的质量检测信息,以及对该产品进行质量检测存在的缺陷结果,不同的产品、产线需要进行的测试项会有所差异,故缺陷的数目及种类可变,该模板兼容不同产品、产线的质量检测数据录入,不必为每种产品的质量检测数据单独出具一份存储模板;具体见表二:
表二质量-检测数据基础模板
Figure FDA0003042762420000052
Figure FDA0003042762420000061
所述解析对象java模型包括质量检测数据-Java模型和工艺检测数据-Java模型,在质量检测数据-Java模型中,List<Map>存放可变列数据,即检测的缺陷种类及检测结果,其余具体属性字段存储基本的待检测产品信息;在工艺检测数据-Java模型中,List<Map>存放可变列数据,即针对该工艺的各种测试结果,其余具体属性字段存储基本的工艺信息。
7.根据权利要求6所述的一种工厂产品检测的支持可变列Excel文件解析***,其特征在于,所述映射模块包括:
表头读取模块:读取待解析Excel文件的第一表头,所述第一表头的内容区分为固定部分和可变部分,并读取基础模板文件的第二表头;
表头解析模块:确定当前读取的基础模板文件的第二表头中固定部分的列数,令所述列数作为需要校验表头的列数基数;
表头校验模块:在列数基数内,进行比较,即一一比对待解析Excel文件的第一表头和基础模板文件的第二表头对应列的表头内容是否一致,若每列均一致,则当前基础模板文件的类型即是Excel文件中产品检测数据的所属类型,记录待解析Excel文件的文件路径和所属类型之间的映射关系,并发送到消息中间件MQ中,若比对过程中存在不一致的列,则重新读取下一个基础模板文件的第二表头,重复上述比较。
8.根据权利要求6所述的一种工厂产品检测的支持可变列Excel文件解析***,其特征在于,所述加载模块包括:
消息监听模块:消息中间件MQ消费端监听到消息,并获取映射关系,根据映射关系中的所属类型加载预先建立的解析对象java模型,所述模型的具体属性字段存放行记录的固定部分数据,所述模型的List集合存放行记录可变部分的数据;
按行加载模块:根据映射关系中的文件路径加载Excel文件到内存中,进行按行加载,即加载一行处理一行。
9.根据权利要求6所述的一种工厂产品检测的支持可变列Excel文件解析***,其特征在于,所述读取模块包括:
按行读取模块:按行读取内存中待解析Excel文件的每行数据到Map<key,value>中,其中key是行记录对应列的下标,value是行记录对应列的数据内容;
反射迁移模块:采用Java的反射技术将行记录的数据从Map<key,value>迁移到解析对象java模型中,从Map<key,value>中取出固定部分列数基数内的数据内容,存放到解析对象java模型具体的属性字段,其余可变部分的数据存放到解析对象java模型的List集合中,所述List集合中的元素为Map<Key,Value>,记录行记录可变部分的列名和具体的列值。
10.根据权利要求6所述的一种工厂产品检测的支持可变列Excel文件解析***,其特征在于,所述JSON串通过网络传输写到Kafka中,以完成待解析Excel文件中可变列的解析和数据落库。
CN202010625456.2A 2020-07-02 2020-07-02 支持可变列Excel文件解析方法及*** Active CN111931460B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010625456.2A CN111931460B (zh) 2020-07-02 2020-07-02 支持可变列Excel文件解析方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010625456.2A CN111931460B (zh) 2020-07-02 2020-07-02 支持可变列Excel文件解析方法及***

Publications (2)

Publication Number Publication Date
CN111931460A CN111931460A (zh) 2020-11-13
CN111931460B true CN111931460B (zh) 2021-09-10

Family

ID=73317338

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010625456.2A Active CN111931460B (zh) 2020-07-02 2020-07-02 支持可变列Excel文件解析方法及***

Country Status (1)

Country Link
CN (1) CN111931460B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010503A (zh) * 2021-03-01 2021-06-22 广州智筑信息技术有限公司 一种基于深度学习的工程造价数据智能解析方法及***
CN113988003A (zh) * 2021-11-12 2022-01-28 四川启睿克科技有限公司 Excel文件多个sheet内容按照指定配置自定义定向解析的方法
CN114970474A (zh) * 2022-05-12 2022-08-30 中国人民解放军陆军装甲兵学院 一种基于数据监听的excel导入导出方法及***

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105868171A (zh) * 2015-01-21 2016-08-17 ***(深圳)有限公司 一种Excel文件的校验方法及装置
CN107169294A (zh) * 2017-05-22 2017-09-15 中国电子科技集团公司第四十研究所 一种环境试验自动测试***中Excel报表二次判断处理方法
CN109471897A (zh) * 2018-11-12 2019-03-15 四川长虹电器股份有限公司 基于SpringMVC框架将excel内容解析并存储到数据库中的方法
CN109947832A (zh) * 2019-01-29 2019-06-28 平安科技(深圳)有限公司 将excel数据表生成sql文件的方法、装置、终端及存储介质
CN111240688A (zh) * 2020-01-10 2020-06-05 深圳前海环融联易信息科技服务有限公司 excel文件的解析方法、装置、计算机设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102156741A (zh) * 2011-04-16 2011-08-17 武钢集团昆明钢铁股份有限公司 自定义动态报表***及其实现方法
CN103902456B (zh) * 2014-04-09 2017-03-15 中国工商银行股份有限公司 测试脚本处理装置、***及方法
FI20177075A1 (en) * 2017-06-16 2018-12-17 Perspicamus Ab User-managed iterative subgrouping of large amounts of data through the control of statistical heuristics
CN109508447A (zh) * 2017-09-14 2019-03-22 长沙博为软件技术股份有限公司 一种固定行高列宽的表格数据分析方法
US10706228B2 (en) * 2017-12-01 2020-07-07 International Business Machines Corporation Heuristic domain targeted table detection and extraction technique

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105868171A (zh) * 2015-01-21 2016-08-17 ***(深圳)有限公司 一种Excel文件的校验方法及装置
CN107169294A (zh) * 2017-05-22 2017-09-15 中国电子科技集团公司第四十研究所 一种环境试验自动测试***中Excel报表二次判断处理方法
CN109471897A (zh) * 2018-11-12 2019-03-15 四川长虹电器股份有限公司 基于SpringMVC框架将excel内容解析并存储到数据库中的方法
CN109947832A (zh) * 2019-01-29 2019-06-28 平安科技(深圳)有限公司 将excel数据表生成sql文件的方法、装置、终端及存储介质
CN111240688A (zh) * 2020-01-10 2020-06-05 深圳前海环融联易信息科技服务有限公司 excel文件的解析方法、装置、计算机设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(二);D.Chuan;《https://blog.csdn.net/yangdongchuan1995/article/details/79285341》;20180207;1-5 *
EasyExcel对Excel文件的解析过程;高维腾;《https://www.cnblogs.com/gwtjava/p/11937777.html》;20191126;1-16 *

Also Published As

Publication number Publication date
CN111931460A (zh) 2020-11-13

Similar Documents

Publication Publication Date Title
CN111931460B (zh) 支持可变列Excel文件解析方法及***
US8099631B2 (en) Call-stacks representation for easier analysis of thread dump
CN101231645B (zh) 树型目录动态展现***及方法
CN107679146A (zh) 电网数据质量的校验方法和***
CN106682036A (zh) 一种数据交换***及其交换方法
CN106940693B (zh) 实验室原始记录单结构化处理方法
CN112199935B (zh) 数据的比对方法、装置、电子设备及计算机可读存储介质
US20140074878A1 (en) Spreadsheet schema extraction
CN107133165A (zh) 浏览器兼容性检测方法及装置
CN107169058A (zh) 一种试题打乱顺序方法和***
CN111813653B (zh) 一种字段内容相关的数据异常测试方法及自动化测试工具
CN110969000B (zh) 数据合并的处理方法及装置
CN114461723A (zh) 一种基于Spark计算引擎的数据差异比较方法及装置
CN110377566A (zh) 整理pcb的s参数测试文件的方法及***
CN111930708B (zh) 基于Ceph对象存储的对象标签的扩展***及方法
US11321341B2 (en) Dynamic metadata extraction workflow for measurement data storage
CN113642291B (zh) 上市公司报告的逻辑结构树构建方法、***、存储介质及终端
CN105512237A (zh) 一种复杂结构的数据导入***
CN110928910B (zh) 高速读写Shapfile中的矢量要素的方法和装置
CN114816247A (zh) 一种逻辑数据获取方法及装置
CN115774745A (zh) 一种针对大容量Excel文件数据的抽取方法及***
CN106066820A (zh) 验证挂载恢复卷的自动化测试方法及***
CN102955761A (zh) 尺寸信息输出***及方法
CN114661706A (zh) 一种基于jlogstash的Clickhouse数据写入插件方法
CN110781136A (zh) 一种基于日志的消息分类显示结构及其显示方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant