CN112632933A - 快速制作Excel文件方法、快速制作装置及存储介质 - Google Patents
快速制作Excel文件方法、快速制作装置及存储介质 Download PDFInfo
- Publication number
- CN112632933A CN112632933A CN202011431788.3A CN202011431788A CN112632933A CN 112632933 A CN112632933 A CN 112632933A CN 202011431788 A CN202011431788 A CN 202011431788A CN 112632933 A CN112632933 A CN 112632933A
- Authority
- CN
- China
- Prior art keywords
- excel
- array
- file
- elements
- data
- 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
- 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
- G06F40/18—Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
-
- 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/186—Templates
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种快速制作Excel文件方法、快速制作装置及计算机可读存储介质,其中,该方法包括:获取数据模型,其中,所述数据模型包括数据结构;在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;将所述数组在数据结构中的定位写入Excel模板文件中;根据Excel模板文件生成Excel输出文件,导出Excel输出文件。以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件,使得简化代码编写,消除繁杂的样式书写逻辑,保证外观样式可自由配置。本发明还用于区块链技术领域。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种快速制作Excel文件方法、快速制作装置及计算机可读存储介质。
背景技术
在现有技术中对Excel文件的快速制作主要采用以下几点方式:Apache POI:文档不全,使用门槛高,对Excel文件的读取和写入需要写入大量代码;Freemarker:仅支持文本而且有很大的局限性,使用复杂,还需要维护XML结构,基本不可迭代;OpenOffice:需要部署OpenOffice软件,移植性较差,需要了解复杂的OpenOffice的API;HTML浏览器导出:需依赖浏览器的实现,移植性较差,且HTML导出的是CVS格式文件,并不是正式Excel格式,不能很好的兼容Microsoft Excel;Jacob、winlib:基于Windows平台进行开发的,可移植性查、使用复杂;EasyExcel:无法编辑样式,无法在Excel中增加额外的文本信息。
基于上述分析可以发现,现有技术中对于Excel文件的快速制作或多或少存在移植性、兼容性、易用性的缺陷;移植性是指技术可以在window、linux等平台使用;兼容性是指导出的Excel文件是否能用Microsoft Excel、WPS、Pages等软件正常打开,且样式不会错乱;易用性是指的是实现导出Excel的过程简单,不依赖其他软件服务,调用的api简单。
发明内容
本发明提供一种快速制作Excel文件方法、快速制作装置及计算机可读存储介质,其主要目的在于在数据模型中设置数据,并将数据模型渲染入Excel模板文件中,通过在渲染后的Excel模板文件中创建Excel输出文件并导出,进而实现Excel输出文件的移植性、兼容性以及易用性。
为实现上述目的,本发明提供一种快速制作Excel文件方法,所述方法包括:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
优选地,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,包括:
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
当两个及以上元素不同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据。
优选地,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,还包括:
在数据模型中设置多个元素,对比元素的数量与预设元素数量;
当多个元素超过预设元素数量时,扩容数组;
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
优选地,所述当多个元素超过预设元素数量时,扩容数组步骤,包括:
当多个元素超过预设元素数量时,获取当前数组长度,新建当前数组的长度的2的次幂倍为新数组的长度;
提取当前数组内的元素,并传输元素至新数组。
优选地,所述获取Excel模板文件,并在Excel模板文件中渲染所述数据模型步骤,包括:
根据渲染函数在数据模型中获取虚拟DOM的节点、树;
渲染虚拟DOM的节点、树至Excel模板文件。
优选地,所述根据Excel模板文件生成Excel输出文件,导出Excel输出文件步骤,包括:
根据渲染后的Excel模板文件创建Excel输出文件,并写入数据模型的控制逻辑,其中,数据模型的控制逻辑包括:单元格的横向/纵向合并、下拉框、链接、单元的背景颜色、边框显示、横向/纵向的函数公式计算数值;
描述导出过程,并导出Excel输出文件。
优选地,所述描述导出过程,导出Excel输出文件的步骤,包括:
获取虚拟DOM的节点、树映射的数据变化情况;
结合数据模型的控制逻辑描述导出过程;
导出Excel输出文件。
此外,为实现上述目的,本发明还提供一种Excel文件的快速制作装置,所述快速制作装置包括:存储器与处理器,所述存储器中包括快速制作Excel文件程序,所述快速制作Excel文件程序被所述处理器执行时实现如下步骤:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素不同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
优选地,在数据模型中设置两个及以上元素步骤,包括:
在数据模型中设置多个元素,对比元素的数量与预设元素数量;
当多个元素超过预设元素数量时,扩容数组;
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括快速制作Excel文件程序,所述快速制作Excel文件程序被处理器执行时,实现如上所述的快速制作Excel文件方法的步骤。
本发明提出的快速制作Excel文件方法、快速制作装置及计算机可读存储介质,通过采用数据模型整理数据,并将数据模型中整理的数据渲染入Excel模板文件中,以利用Excel的样式对数据进行规律性的呈现,最后在基于渲染后的Excel模板文件创建Excel的输出文件,并将Excel的输出文件导出。以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件,且使得简化代码编写,消除了繁杂的样式书写逻辑,又保证了外观样式可自由配置。
附图说明
图1为本发明快速制作Excel文件方法较佳实施例的应用环境示意图;
图2为图1中快速制作Excel文件程序较佳实施例的模块示意图;
图3为本发明快速制作Excel文件方法较佳实施例的流程图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种快速制作Excel文件方法,应用于一种Excel文件的快速制作装置。参照图1所示,为本发明快速制作Excel文件方法较佳实施例的应用环境示意图。
在本实施例中,Excel文件的快速制作装置包括:处理器12、存储器11、通信总线13及网络接口14。
存储器11包括至少一种类型的可读存储介质。所述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,所述可读存储介质可以是所述Excel文件的快速制作装置的内部存储单元,例如该Excel文件的快速制作装置的硬盘。在另一些实施例中,所述可读存储介质也可以是所述Excel文件的快速制作装置的外部存储器11,例如所述Excel文件的快速制作装置上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
在本实施例中,所述存储器11的可读存储介质通常用于存储安装于所述Excel文件的快速制作装置的快速制作Excel文件程序10等。所述存储器11还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行快速制作Excel文件程序10等。
本领域技术人员可以理解,图1中示出的终端的结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该Excel文件的快速制作装置与其他电子设备之间建立通信连接。
通信总线13用于实现这些组件之间的连接通信。
图1仅示出了具有组件11-14的Excel文件的快速制作装置,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,该Excel文件的快速制作装置还可以包括用户接口,用户接口可以包括输入单元比如键盘(Keyboard)、语音输入装置比如麦克风(microphone)等具有语音识别功能的设备、语音输出装置比如音响、耳机等,可选地用户接口还可以包括标准的有线接口、无线接口。
可选地,该Excel文件的快速制作装置还可以包括显示器,显示器也可以称为显示屏或显示单元。在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。显示器用于显示在Excel文件的快速制作装置中处理的信息以及用于显示可视化的用户界面。
可选地,该Excel文件的快速制作装置还包括触摸传感器。所述触摸传感器所提供的供用户进行触摸操作的区域称为触控区域。此外,这里所述的触摸传感器可以为电阻式触摸传感器、电容式触摸传感器等。而且,所述触摸传感器不仅包括接触式的触摸传感器,也可包括接近式的触摸传感器等。此外,所述触摸传感器可以为单个传感器,也可以为例如阵列布置的多个传感器。
此外,该Excel文件的快速制作装置的显示器的面积可以与所述触摸传感器的面积相同,也可以不同。可选地,将显示器与所述触摸传感器层叠设置,以形成触摸显示屏。该装置基于触摸显示屏侦测用户触发的触控操作。
可选地,该Excel文件的快速制作装置还可以包括射频(Radio Frequency,RF)电路,传感器、音频电路等等,在此不再赘述。
在一个可选的实施方式中,还可以:将所述快速制作Excel文件方法的结果上传至区块链中。
具体地,基于所述快速制作Excel文件方法的结果得到对应的摘要信息,具体来说,摘要信息由所述快速制作Excel文件方法的结果进行散列处理得到,比如利用sha256s算法处理得到。将摘要信息上传至区块链可保证其安全性和对用户的公正透明性。用户可以从区块链中下载得该摘要信息,以便查证所述处理全量保单的任务调度方法的结果是否被篡改。本示例所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
在图1所示的装置实施例中,作为一种计算机存储介质的存储器11中可以包括操作快速制作装置、以及快速制作Excel文件程序10;处理器12执行存储器11中存储的快速制作Excel文件程序10时实现如下步骤:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素不相同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
数据模型包括hash、array、stack\queue\linked list\tree\graph\heap\pojo等数据结构,其中,本申请以hash为基础,其创建数据模型为创建hashMap模块,hashMap模板根据key的hashCode值存储数据,并可直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的,hashMap可以任一时刻有多个线程同时写hashMap,可能会导致数据的不一致。其中,hashMap最多只允许一条记录的键为null,允许多条记录的值为null。
hashMap具体使用哈希表的方式进行存储。哈希表的主干就是数组,在新增或查找某个元素,我们通过把当前元素的关键字通过某个函数(哈希函数)映射到数组中的某个位置,通过数组下标一次定位就可完成操作,在查找时通过哈希函数计算出实际存储地址,然后从数组中对应地址取出即可。
具体地,在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;主要是在设置有多个元素或增加元素时,对于哈希表中元素如何建立与数组的关系,具体就分为元素相同以及元素不同的方案。
当两个及以上元素不同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据;由于元素不同,且在通过哈希函数中得出实际存储地址也相同,即为哈希冲突,可以采用开放定址法和链地址法等来解决问题,开放定址法:当前元素发生冲突时,则继续寻找下一块未被占用的存储地址;Java中hashMap采用了链地址法,链地址法主要通过数组结合链表,即相同存储地址的元素提取关键字通过某个函数(哈希函数)映射到数组中的某个位置,即形成链表,使得在每个数组元素上都一个链表结构,当数据被Hash后,得到数组下标,把数据放在对应下标元素的链表上。系统将调用key的hashCode()方法得到其hashCode值(该方法适用于每个Java对象),然后再通过Hash算法的后两步运算(高位运算和取模运算)来定位该key值对应的存储位置。
具体地,在查找时,如果定位到的数组位置不含链表(当前entry的next指向null),那么查找、添加等操作很快,仅需数组下标一次定位就可完成操作,即从数组中对应地址取出;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在相同存储地址时即将原先链表覆盖或新增链表,对于查找操作来讲,仍需遍历链表,然后通过键的equals方法逐一比对查找。因为出于性能考虑,HashMap中的链表出现越少,性能才会越好。
当两个及以上元素相同时,按顺序排列元素;数据结构的物理存储结构只有两种:顺序存储结构和链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物理组织形式),在元素相同时采用顺序存储结构对数组进行存储,在元素不同时采用链式存储结构,将数组加链表的方式进行存。查找时,在数组中根据下标查找某个元素,一次定位就可以达到该元素所在的具体位置。
即通过hashMap的链地址法对数组与链表的整理、归纳,且数组是主干,链表是基于数组主干下的分支,使得数组与链表以树逻辑结构的方式进行排列,即在数组中可根据下标查找某个元素,一次定位就可以达到该元素的具体位置。
当在数据模型中设置多个元素,对比元素的数量与预设元素数量;如果哈希桶数组很多时,即使较差的Hash算法也会比较分散,如果哈希桶数组很少时,即使好的Hash算法也会出现较多碰撞,所以就需要在空间成本和时间成本之间权衡,其实就是在根据实际情况确定哈希桶数组的大小,并在此基础上设计好的hash算法减少Hash碰撞。
当多个元素超过预设元素数量时,扩容进行;为了在哈希桶数组很大时,控制map使得Hash碰撞的概率又小,哈希桶数组(Node[]table)占用空间又少。首先,哈希桶数组(Node[]table)的初始化长度length(默认值是16),Load factor为负载因子(默认值是0.75),threshold是HashMap所能容纳的最大数据量的Node(键值对)个数。threshold=length*Load factor。也就是说,在数组定义好长度之后,负载因子越大,所能容纳的键值对个数越多。
结合负载因子的定义公式可知,threshold就是在Load factor和length(数组长度)对应下允许的最大元素数目,超过这个数目就重新resize(扩容),扩容后的HashMap容量是之前容量的两倍。默认的负载因子0.75是对空间和时间效率的一个平衡选择,如果内存空间很多而又对时间效率要求很高,可以降低负载因子Load factor的值;相反,如果内存空间紧张而对时间效率要求不高,可以增加负载因子loadFactor的值,这个值可以大于1。
当多个元素超过预设元素数量时,获取当前数组长度,当新建前数组的长度的2的次幂倍为新数组的长度:如果数组进行扩容,数组长度发生变化,而存储位置index=h&(length-1),index也可能会发生变化,需要重新计算index,将老数组中的数据逐个链表遍历,并传输至新的扩容后的数组中,数组索引位置的计算是通过对key值的hashcode进行hash扰乱运算后,再通过和length-1进行位运算得到最终数组索引位置。
其中,HashMap的数组长度一定保持2的次幂,比如16的二进制表示为10000,那么length-1就是15,二进制为01111,同理扩容后的数组长度为32,二进制表示为100000,length-1为31,二进制表示为011111。可保证低位全为1,而扩容后只有一位差异,也就是多出了最左位的1,这样在通过h&(length-1)的时候,只要h对应的最左边的那一个差异位为0,就能保证得到的新的数组索引和老数组索引一致(大大减少了之前已经散列良好的老数组的数据位置重新调换),而且,数组长度保持2的次幂,length-1的低位都为1,会使得获得的数组索引index更加均匀。
上面的&运算,高位是不会对结果产生影响的(hash函数采用各种位运算可能也是为了使得低位更加散列),只需关注低位bit,如果低位全部为1,那么对于h低位部分来说,任何一位的变化都会对结果产生影响,也就是说,要得到index=21这个存储位置,h的低位只有这一种组合。这也是数组长度设计为必须为2的次幂的原因。如果不是2的次幂,也就是低位不是全为1此时,要使得index=21,h的低位部分不再具有唯一性了,哈希冲突的几率会变的更大。
提取当前数组内的元素,传输元素至新数组:当前数组内的元素传输至新数组,使得HashMap所能容纳的最大数据量的Node(键值对)个数增加,哈希桶数组(Node[]table)的初始化长度length加长,将哈希桶数组(Node[]table)长度保持2的次幂,length-1的低位都为1,会使得获得的数组索引index更加均匀。
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
在本实施例中,通过扩容,解决在哈希桶数组很多时,即使较差的Hash算法也会比较分散的计算问题,在取模和扩容时做优化,同时减少冲突,当然为了避免影响HashMap的性能,数组长度不应设置过长。
Excel单元格具有各类外观样式,且对外观样式要求并不是太高,而且样式几乎都是有规律,简化代码编写,消除了繁杂的样式书写逻辑,又保证了外观样式可自由配置。
在Excel模板文件中渲染所述hashMap模板,主要是为hashMap模板中数据在Excel模板文件中的存储方式,在渲染后,hashMap模板内设置排列好的数据逻辑写入Excel模板文件中,以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件。
具体地,基于渲染函数将数据模型构建虚拟DOM的节点、树;每个元素都是一个节点,并根据继承关系将每个节点排列呈树状,通过建立一个DOM节点树来保持追踪所有内容。
将虚拟DOM的节点、树渲染至Excel模板文件。在渲染过程中,检测到数据来源之后就可以精确感知数据源的变动,并根据需要重新进行渲染,当重新进行渲染之后,会生成一个新的节点、树,将新的节点、树与旧的节点、树进行对比,就可以最终得出应施加到真实DOM上的改动,最后再通过Patch函数(创建补片对象)进行改动。
写入数据并肩Excel模板文件导出的方式:先制定一个Excel模板文件,然后从Excel模板文件中读取样式,然后在相同数据空间中复用这些样式,使用ExportMain.Export()方法导出。
具体地,基于渲染后的Excel模板文件创建配置文件,其中配置文件中写入数据模型的控制逻辑:hashMap只是编辑了数组与链表之间存在的链表结构,而要将数组与链表写入Excel文件中,还需根据数组与链表的链表结构设定Excel文件中单元格相对应的变化情况(获取虚拟DOM的节点、树映射的数据变化情况),具体在配置文件进行规则制定,即在配置文件中写入单元格的横向/纵向合并、下拉框、链接、单元的背景颜色、边框显示、横向/纵向的函数公式计算数值,以由配置文件结合数据模型的控制逻辑描述导出过程,使得配置文件中可以配置使用什么数据,在哪里输出数据,怎么输出。
将配置文件生成Excel的输出文件并导出:即在hashMap的基础上对Excel模块中可能存在单元格编辑方法再进行规则制定,其中,Excel模板文件将一些常用导出规则固化为一个个配置项,导出数据的控制逻辑(在哪里输出?怎么输出?)并完全由配置文件定义。为满足大多数场景,描述导出规则的这些配置项被定义到适宜的粒度,并可在各种场景中自由组合使用,使用配置实现的导出逻辑,完全不用关心底层代码逻辑,在需求多变的环境中,只需修改配置文件中配置的相关参数即可,避免了修改代码逻辑和重新编译部署带来的麻烦。
上述实施例提出的Excel文件的快速制作装置,通过采用hashMap模板整理数据,并将hashMap模板中整理的数据渲染入Excel模板文件中,以利用Excel的样式对数据进行规律性的呈现,最后在基于渲染后的Excel模板文件创建Excel的输出文件,并将Excel的输出文件导出。以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件,且使得简化代码编写,消除了繁杂的样式书写逻辑,又保证了外观样式可自由配置。
在其他实施例中,快速制作Excel文件程序10还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由处理器12执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。参照图2所示,为图1中快速制作Excel文件程序10较佳实施例的程序模块图。所述快速制作Excel文件程序10可以被分割为:模型创建模块110、数据写入模块120、模板创建模块130、数据渲染模块140、文件导出模块150。所述模块110-150所实现的功能或操作步骤均与上文类似,此处不再详述,示例性地,例如其中:
模型创建模块110,获取数据模型,其中,数据模型内包括数据结构;
数据写入模块120,在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
模板创建模块130,获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
数据渲染模块140,将所述数组在数据结构中的定位写入Excel模板文件中;
文件导出模块150,根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
此外,本发明还提供一种快速制作Excel文件方法。参照图3所示,为本发明快速制作Excel文件方法较佳实施例的流程图。该方法可以由一个装置执行,该装置可以由软件和/或硬件实现。
在本实施例中,快速制作Excel文件方法包括:步骤S10-步骤S50。
步骤S10:获取数据模型,其中,数据模型内包括数据结构;
数据模型包括hash、array、stack\queue\linked list\tree\graph\heap\pojo等数据结构,其中,本申请以hash为基础,其创建数据模型为创建hashMap模块,hashMap模板根据key的hashCode值存储数据,并可直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的,hashMap可以任一时刻有多个线程同时写hashMap,可能会导致数据的不一致。其中,hashMap最多只允许一条记录的键为null,允许多条记录的值为null。
步骤S20:在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
hashMap具体使用哈希表的方式进行存储。哈希表的主干就是数组,在新增或查找某个元素,我们通过把当前元素的关键字通过某个函数(哈希函数)映射到数组中的某个位置,通过数组下标一次定位就可完成操作,在查找时通过哈希函数计算出实际存储地址,然后从数组中对应地址取出即可。
具体地,在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;主要是在设置有多个元素或增加元素时,对于哈希表中元素如何建立与数组的关系,具体就分为元素相同以及元素不同的方案。
当两个及以上元素相同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据;由于元素不同,且在通过哈希函数中得出实际存储地址也相同,即为哈希冲突,可以采用开放定址法和链地址法等来解决问题,开放定址法:当前元素发生冲突时,则继续寻找下一块未被占用的存储地址;Java中hashMap采用了链地址法,链地址法主要通过数组结合链表,即相同存储地址的元素提取关键字通过某个函数(哈希函数)映射到数组中的某个位置,即形成链表,使得在每个数组元素上都一个链表结构,当数据被Hash后,得到数组下标,把数据放在对应下标元素的链表上。系统将调用key的hashCode()方法得到其hashCode值(该方法适用于每个Java对象),然后再通过Hash算法的后两步运算(高位运算和取模运算)来定位该key值对应的存储位置。
具体地,在查找时,如果定位到的数组位置不含链表(当前entry的next指向null),那么查找、添加等操作很快,仅需数组下标一次定位就可完成操作,即从数组中对应地址取出;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在相同存储地址时即将原先链表覆盖或新增链表,对于查找操作来讲,仍需遍历链表,然后通过键的equals方法逐一比对查找。因为出于性能考虑,HashMap中的链表出现越少,性能才会越好。
当两个及以上元素不同时,按顺序排列元素;数据结构的物理存储结构只有两种:顺序存储结构和链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物理组织形式),在元素相同时采用顺序存储结构对数组进行存储,在元素不同时采用链式存储结构,将数组加链表的方式进行存。查找时,在数组中根据下标查找某个元素,一次定位就可以达到该元素所在的具体位置。
即通过hashMap的链地址法对数组与链表的整理、归纳,且数组是主干,链表是基于数组主干下的分支,使得数组与链表以树逻辑结构的方式进行排列,即在数组中可根据下标查找某个元素,一次定位就可以达到该元素的具体位置。
当在数据模型中设置多个元素,对比元素的数量与预设元素数量;如果哈希桶数组很多时,即使较差的Hash算法也会比较分散,如果哈希桶数组很少时,即使好的Hash算法也会出现较多碰撞,所以就需要在空间成本和时间成本之间权衡,其实就是在根据实际情况确定哈希桶数组的大小,并在此基础上设计好的hash算法减少Hash碰撞。
当多个元素超过预设元素数量时,扩容数组;为了在哈希桶数组很大时,控制map使得Hash碰撞的概率又小,哈希桶数组(Node[]table)占用空间又少。首先,哈希桶数组(Node[]table)的初始化长度length(默认值是16),Load factor为负载因子(默认值是0.75),threshold是HashMap所能容纳的最大数据量的Node(键值对)个数。threshold=length*Load factor。也就是说,在数组定义好长度之后,负载因子越大,所能容纳的键值对个数越多。
结合负载因子的定义公式可知,threshold就是在Load factor和length(数组长度)对应下允许的最大元素数目,超过这个数目就重新resize(扩容),扩容后的HashMap容量是之前容量的两倍。默认的负载因子0.75是对空间和时间效率的一个平衡选择,如果内存空间很多而又对时间效率要求很高,可以降低负载因子Load factor的值;相反,如果内存空间紧张而对时间效率要求不高,可以增加负载因子loadFactor的值,这个值可以大于1。
当多个元素超过预设元素数量时,获取当前数组长度,新建当前数组的长度的2的次幂倍为新数组的长度:如果数组进行扩容,数组长度发生变化,而存储位置index=h&(length-1),index也可能会发生变化,需要重新计算index,将老数组中的数据逐个链表遍历,并传输至新的扩容后的数组中,数组索引位置的计算是通过对key值的hashcode进行hash扰乱运算后,再通过和length-1进行位运算得到最终数组索引位置。
其中,HashMap的数组长度一定保持2的次幂,比如16的二进制表示为10000,那么length-1就是15,二进制为01111,同理扩容后的数组长度为32,二进制表示为100000,length-1为31,二进制表示为011111。可保证低位全为1,而扩容后只有一位差异,也就是多出了最左位的1,这样在通过h&(length-1)的时候,只要h对应的最左边的那一个差异位为0,就能保证得到的新的数组索引和老数组索引一致(大大减少了之前已经散列良好的老数组的数据位置重新调换),而且,数组长度保持2的次幂,length-1的低位都为1,会使得获得的数组索引index更加均匀。
上面的&运算,高位是不会对结果产生影响的(hash函数采用各种位运算可能也是为了使得低位更加散列),只需关注低位bit,如果低位全部为1,那么对于h低位部分来说,任何一位的变化都会对结果产生影响,也就是说,要得到index=21这个存储位置,h的低位只有这一种组合。这也是数组长度设计为必须为2的次幂的原因。如果不是2的次幂,也就是低位不是全为1此时,要使得index=21,h的低位部分不再具有唯一性了,哈希冲突的几率会变的更大。
提取当前数组内的元素,传输元素至新数组:当前数组内的元素传输至新数组,使得HashMap所能容纳的最大数据量的Node(键值对)个数增加,哈希桶数组(Node[]table)的初始化长度length加长,将哈希桶数组(Node[]table)长度保持2的次幂,length-1的低位都为1,会使得获得的数组索引index更加均匀。
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
在本实施例中,通过扩容,解决在哈希桶数组很多时,即使较差的Hash算法也会比较分散的计算问题,在取模和扩容时做优化,同时减少冲突,当然为了避免影响HashMap的性能,数组长度不应设置过长。
步骤S30:获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
Excel单元格具有各类外观样式,且对外观样式要求并不是太高,而且样式几乎都是有规律,简化代码编写,消除了繁杂的样式书写逻辑,又保证了外观样式可自由配置。
在Excel模板文件中渲染hashMap模板,主要是为hashMap模板中数据在Excel模板文件中的存储方式,在渲染后,hashMap模板内设置排列好的数据逻辑写入Excel模板文件中,以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件。
步骤S40:将所述数组在数据结构中的定位写入Excel模板文件中;
具体地,根据渲染函数在数据模型中获取虚拟DOM的节点、树;每个元素都是一个节点,并根据继承关系将每个节点排列呈树状,通过建立一个DOM节点树来保持追踪所有内容。
将虚拟DOM的节点、树渲染至Excel模板文件。在渲染过程中,检测到数据来源之后通过数组在数据结构中的定位就可以精确感知数据源的变动,并根据需要重新进行渲染,当重新进行渲染之后,会生成一个新的节点、树,将新的节点、树与旧的节点、树进行对比,就可以最终得出应施加到真实DOM上的改动,最后再通过Patch函数(创建补片对象)进行改动。
步骤S50:根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
写入数据并肩Excel模板文件导出的方式:先制定一个Excel模板文件,然后从Excel模板文件中读取样式,然后在相同数据空间中复用这些样式,使用ExportMain.Export()方法导出。
具体地,基于渲染后的Excel模板文件创建配置文件,其中配置文件中写入数据模型的控制逻辑:hashMap只是编辑了数组与链表之间存在的链表结构,而要将数组与链表写入Excel文件中,还需根据数组与链表的链表结构设定Excel文件中单元格相对应的变化情况,具体在配置文件进行规则制定,即在配置文件中写入单元格的横向/纵向合并、下拉框、链接、单元的背景颜色、边框显示、横向/纵向的函数公式计算数值,以由配置文件描述导出过程,使得配置文件中可以配置使用什么数据,在哪里输出数据,怎么输出。即获取虚拟DOM的节点、树映射的数据变化情况;结合数据模型的控制逻辑描述导出过程;导出Excel输出文件。
由配置文件描述导出过程,将配置文件生成Excel的输出文件并导出:即在hashMap的基础上对Excel模块中可能存在单元格编辑方法再进行规则制定,其中,Excel模板文件将一些常用导出规则固化为一个个配置项,导出数据的控制逻辑(在哪里输出?怎么输出?)并完全由配置文件定义。为满足大多数场景,描述导出规则的这些配置项被定义到适宜的粒度,并可在各种场景中自由组合使用,使用配置实现的导出逻辑,完全不用关心底层代码逻辑,在需求多变的环境中,只需修改配置文件中配置的相关参数即可,避免了修改代码逻辑和重新编译部署带来的麻烦。
需要说明的是,上述实施例中通过采用数据模型整理数据,并将数据模型中整理的数据渲染入Excel模板文件中,以利用Excel的样式对数据进行规律性的呈现,最后在基于渲染后的Excel模板文件创建Excel的输出文件,并将Excel的输出文件导出。以便于用户在后续只需更改数值,并在Excel模板文件中根据数据生成的预设样式,即可生成所需样式的Excel文件,且使得简化代码编写,消除了繁杂的样式书写逻辑,又保证了外观样式可自由配置。本方案还具有兼容性,具体是基于Microsoft Office Excel模板文件生成的文件,文件生成过程中不会改变文档的原始结构,仅仅是做标签的(循环)替换,生成的文件支持Microsoft Excel、WPS、Pages等软件。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括快速制作Excel文件程序,所述快速制作Excel文件程序被处理器执行时实现如下操作:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置数据,所述数据包括至少一个数组,
根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
优选地,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,包括:
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
当两个及以上元素不同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据。
优选地,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,还包括:
在数据模型中设置多个元素,对比元素的数量与预设元素数量;
当多个元素超过预设元素数量时,扩容数组;
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
优选地,所述当多个元素超过预设元素数量时,扩容数组步骤,包括:
当多个元素超过预设元素数量时,获取当前数组长度,新建当前数组的长度的2的次幂倍为新数组的长度;
提取当前数组内的元素,并传输元素至新数组。
优选地,所述获取Excel模板文件,并在Excel模板文件中渲染所述数据模型步骤,包括:
根据渲染函数在数据模型中获取虚拟DOM的节点、树;
渲染虚拟DOM的节点、树至Excel模板文件。
优选地,所述根据Excel模板文件生成Excel输出文件,导出Excel输出文件步骤,包括:
根据渲染后的Excel模板文件创建Excel输出文件,并写入数据模型的控制逻辑,其中,数据模型的控制逻辑包括:单元格的横向/纵向合并、下拉框、链接、单元的背景颜色、边框显示、横向/纵向的函数公式计算数值;
描述导出过程,并导出Excel输出文件。
优选地,所述描述导出过程,导出Excel输出文件的步骤,包括:
获取虚拟DOM的节点、树映射的数据变化情况;
结合数据模型的控制逻辑描述导出过程;
导出Excel输出文件。
本发明之计算机可读存储介质的具体实施方式与上述快速制作Excel文件方法、电子装置的具体实施方式大致相同,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种快速制作Excel文件方法,其特征在于,所述方法包括:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
2.根据权利要求1所述的快速制作Excel文件方法,其特征在于,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,包括:
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
当两个及以上元素不同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据。
3.根据权利要求2所述的快速制作Excel文件方法,其特征在于,所述在数据模型中设置数据,所述数据包括至少一个数组,根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位步骤,还包括:
在数据模型中设置多个元素,对比元素的数量与预设元素数量;
当多个元素超过预设元素数量时,扩容数组;
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
4.根据权利要求3所述的快速制作Excel文件方法,其特征在于,所述当多个元素超过预设元素数量时,扩容数组步骤,包括:
当多个元素超过预设元素数量时,获取当前数组长度,新建当前数组的长度的2的次幂倍为新数组的长度;
提取当前数组内的元素,并传输元素至新数组。
5.根据权利要求1所述的快速制作Excel文件方法,其特征在于,所述获取Excel模板文件,并在Excel模板文件中渲染所述数据模型步骤,包括:
根据渲染函数在数据模型中获取虚拟DOM的节点、树;
渲染虚拟DOM的节点、树至Excel模板文件。
6.根据权利要求5所述的快速制作Excel文件方法,其特征在于,所述根据Excel模板文件生成Excel输出文件,导出Excel输出文件步骤,包括:
根据渲染后的Excel模板文件创建Excel输出文件,并写入数据模型的控制逻辑,其中,数据模型的控制逻辑包括:单元格的横向/纵向合并、下拉框、链接、单元的背景颜色、边框显示、横向/纵向的函数公式计算数值;
描述导出过程,并导出Excel输出文件。
7.根据权利要求6所述的快速制作Excel文件方法,其特征在于,所述描述导出过程,导出Excel输出文件的步骤,包括:
获取虚拟DOM的节点、树映射的数据变化情况;
结合数据模型的控制逻辑描述导出过程;
导出Excel输出文件。
8.一种Excel文件的快速制作装置,其特征在于,所述快速制作装置包括:存储器与处理器,所述存储器中包括快速制作Excel文件程序,所述快速制作Excel文件程序被所述处理器执行时实现如下步骤:
获取数据模型,其中,所述数据模型包括数据结构;
在数据模型中设置两个及以上元素,判断两个及以上元素是否相同;
当两个及以上元素不相同时,获取当前元素的关键字并映射至对应关键字的数组,形成链条加数组结合的数据;
当两个及以上元素相同时,按顺序排列元素,形成数组数据;
根据所述数据模型中的数据结构对所述数组进行排序,根据排序得到所述数组在数据结构中的定位;
获取Excel模板文件,并在Excel模板文件中渲染所述数据模型;
将所述数组在数据结构中的定位写入Excel模板文件中;
根据Excel模板文件生成Excel输出文件,导出Excel输出文件。
9.根据权利要求8所述的Excel文件的快速制作装置,其特征在于,所述在数据模型中设置两个及以上元素步骤,包括:
在数据模型中设置多个元素,对比元素的数量与预设元素数量;
当多个元素超过预设元素数量时,扩容数组;
当多个元素未超过预设元素数量时,执行判断多个元素是否相同步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括快速制作Excel文件程序,所述快速制作Excel文件程序被处理器执行时,实现如权利要求1至7中任一项所述的快速制作Excel文件方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011431788.3A CN112632933A (zh) | 2020-12-07 | 2020-12-07 | 快速制作Excel文件方法、快速制作装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011431788.3A CN112632933A (zh) | 2020-12-07 | 2020-12-07 | 快速制作Excel文件方法、快速制作装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112632933A true CN112632933A (zh) | 2021-04-09 |
Family
ID=75308975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011431788.3A Pending CN112632933A (zh) | 2020-12-07 | 2020-12-07 | 快速制作Excel文件方法、快速制作装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112632933A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114217877A (zh) * | 2021-12-17 | 2022-03-22 | 杉数科技(北京)有限公司 | 基于页面交互组件的操作处理方法、装置、设备及介质 |
-
2020
- 2020-12-07 CN CN202011431788.3A patent/CN112632933A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114217877A (zh) * | 2021-12-17 | 2022-03-22 | 杉数科技(北京)有限公司 | 基于页面交互组件的操作处理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105094707B (zh) | 一种数据存储、读取方法及装置 | |
CN110209766B (zh) | 数据展示方法、电子装置及存储介质 | |
CN108595338A (zh) | 测试用例编写方法、装置、计算机设备及存储介质 | |
EP2278501B1 (en) | Smartcard for portable electronic device | |
CN113312108A (zh) | Swift报文的校验方法、装置、电子设备及存储介质 | |
CN111367890A (zh) | 一种数据迁移的方法、装置、计算机设备及可读存储介质 | |
CN104598161B (zh) | 数据读取、写入方法和装置及数据存储结构 | |
CN112632933A (zh) | 快速制作Excel文件方法、快速制作装置及存储介质 | |
CN115525580A (zh) | 一种namespace设置方法、装置及可读存储介质 | |
CN111813744A (zh) | 文件的搜索方法、装置、设备及存储介质 | |
CN112965721B (zh) | 基于Android的项目编译方法、装置、计算机设备及存储介质 | |
CN112765270A (zh) | 区块链数据处理方法、装置、计算机设备及介质 | |
JP7131119B2 (ja) | ソースアプリケーションからのソースデータをターゲットアプリケーションのターゲットデータへとマージするためのシステムおよび方法 | |
CN111752958A (zh) | 智能关联标签方法、装置、计算机设备及存储介质 | |
CN110321125A (zh) | 单元格的数据配置方法、数据配置装置及可读存储介质 | |
CN112685304A (zh) | 前端信息规范校验方法、系统、装置及存储介质 | |
CN115061916A (zh) | 自动化生成接口测试用例的方法及其相关设备 | |
CN112685439A (zh) | 针对风控系统的造数方法、系统、装置及存储介质 | |
CN109840080B (zh) | 字符属性比较方法、装置、存储介质及电子设备 | |
CN114489481A (zh) | 硬盘存储数据并访问的方法及系统 | |
CN107408104A (zh) | 样式的声明级联重新排序 | |
CN114116699A (zh) | 数据处理方法、装置、电子设备和计算机可读存储介质 | |
CN113504957A (zh) | 表格数据处理方法、装置、计算机设备及存储介质 | |
CN112905498A (zh) | 一种处理方法、装置、电子设备及存储介质 | |
CN103440289B (zh) | 基于MapReduce的网页不兼容标签并行查找方法 |
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 |