CN111737964B - 表格动态处理方法、设备及介质 - Google Patents
表格动态处理方法、设备及介质 Download PDFInfo
- Publication number
- CN111737964B CN111737964B CN202010585134.XA CN202010585134A CN111737964B CN 111737964 B CN111737964 B CN 111737964B CN 202010585134 A CN202010585134 A CN 202010585134A CN 111737964 B CN111737964 B CN 111737964B
- Authority
- CN
- China
- Prior art keywords
- class
- dynamic
- excel
- information
- meta
- 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
Links
- 238000003672 processing method Methods 0.000 title claims description 24
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000012545 processing Methods 0.000 claims abstract description 43
- 230000008859 change Effects 0.000 claims abstract description 14
- 230000003068 static effect Effects 0.000 claims description 33
- 230000001172 regenerating effect Effects 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 abstract description 21
- 238000010586 diagram Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种表格动态处理方法、设备及介质。本发明无需采用POI,即可生成与变化后的excel对应的动态类,使现有的excel处理方式例如easypoi或者easyexcel能够通过该动态类处理变化后的excel,即实现了在excel处理过程中支持excel的动态变化,降低excel动态表头的处理复杂度,提升动态excel的处理效率;并且,通过在动态类更新的版本数量触发更换类加载器的条件时,创建新的类加载器,通过新的类加载器重新生成所有节点新的动态类,从而使旧的类加载器能够被卸载,继而释放内存,避免一直使用同一个类加载器来生成动态类所导致的内存溢出问题。
Description
技术领域
本发明涉及金融科技(Fintech)技术领域,尤其涉及一种表格动态处理方法、设备及介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
在excel表头确定后就不发生变化的情况下,大部分系统选择使用easypoi(基于Apache POI的微软excel处理Java类库)或者easyexcel(阿里巴巴开源的基于Apache POI改进后的excel处理类库)来进行处理,但在excel动态变化的情况下,由于easypoi或者easyexcel的机制是通过面向对象中的类(Class)来描述一个excel的表格结构,将excel的表头抽象成了编码期间的类,所以excel的表头在编码期间就已经决定,因此,在excel表头确定后就不再变化的情况下它们能够很好的支持,但若想在运行时支持excel的表头修改或者excel表头本身就是动态的(随着程序运行而会发生结构的变化),则这两款产品都无法做到,大部分系统会退回至使用POI(Apache开源的处理微软Office文档的Java类库)来进行处理,但使用POI往往不支持复杂的动态表头处理,而且直接使用POI提供的API接口将会大大加大操作excel的复杂度,通过POI进行excel的操作就如同通过计算机编程的方式来模拟手工操作excel的步骤,既复杂又效率低下。
发明内容
本发明的主要目的在于提供一种表格动态处理方法、设备及计算机可读存储介质,旨在解决现有的excel处理方式不能很好的支持excel动态变化的技术问题。
为实现上述目的,本发明提供一种表格动态处理方法,所述表格动态处理方法包括:
获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
可选地,所述获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化的步骤包括:
根据全局索引信息以及所述当前excel的元信息中的名称标识,确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点,所述全局索引信息包括最近一次变化后的各个excel与预设类层级模型中各个节点的映射关系;
若在所述预设类层级模型中不存在与所述当前excel对应的目标节点,则确定所述当前excel发生了变化。
可选地,所述确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点的步骤之后,还包括:
若在所述预设类层级模型中存在与所述当前excel对应的目标节点,则将所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息进行比对,或者,将所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息进行比对;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息不同,或者,所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息不同,则确定所述当前excel发生了变化;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息相同,且所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息相同,则确定所述当前excel未发生变化。
可选地,所述若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息的步骤包括:
若确定所述当前excel发生了变化,则根据所述当前excel的父子引用关系在所述预设类层级模型中创建与所述当前excel对应的节点,作为目标节点;
根据所述当前excel的元信息确定所述目标节点中动态类的新的元信息。
可选地,所述根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息的步骤之前,还包括:
根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel;
若所述当前excel不包括子excel,则执行步骤:根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息。
可选地,所述根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel的步骤之后,还包括:
若所述当前excel包括子excel,则获取所述子excel的元信息,根据所述子excel的元信息、预设类层级模型确定所述子excel是否发生了变化;
若确定所述子excel发生了变化,则根据所述子excel的元信息,确定所述子excel在所述预设类层级模型中对应的子目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述子目标节点中动态类的新的元信息,通过第一类加载器生成所述子目标节点的新的动态类;
在所述子目标节点的新的动态类生成完成后,基于所述目标节点中动态类的元信息,通过所述第一类加载器,重新生成所述目标节点新的动态类。
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述子目标节点中动态类的新的元信息,以及所述预设类层级模型中除子目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
可选地,所述基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类的步骤包括:
基于所述目标节点中动态类的新的元信息,确定所述目标节点中的动态类是否包括静态字段对应的类;
根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型;
通过第一类加载器和所确定的字节码生成器生成所述目标节点的新的动态类;
对应的,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类的步骤包括:
基于各个节点中动态类的元信息,确定所述各个节点中的动态类是否包括静态字段对应的类;
根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型;
通过第二类加载器和所确定的字节码生成器生成所述各个节点的新的动态类。
可选地,所述根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型的步骤包括;
若所述目标节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若所述目标节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件;
对应的,所述根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型的步骤包括;
若节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件。
可选地,所述基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类的步骤之后,还包括:
若根据所述目标节点中动态类的父子引用关系,确定所述目标节点在所述预设类层级模型中存在父节点,则基于所述父节点中动态类的元信息,通过所述第一类加载器重新生成所述父节点新的动态类。
此外,为实现上述目的,本发明还提供一种表格动态处理装置,所述表格动态处理装置包括:
变化确定模块,用于获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
元信息确定模块,用于若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
第一生成模块,用于在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
第二生成模块,用于在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
此外,为实现上述目的,本发明还提供一种表格动态处理设备,所述表格动态处理设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的表格动态处理程序,所述表格动态处理程序被所述处理器执行时实现如上所述的表格动态处理方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有表格动态处理程序,所述表格动态处理程序被处理器执行时实现如上所述的表格动态处理方法的步骤。
本发明提供一种表格动态处理方法、设备及计算机可读存储介质,获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
通过上述方式,无需采用POI,即可生成与变化后的excel对应的动态类,使现有的excel处理方式例如easypoi或者easyexcel能够通过该动态类处理变化后的excel,即实现了在excel处理过程中支持excel的动态变化,降低excel动态表头的处理复杂度,提升动态excel的处理效率;并且,通过在动态类更新的版本数量触发更换类加载器的条件时,创建新的类加载器,通过新的类加载器重新生成所有节点新的动态类,从而使旧的类加载器能够被卸载,继而释放内存,避免一直使用同一个类加载器来生成动态类所导致的内存溢出问题。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图;
图2为本发明表格动态处理方法第一实施例的流程示意图;
图3为本发明表格动态处理方法涉及的全局excel的一示意图;
图4为对图3中的全局excel进行类建模后得到的类层级模型的一示意图;
图5为通过不同类加载器生成不同版本的动态类的一示意图;
图6为全局索引信息的一示意图;
图7为本发明表格动态处理装置第一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图。
本发明实施例表格动态处理设备可以是智能手机,也可以是PC(PersonalComputer,个人计算机)、平板电脑、便携计算机等终端设备。
如图1所示,该表格动态处理设备可以包括:处理器1001,例如CPU,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的表格动态处理设备结构并不构成对表格动态处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块以及表格动态处理程序。
在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的表格动态处理程序,并执行以下操作:
获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
根据全局索引信息以及所述当前excel的元信息中的名称标识,确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点,所述全局索引信息包括最近一次变化后的各个excel与预设类层级模型中各个节点的映射关系;
若在所述预设类层级模型中不存在与所述当前excel对应的目标节点,则确定所述当前excel发生了变化。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
所述获取excel中动态表头的元信息,根据所述元信息中的名称标识确定在预设类层级模型中是否存在与所述excel中的动态表头对应的目标节点的步骤之后,还包括:
若在所述预设类层级模型中存在与所述当前excel对应的目标节点,则将所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息进行比对,或者,将所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息进行比对;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息不同,或者,所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息不同,则确定所述当前excel发生了变化;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息相同,且所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息相同,则确定所述当前excel未发生变化。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
若确定所述当前excel发生了变化,则根据所述当前excel的父子引用关系在所述预设类层级模型中创建与所述当前excel对应的节点,作为目标节点;
根据所述当前excel的元信息确定所述目标节点中动态类的新的元信息。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel;
若所述当前excel不包括子excel,则执行步骤:根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
若所述当前excel包括子excel,则获取所述子excel的元信息,根据所述子excel的元信息、预设类层级模型确定所述子excel是否发生了变化;
若确定所述子excel发生了变化,则根据所述子excel的元信息,确定所述子excel在所述预设类层级模型中对应的子目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述子目标节点中动态类的新的元信息,通过第一类加载器生成所述子目标节点的新的动态类;
在所述子目标节点的新的动态类生成完成后,基于所述目标节点中动态类的元信息,通过所述第一类加载器,重新生成所述目标节点新的动态类。
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述子目标节点中动态类的新的元信息,以及所述预设类层级模型中除子目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
基于所述目标节点中动态类的新的元信息,确定所述目标节点中的动态类是否包括静态字段对应的类;
根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型;
通过第一类加载器和所确定的字节码生成器生成所述目标节点的新的动态类;
对应的,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
基于各个节点中动态类的元信息,确定所述各个节点中的动态类是否包括静态字段对应的类;
根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型;
通过第二类加载器和所确定的字节码生成器生成所述各个节点的新的动态类。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
若所述目标节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若所述目标节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件;
对应的,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
若节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件。
进一步地,处理器1001可以调用存储器1005中存储的表格动态处理程序,还执行以下操作:
若根据所述目标节点中动态类的父子引用关系,确定所述目标节点在所述预设类层级模型中存在父节点,则基于所述父节点中动态类的元信息,通过所述第一类加载器重新生成所述父节点新的动态类。
基于上述硬件结构,提出本发明表格动态处理方法的各实施例。
本发明提供一种表格动态处理方法。
参照图2,图2为本发明表格动态处理方法第一实施例的流程示意图。
在本实施例中,该表格动态处理方法包括:
步骤S10,获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
本实施例的表格动态处理方法是由表格动态处理设备实现的,该设备中搭载有预设类层级模型,任何复杂的excel都可以分解成对应的类层级模型。该预设类层级模型是将excel由最上层表头往下层表头逐层进行递归式的类建模,得到的节点之间的层级关系,每个节点中包括类、类的元信息、以及该节点所指向的父节点和子节点的引用关系,即父子引用关系,因此称之为类层级模型。具体地,从excel的最上层表头逐行往下层拆分,excel中的每个表头可抽象为一个类,每个类在预设类层级模型中对应一个节点,excel中的上下层表头关系与预设类层级模型中的父子引用关系相对应。
其中,类的元信息描述的是类的结构信息,其包括但不限于名称标识(excelname)、列名称信息(columnNameMap)、列类型信息(columnTypeMap)等。
参照图3、图4,图3为全局excel表格,图4为对图3所示的全局excel表格进行类建模后得到的类层级模型,图3所示的全局excel中的每一个表头都相当于一个小的excel,每一个小的excel都在类层级模型中有与之对应的节点,本实施例中的当前excel可能是任意一个小的excel,图4中的ExcelA节点与图3中的表头a对应,ExcelB节点与图3中的表头b对应,ExcelA1节点与图3中的表头a1对应,…,ExcelB32节点与图3中的表头b32对应。
在本实施例中,表格动态处理设备会按照一定频率或者实时,或者在满足触发条件时,获取当前excel的元信息,从而根据当前excel的元信息、预设类层级模型确定当前excel是否发生了变化,当前excel变化一般分为新增excel和原excel更新两种。其中,excel的元信息所包含的内容与类的元信息对应,也是包括但不限于名称标识(excelname)、列名称信息(columnNameMap)、列类型信息(columnTypeMap)等。
步骤S20,若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
若确定当前excel发生了变化,则根据当前excel的元信息,确定当前excel在预设类层级模型中对应的目标节点中动态类的新的元信息。
步骤S30,在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
在确定目标节点中动态类的新的元信息后,执行步骤S30之前,需要确定预设类层级模型中各个节点所有动态类版本的个数总和是否满足预设条件,若满足,则执行步骤S30,即,基于目标节点中动态类的新的元信息,通过第一类加载器生成目标节点的新的动态类。其中,第一类加载器是全局excel最近一次发生变化后,根据变化后的全局excel生成新的动态类时所使用的的类加载器。
进一步地,所述预设条件为预设类层级模型中各个节点所有动态类版本的个数总和小于预设个数阈值,或者,所述预设类层级模型中各个节点最新动态类版本的个数总和与所述各个节点所有动态类版本的个数总和的比值大于预设比值阈值时。
在本实施例中,参照图5,在每次完成对节点中的动态类更新后,即生成新版本的动态类后,都会更新与此次更新的动态类对应的版本号。表格动态处理设备会对预设类层级模型中所有节点中的动态类更新的版本个数总和进行统计,若预设类层级模型中各个节点所有动态类版本的个数总和小于预设个数阈值,或者,预设类层级模型中各个节点最新动态类版本的个数总和与各个节点所有动态类版本的个数总和的比值大于预设比值阈值时。其中,预设个数阈值和预设比值阈值,是由运维人员根据内存释放的需求设置的。
例如,图5中上图所示的类层级模型包括ExcelNode1、ExcelNode2、ExcelNode3、ExcelNode4、ExcelNode5、ExcelNode6六个节点,其中,ExcelNode1的动态类更新次数为3,最新版本的ExcelNode1的版本号为V3;ExcelNode2的动态类更新次数为2,最新版本的ExcelNode2的版本号为V2;ExcelNode3的动态类更新次数为1,最新版本的ExcelNode3的版本号为V1;ExcelNode4的动态类更新次数为2,最新版本的ExcelNode4的版本号为V2;ExcelNode5的动态类更新次数为1,最新版本的ExcelNode5的版本号为V1,且上述节点各个版本的动态类都是通过旧的类加载器ClassLoader(Old),即第一类加载器来生成的。
步骤S40,在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
通过前述方案实现动态类的更新,更新前后所使用的类加载器是相同的,由于类加载器不变,所以被类加载器加载过的旧的类就无法被卸载,导致JVM(Java VirtualMachine,Java虚拟机)的内存将一直增长,内存无法得到释放,随着更新次数的增多,出现内存溢出只是时间问题。
为解决内存无法得到释放的问题,本实施例在上述实施例的基础上,提出一种解决方案,继续参照图5,若预设类层级模型中各个节点中所有动态类版本的个数总和不满足预设条件,即在所述预设类层级模型中各个节点所有动态类版本的个数总和大于或者等于预设个数阈值时,或者,在所述预设类层级模型中各个节点最新版本的个数总和与所述各个节点所有动态类版本的个数总和的比值小于或者等于预设比值阈值时,执行步骤S40,创建新的类加载器ClassLoader(New),即第二类加载器,基于预设类层级模型所有节点中最新版本的动态类的元信息,通过第二类加载器生成各个节点的新的动态类,这个过程中自然也包括生成目标节点的新的动态类。
进一步地,在通过第二类加载器生成各个节点的新的动态类后,也会更新与各节点动态类对应的版本号。
本发明实施例提供一种表格动态处理方法,在excel处理过程中,获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
通过上述方式,无需采用POI,即可生成与变化后的excel对应的动态类,使现有的excel处理方式例如easypoi或者easyexcel能够通过该动态类处理变化后的excel,即实现了在excel处理过程中支持excel的动态变化,降低excel动态表头的处理复杂度,提升动态excel的处理效率;并且,通过在动态类更新的版本数量触发更换类加载器的条件时,创建新的类加载器,通过新的类加载器重新生成所有节点新的动态类,从而使旧的类加载器能够被卸载,继而释放内存,避免一直使用同一个类加载器来生成动态类所导致的内存溢出问题。
进一步的,基于图2所示的第一实施例,提出本发明表格动态处理方法的第二实施例。
在本实施例中,上述步骤S10中所述根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化的步骤,具体包括:
步骤S11,根据全局索引信息以及所述当前excel的元信息中的名称标识,确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点,所述全局索引信息包括最近一次变化后的各个excel与预设类层级模型中各个节点的映射关系;
步骤S12,若在所述预设类层级模型中不存在与所述当前excel对应的目标节点,则确定所述当前excel发生了变化。
可参照图6,在本实施例中,表格动态处理设备会对全局索引信息进行维护,全局索引信息所反映的是最近一次变化后的全局excel中各个excel的名称标识(excelname)与预设类层级模型中各个节点的映射关系,要确定当前excel是否发生了变化,首先要确定当前excel是否是新增的excel。具体地,确定全局索引信息(ExcelNameMap)中是否包括当前excel的名称标识,若不包括,说明预设类层级模型中不存在与所述当前excel对应的目标节点,进而说明当前excel是新增的excel,即可确定当前excel发生了变化。其中,所述全局索引信息(ExcelNameMap)可以是便于高效检索和保密的哈希表。
本实施例通过全局索引信息来确定当前excel是否发生了变化,能够提升该确定过程的效率。
进一步地,若预设类层级模型中不存在与所述当前excel对应的目标节点,则上述步骤S20包括:
步骤S21,若确定所述当前excel发生了变化,则根据所述当前excel的父子引用关系在所述预设类层级模型中创建与所述当前excel对应的节点,作为目标节点;
步骤S22,根据所述当前excel的元信息确定所述目标节点中动态类的新的元信息。
在本实施例中,每个excel或者节点具有对应的父子引用关系,对于excel,父子引用关系表示的是当前excel与其他excel的结构关系,例如图3中,excel a1是excel a的子excel,excel b3是excel b31和excel b32的父excel;对于节点,父子引用关系表示的是当前节点与其他节点的结构关系,例如图4中,Excel A4节点是Excel A节点的子节点,ExcelB3节点是Excel B31节点和Excel B32节点的父excel。
若当前excel是新增的excel,则根据当前excel的父子引用关系,在预设类层级模型中创建与当前excel对应的新的节点,作为目标节点,然后再根据当前excel的元信息确定目标节点中动态类的新的元信息。
进一步地,若全局索引信息中包括当前excel的名称标识,虽然能够说明预设类层级模型中存在与当前excel对应的目标节点,但却无法确定当前excel是否发生了更新这种变化,因此还需要进一步比对当前excel的元信息和目标节点的元信息,以确定当前excel是否发生了变化。
具体地,上述步骤S11之后,还包括:
步骤S13,若在所述预设类层级模型中存在与所述当前excel对应的目标节点,则将所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息进行比对,或者,将所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息进行比对;
步骤S14,若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息不同,或者,所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息不同,则确定所述当前excel发生了变化;
步骤S15,若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息相同,且所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息相同,则确定所述当前excel未发生变化。
本实施例中是确定当前excel是否发生了更新变化的具体过程,将目标节点中动态类的元信息中的列名称信息(columnNameMap),与当前excel的元信息中的列名称信息进行比对,或者,将目标节点中动态类的元信息中的列类型信息(columnTypeMap),与当前excel的元信息中的列类型信息进行比对;只要当前excel的列名称信息、列类型信息中的一个与目标节点不一致,则确定当前excel发生了变化;若当前excel的列名称信息、列类型信息中的一个与目标节点完全相同,则确定当前excel发生未发生变化,则无需进行动态类的更新。
进一步地,若预设类层级模型中存在与所述当前excel对应的目标节点,且当前excel发生了变化,则上述步骤S20之前,还包括:
步骤S201,根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel;
若所述当前excel不包括子excel,则执行步骤:根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息。
在本实施例中,若预设类层级模型中存在与当前excel对应的目标节点,且当前excel发生了变化,则需要根据当前excel是否包括子excel来确定是否更新目标节点中动态类的元信息。具体地,当前excel的元信息中的列类型信息能够反映该excel中各个表头的类型,根据列类型信息能够确定当前excel是否包括子excel,若当前excel不包括子excel,则执行步骤S20;若当前excel包括子excel,则执行对子excel对应的子目标节点进行更新的步骤。
进一步地,若当前excel的元信息中的列类型信息中包括预设的子excel标识,则认为当前excel包括子excel,若当前excel的元信息中的列类型信息中不包括预设的子excel标识,则认为当前excel不包括子excel。
进一步地,若所述当前excel包括子excel,上述对子excel对应的子目标节点进行更新的步骤,具体包括:
步骤A,若所述当前excel包括子excel,则获取所述子excel的元信息,根据所述子excel的元信息、预设类层级模型确定所述子excel是否发生了变化;
步骤B,若确定所述子excel发生了变化,则根据所述子excel的元信息,确定所述子excel在所述预设类层级模型中对应的子目标节点中动态类的新的元信息;
步骤C,在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述子目标节点中动态类的新的元信息,通过第一类加载器生成所述子目标节点的新的动态类;
步骤D,在所述子目标节点的新的动态类生成完成后,基于所述目标节点中动态类的元信息,通过所述第一类加载器,重新生成所述目标节点新的动态类;
在本实施例中,更新动态类的顺序是按照预设类层级模型自下而上、先更新子节点后更新父节点的顺序进行的,对子目标节点进行更新的过程与目标节点类似。
若当前excel包括子excel,则获取子excel的元信息,根据子excel的元信息、预设类层级模型确定子excel是否发生了变化;若是,则根据子excel的元信息,确定子excel在预设类层级模型中对应的子目标节点中动态类的新的元信息,与目标节点类似,在步骤B之前,需要根据子excel的元信息中的列类型信息确定该子excel是否还包括子excel,即子子excel,若不包括,则执行步骤B,若包括,则执行对子子excel对应的子子目标节点进行更新的步骤,对子excel、子子excel、...对应的节点进行更新的步骤是一个递归的过程。
在确定子目标节点中动态类的新的元信息后,执行步骤D或E之前,会对预设类层级模型中各个节点所有动态类版本的个数总和进行统计,确定预设类层级模型中各个节点中所有动态类版本的个数总和是否满足预设条件,若满足,则执行步骤D,若不满足,则执行步骤E。
步骤E,在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述子目标节点中动态类的新的元信息,以及所述预设类层级模型中除子目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
若预设类层级模型中各个节点中所有动态类版本的个数总和不满足预设条件,则创建新的类加载器,即第二类加载器,基于预设类层级模型所有节点中最新版本的动态类的元信息,通过第二类加载器生成各个节点的新的动态类,这个过程中自然也包括生成目标节点的新的动态类、以及子目标节点的新的动态类。
需要说明的是,对子目标节点中的元信息、以及动态类更新的过程可复用前述目标节点中的元信息、以及动态类更新的过程。
进一步的,基于上述第一和第二实施例,提出本发明表格动态处理方法的第三实施例。
在本实施例中,上述步骤S30中所述基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类的步骤包括:
步骤S31,基于所述目标节点中动态类的新的元信息,确定所述目标节点中的动态类是否包括静态字段对应的类;
步骤S32,根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型;
步骤S33,通过第一类加载器和所确定的字节码生成器生成所述目标节点的新的动态类。
对应的,上述步骤S40中所述基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类的步骤包括:
步骤S41,基于各个节点中动态类的元信息,确定所述各个节点中的动态类是否包括静态字段对应的类;
步骤S42,根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型;
步骤S43,通过第二类加载器和所确定的字节码生成器生成所述各个节点的新的动态类。
在本实施例中,生成新的动态类的过程为基于元信息,通过字节码生成器生成字节码文件,然后通过类加载器加载字节码文件,加载成功后生成动态类。因此,在生成新的动态类的过程中需要用到字节码生成器,字节码生成器包括第一字节码生成器和第二字节码生成器两种,第一字节码生成器通过组合模式和继承模式生成新的字节码文件,第二字节码生成器通过组合模式生成新的字节码文件。
要确定通过哪一种字节码生成器来生成字节码文件,需要根据目标节点中动态类的新的元信息确定目标节点中的动态类是否包括静态字段对应的类来确定,若包括,则确定字节码生成器的类型为第一字节码生成器,若不包括,则确定字节码生成器的类型为第二字节码生成器,在字节码生成器的类型确定后,即可结合对应的类加载器生成目标节点的新的动态类。可以理解的是,不同节点中新的动态类的生成所采用的字节码生成器可能相同也可能不同。
进一步地,上述步骤S30之后还包括:
若根据所述目标节点中动态类的父子引用关系,确定所述目标节点在所述预设类层级模型中存在父节点,则基于所述父节点中动态类的元信息,通过所述第一类加载器重新生成所述父节点新的动态类。
在本实施例中,更新节点中动态类的逻辑是自下而上的、由子类到父类的,因此,若根据目标节点中动态类的父子引用关系确定目标节点包括父节点,则需要在目标节点新的动态类生成完成后,通知该目标节点的父节点基于该父节点的元信息,通过第一类加载器重新生成该父节点的新的动态类,如此逐级向上,直至该目标节点的所有父节点完成动态类的更新。
在本实施例中,按照先子类后父类的顺序更新,能够保证动态类更新的层次性和稳定性。
本发明还提供一种表格动态处理装置。
参照图7,图7为本发明表格动态处理装置第一实施例的功能模块示意图。
如图7所示,所述表格动态处理装置包括:
变化确定模块10,用于获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
元信息确定模块20,用于若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
第一生成模块30,用于在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
第二生成模块40,用于在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
其中,上述表格动态处理装置中各个模块的功能实现与上述表格动态处理方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有表格动态处理程序,所述表格动态处理程序被处理器执行时实现如以上任一项实施例所述的表格动态处理方法的步骤。
本发明计算机可读存储介质的具体实施例与上述表格动态处理方法各实施例基本相同,在此不作赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (12)
1.一种表格动态处理方法,其特征在于,所述表格动态处理方法包括:
获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化;
若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类;
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类;
所述预设类层级模型是将excel由最上层表头往下层表头逐层进行递归式的类建模,得到的节点之间的层级关系,每个节点中包括类、类的元信息、以及该节点所指向的父节点和子节点的引用关系;
所述类的元信息描述的是类的结构信息。
2.如权利要求1所述的表格动态处理方法,其特征在于,所述获取当前excel的元信息,根据所述当前excel的元信息、预设类层级模型确定所述当前excel是否发生了变化的步骤包括:
根据全局索引信息以及所述当前excel的元信息中的名称标识,确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点,所述全局索引信息包括最近一次变化后的各个excel与预设类层级模型中各个节点的映射关系;
若在所述预设类层级模型中不存在与所述当前excel对应的目标节点,则确定所述当前excel发生了变化。
3.如权利要求2所述的表格动态处理方法,其特征在于,所述确定在所述预设类层级模型中是否存在与所述当前excel对应的目标节点的步骤之后,还包括:
若在所述预设类层级模型中存在与所述当前excel对应的目标节点,则将所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息进行比对,或者,将所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息进行比对;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息不同,或者,所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息不同,则确定所述当前excel发生了变化;
若所述目标节点中动态类的元信息中的列名称信息,与所述当前excel的元信息中的列名称信息相同,且所述目标节点中动态类的元信息中的列类型信息,与所述当前excel的元信息中的列类型信息相同,则确定所述当前excel未发生变化。
4.如权利要求2所述的表格动态处理方法,其特征在于,所述若确定所述当前excel发生了变化,则根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息的步骤包括:
若确定所述当前excel发生了变化,则根据所述当前excel的父子引用关系在所述预设类层级模型中创建与所述当前excel对应的节点,作为目标节点;
根据所述当前excel的元信息确定所述目标节点中动态类的新的元信息。
5.如权利要求2所述的表格动态处理方法,其特征在于,所述根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息的步骤之前,还包括:
根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel;
若所述当前excel不包括子excel,则执行步骤:根据所述当前excel的元信息,确定所述当前excel在所述预设类层级模型中对应的目标节点中动态类的新的元信息。
6.如权利要求5所述的表格动态处理方法,其特征在于,所述根据所述当前excel的元信息中的列类型信息确定所述当前excel是否包括子excel的步骤之后,还包括:
若所述当前excel包括子excel,则获取所述子excel的元信息,根据所述子excel的元信息、预设类层级模型确定所述子excel是否发生了变化;
若确定所述子excel发生了变化,则根据所述子excel的元信息,确定所述子excel在所述预设类层级模型中对应的子目标节点中动态类的新的元信息;
在所述预设类层级模型中各个节点所有动态类版本的个数总和满足预设条件时,基于所述子目标节点中动态类的新的元信息,通过第一类加载器生成所述子目标节点的新的动态类;
在所述子目标节点的新的动态类生成完成后,基于所述目标节点中动态类的元信息,通过所述第一类加载器,重新生成所述目标节点新的动态类;
在所述预设类层级模型中各个节点所有动态类版本的个数总和不满足预设条件时,创建第二类加载器,基于所述子目标节点中动态类的新的元信息,以及所述预设类层级模型中除子目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类。
7.如权利要求1所述的表格动态处理方法,其特征在于,所述基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类的步骤包括:
基于所述目标节点中动态类的新的元信息,确定所述目标节点中的动态类是否包括静态字段对应的类;
根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型;
通过第一类加载器和所确定的字节码生成器生成所述目标节点的新的动态类;
对应的,基于所述目标节点中动态类的新的元信息,以及所述预设类层级模型中除目标节点外的其他节点中动态类的元信息,通过所述第二类加载器生成所述预设类层级模型中各个节点的新的动态类的步骤包括:
基于各个节点中动态类的元信息,确定所述各个节点中的动态类是否包括静态字段对应的类;
根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型;
通过第二类加载器和所确定的字节码生成器生成所述各个节点的新的动态类。
8.如权利要求7所述的表格动态处理方法,其特征在于,所述根据所述目标节点中的动态类是否包括静态字段对应的类,确定字节码生成器的类型的步骤包括;
若所述目标节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若所述目标节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件;
对应的,所述根据所述各个节点的动态类是否包括静态字段对应的类,确定各个节点对应的字节码生成器的类型的步骤包括;
若节点中的动态类包括静态字段对应的类,则确定字节码生成器的类型为第一字节码生成器,所述第一字节码生成器通过组合模式和继承模式生成新的字节码文件;
若节点中的动态类不包括静态字段对应的类,则确定字节码生成器的类型为第二字节码生成器,所述第二字节码生成器通过组合模式生成新的字节码文件。
9.如权利要求1所述的表格动态处理方法,其特征在于,所述基于所述目标节点中动态类的新的元信息,通过第一类加载器生成所述目标节点的新的动态类的步骤之后,还包括:
若根据所述目标节点中动态类的父子引用关系,确定所述目标节点在所述预设类层级模型中存在父节点,则基于所述父节点中动态类的元信息,通过所述第一类加载器重新生成所述父节点新的动态类。
10.如权利要求1至9任一项所述的表格动态处理方法,其特征在于,所述预设条件为所述预设类层级模型中各个节点所有动态类版本的个数总和小于预设个数阈值,或者,所述预设类层级模型中各个节点最新动态类版本的个数总和与所述各个节点所有动态类版本的个数总和的比值大于预设比值阈值时。
11.一种表格动态处理设备,其特征在于,所述表格动态处理设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的表格动态处理程序,所述表格动态处理程序被所述处理器执行时实现如权利要求1至10中任一项所述的表格动态处理方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有表格动态处理程序,所述表格动态处理程序被处理器执行时实现如权利要求1至10中任一项所述的表格动态处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010585134.XA CN111737964B (zh) | 2020-06-23 | 2020-06-23 | 表格动态处理方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010585134.XA CN111737964B (zh) | 2020-06-23 | 2020-06-23 | 表格动态处理方法、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737964A CN111737964A (zh) | 2020-10-02 |
CN111737964B true CN111737964B (zh) | 2024-03-19 |
Family
ID=72650816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010585134.XA Active CN111737964B (zh) | 2020-06-23 | 2020-06-23 | 表格动态处理方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737964B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640077A (zh) * | 2022-12-23 | 2023-01-24 | 云筑信息科技(成都)有限公司 | 基于字节码动态生成技术为EasyExcel生成数据映射对象的方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102985907A (zh) * | 2010-05-10 | 2013-03-20 | 泰必高软件公司 | 在动态类加载器环境下管理遗留软件的静态数据结构 |
CN104268163A (zh) * | 2014-09-05 | 2015-01-07 | 烽火通信科技股份有限公司 | 一种网管网元配置界面的实现方法及系统 |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN105843867A (zh) * | 2016-03-17 | 2016-08-10 | 畅捷通信息技术股份有限公司 | 基于元数据模型的检索方法和基于元数据模型的检索装置 |
JP2016149693A (ja) * | 2015-02-13 | 2016-08-18 | ソニー株式会社 | 情報処理装置、情報処理方法、およびプログラム、並びに記録媒体 |
CA2993761A1 (en) * | 2015-07-30 | 2017-02-02 | Wix.Com Ltd. | System and method for the creation and use of visually- diverse high-quality dynamic visual data structures |
AU2017100581A4 (en) * | 2016-06-08 | 2017-06-29 | Apple Inc. | Intelligent automated assistant for media exploration |
CN108334196A (zh) * | 2018-01-18 | 2018-07-27 | 维沃移动通信有限公司 | 一种文件处理方法及移动终端 |
CN110633462A (zh) * | 2019-09-11 | 2019-12-31 | 四川长虹电器股份有限公司 | 一种Excel二维表格导入的方法 |
-
2020
- 2020-06-23 CN CN202010585134.XA patent/CN111737964B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102985907A (zh) * | 2010-05-10 | 2013-03-20 | 泰必高软件公司 | 在动态类加载器环境下管理遗留软件的静态数据结构 |
CN104268163A (zh) * | 2014-09-05 | 2015-01-07 | 烽火通信科技股份有限公司 | 一种网管网元配置界面的实现方法及系统 |
JP2016149693A (ja) * | 2015-02-13 | 2016-08-18 | ソニー株式会社 | 情報処理装置、情報処理方法、およびプログラム、並びに記録媒体 |
CA2993761A1 (en) * | 2015-07-30 | 2017-02-02 | Wix.Com Ltd. | System and method for the creation and use of visually- diverse high-quality dynamic visual data structures |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN105843867A (zh) * | 2016-03-17 | 2016-08-10 | 畅捷通信息技术股份有限公司 | 基于元数据模型的检索方法和基于元数据模型的检索装置 |
AU2017100581A4 (en) * | 2016-06-08 | 2017-06-29 | Apple Inc. | Intelligent automated assistant for media exploration |
CN108334196A (zh) * | 2018-01-18 | 2018-07-27 | 维沃移动通信有限公司 | 一种文件处理方法及移动终端 |
CN110633462A (zh) * | 2019-09-11 | 2019-12-31 | 四川长虹电器股份有限公司 | 一种Excel二维表格导入的方法 |
Non-Patent Citations (4)
Title |
---|
Automating object transformations for dynamic software updating;Magill Stephen 等;《ACM SIGPLAN Notices》;第47卷(第10期);265-280 * |
Pointer analysis in the presence of dynamic class loading;Hirzel Martin 等;《European Conference on Object-Oriented Programming》;96-122 * |
文档图像中表格结构的自动定位与分析;史广顺;《中国博士学位论文全文数据库信息科技辑》(第02期);I138-15 * |
统一多数据源报告在线生成系统的设计和实现;王铮;《中国优秀硕士学位论文全文数据库信息科技辑》(第02期);I138-682 * |
Also Published As
Publication number | Publication date |
---|---|
CN111737964A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101999409B1 (ko) | 예시에 의한 데이터 포매팅 기법 | |
US7243346B1 (en) | Customized library management system | |
EP1872215B1 (en) | Implementing data-compatibility-based version scheme | |
US9146735B2 (en) | Associating workflows with code sections in a document control system | |
CN111068328B (zh) | 游戏广告配置表格的生成方法、终端设备及介质 | |
US20040095387A1 (en) | Virtualized and realized user interface controls | |
CN109543891B (zh) | 容量预测模型的建立方法、设备及计算机可读存储介质 | |
GB2513528A (en) | Method and system for backup management of software environments in a distributed network environment | |
CN112769706B (zh) | 组件化路由方法及系统 | |
US8327329B2 (en) | Application dehydration, synchronization, and rehydration | |
CN111158715A (zh) | 灰度发布控制方法及系统 | |
CN115993966A (zh) | 应用开发系统及方法 | |
CN111737964B (zh) | 表格动态处理方法、设备及介质 | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
US7389515B1 (en) | Application deflation system and method | |
CN113791809B (zh) | 应用异常处理方法、装置以及计算机可读存储介质 | |
CN116339908A (zh) | 虚拟机启动方法、装置、计算机设备和存储介质 | |
CN112691382B (zh) | 资源处理方法、装置及计算机可读存储介质 | |
CN114911497A (zh) | 一种sdk升级方法、装置以及计算机设备 | |
CN115964061A (zh) | 插件更新方法、装置、电子设备和计算机可读存储介质 | |
CN109634636B (zh) | 应用处理方法、装置、设备和介质 | |
CN110109775B (zh) | 虚拟机恢复方法、装置、终端设备及存储介质 | |
CN110908644A (zh) | 状态节点的配置方法、装置、计算机设备和存储介质 | |
JP2013105349A (ja) | 動的リンクライブラリの更新、実行方法 | |
CN116974653B (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 |