CN103425692B - 数据导出方法和装置 - Google Patents
数据导出方法和装置 Download PDFInfo
- Publication number
- CN103425692B CN103425692B CN201210161154.XA CN201210161154A CN103425692B CN 103425692 B CN103425692 B CN 103425692B CN 201210161154 A CN201210161154 A CN 201210161154A CN 103425692 B CN103425692 B CN 103425692B
- Authority
- CN
- China
- Prior art keywords
- attribute
- data record
- data
- configuration
- document
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种数据导出方法和装置,该方法包括:根据待导出的数据记录的内容属性和格式属性构建Velocity模板,根据数据记录的总条数N和每次填充模板所需的条数M设置填充模板的次数T;按照以下步骤执行模板填充:从数据库中获取M条数据记录,将获取到的数据记录中的内容属性和格式属性的值赋值给模板中对应的内容属性变量和格式属性变量;根据对模板的填充之后得到的结果生成XML文档。本申请解决了现有技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题,达到了在导出含大量数据的EXCEL文件的同时保证导出后的数据包括原EXCEL文件中的EXCEL格式的效果。
Description
技术领域
本申请涉及数据处理技术领域,具体而言,涉及一种数据导出方法和装置。
背景技术
在Java Web后台系统中,常常会遇到导出含大量数据的Excel的场景需求。当前在Java开发中导出Excel的常规做法有两种:一种方法是直接用开源的类库apache POI来创建workbook对象来生成Excel文件来导出,这种方法可以导出含有Excel格式的Excel文件(如合并单元格,设置单元格背景颜色等);另外一种方法是按照CSV文本格式直接写数据流生成CSV格式文件导出。
然而,现有的方法中存在如下的缺陷:
1)直接用开源的类库apache POI来创建workbook对象来生成EXCEL文件,以进行EXCEL数据的导出的方法中,可以导出含有EXCEL格式(例如,合并单元格、设置单元格背景颜色等)的EXCEL文件,也就是说,导出后的文件仍然具有上述的EXCEL格式,然而,由于apache POI类库的workbook对象在上述导出方法(例如,在上述导出方法中执行addRow()的指令)上消耗内存非常严重,因此,在内存一定的情况下,无法导出含大量数据的EXCEL文件,例如,当服务器JVM的最大堆内存只有1-2G、且待导出的Excel文件的列数为50至60时,由于内存的限制导致只能同时导出1万至2万条的EXCEL数据,其中,上述一条数据指的是Excel文件中的一行记录的数据。
2)按照CSV文本格式直接写数据流生成CSV格式文件导出的方法,可以在内存一定的情况下导出的含大量数据的EXCEL文件(例如,当服务器JVM的最大堆内存只有1-2G、且待导出的Excel文件的列数为50至60时,可以导出20-40万条的数据),但是,导出后的文件并不具有EXCEL格式(即,不包括合并单元格、设置单元格背景颜色等),这是由于CSV格式是用逗号隔开的文本文档,因此导出的文件只能展示简单的二维数据表格,不支持Excel格式(例如合并单元格,设置单元格背景颜色等),只能展示简单的二维数据表格。
针对相关技术中的上述问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种数据导出方法和装置,以解决相关技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题。
根据本申请的一个方面,提供了一种数据导出方法,该方法包括:根据待导出的数据记录的内容属性和格式属性构建Velocity模板,其中,Velocity模板包括:分别与内容属性和格式属性对应的内容属性变量和格式属性变量;根据所需获取的数据记录的总条数N和每次填充Velocity模板所需的数据记录的条数M设置填充Velocity模板的次数T,其中,T=(N+M-1)/M,/为整除;按照以下步骤执行T次对Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给Velocity模板中对应的内容属性变量和格式属性变量;根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档。
优选的,根据待导出的数据记录的内容属性和格式属性构建Velocity模板的步骤包括:获取数据记录文档,其中,数据记录文档中包括内容属性和格式属性;将数据记录文档转换成XML文档,其中,转换成的XML文档包括内容属性和格式属性;根据转换成的XML文档中的格式构建Velocity模板。
优选的,获取数据记录文档的步骤包括:通过交互界面接收用户输入的一条或多条数据记录,其中,输入的数据记录包括内容属性和格式属性;将用户输入的一条或多条数据记录保存为数据记录文档。
优选的,获取数据记录文档的步骤包括:从数据库中获取M条数据记录中的一条或多条数据记录,其中,获取的数据记录包括内容属性和格式属性;将获取的一条或多条数据记录保存为数据记录文档。
优选的,根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档的步骤包括:Velocity渲染引擎通过调用Velocity渲染引擎内部JAVA程序来将填充得到结果渲染成XML文档。
优选的,在根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档之后,还包括:将生成的XML文档的后缀名改为EXCEL文档的后缀名;和/或将生成的XML文档进行压缩。
根据本申请的另一方面,提供了一种数据导出装置,该装置包括:构建单元,用于根据待导出的数据记录的内容属性和格式属性构建Velocity模板,其中,Velocity模板包括:分别与内容属性和格式属性对应的内容属性变量和格式属性变量;设置单元,用于根据所需获取的数据记录的总条数N和每次填充Velocity模板所需的数据记录的条数M设置填充Velocity模板的次数T,其中,T=(N+M-1)/M,/为整除;填充单元,用于按照以下步骤执行T次对Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给Velocity模板中对应的内容属性变量和格式属性变量;生成单元,用于根据执行单元执行了T次对Velocity模板的填充之后得到的结果生成XML文档。
优选的,构建单元包括:获取模块,用于获取数据记录文档,其中,数据记录文档中包括内容属性和格式属性;转换模块,用于将数据记录文档转换成XML文档,其中,转换成的XML文档包括内容属性和格式属性;构建模块,用于根据转换成的XML文档中的格式构建Velocity模板。
优选的,获取模块包括:接收子模块,用于通过交互界面接收用户输入的一条或多条数据记录,其中,输入的数据记录包括内容属性和格式属性;第一存储子模块,用于将用户输入的一条或多条数据记录保存为数据记录文档。
优选的,获取模块包括:获取子模块,用于从数据库中获取M条数据记录中的一条或多条数据记录,其中,获取的数据记录包括内容属性和格式属性;第二存储子模块,用于将获取的一条或多条数据记录保存为数据记录文档。
优选的,生成单元包括:生成模块,用于Velocity渲染引擎通过调用Velocity渲染引擎内部JAVA程序来将填充得到结果渲染成XML文档。
本申请所涉及的各个优选实施方案在导出Excel数据时,采用了Velocity模板记录EXCEL数据记录中的内容属性的值和格式属性,从而保证了导出后的数据包括原EXCEL文件中的EXCEL格式,此外,还采用了分页查询导出方案,通过分页查询数据集,并用velocity将分页查询的数据集渲染xml文档,在完成整个EXCEL文件的渲染后导出文件,这种用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出大量数据的EXCEL文件,从而解决了现有技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题,达到了在导出含大量数据的EXCEL文件的同时保证导出后的数据包括原EXCEL文件中的EXCEL格式的技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的数据导出系统的一种优选的结构图;
图2是根据本申请实施例的数据导出装置的一种优选的结构图;
图3是根据本申请实施例的数据导出装置的另一种优选的结构图;
图4是根据本申请实施例的数据导出装置的又一种优选的结构图;
图5是根据本申请实施例的数据导出装置的又一种优选的结构图;
图6是根据本申请实施例的数据导出方法的一种优选的流程图;以及
图7是根据本申请实施例的数据导出方法的又一种优选的流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在描述本申请的各实施例的进一步细节之前,将参考图1来描述可用于实现本申请的原理的一个合适的计算体系结构。在以下描述中,除非另外指明,否则将参考由一个或多个计算机执行的动作和操作的符号表示来描述本申请的各实施例。由此,可以理解,有时被称为计算机执行的这类动作和操作包括计算机的处理单元对以结构化形式表示数据的电信号的操纵。这一操纵转换了数据或在计算机的存储器系统中的位置上维护它,这以本领域的技术人员都理解的方式重配置或改变了计算机的操作。维护数据的数据结构是具有数据的格式所定义的特定属性的存储器的物理位置。然而,尽管在上述上下文中描述本申请,但它并不意味着限制性的,如本领域的技术人员所理解的,后文所描述的动作和操作的各方面也可用硬件来实现。
转向附图,其中相同的参考标号指代相同的元素,本申请的原理被示为在一个合适的计算环境中实现。以下描述基于所述的本申请的实施例,并且不应认为是关于此处未明确描述的替换实施例而限制本申请。
图1示出了可用于这些设备的一个示例计算机体系结构的示意图。出于描述的目的,所绘的体系结构仅为合适环境的一个示例,并非对本申请的使用范围或功能提出任何局限。也不应将该计算系统解释为对图1所示的任一组件或其组合具有任何依赖或需求。
本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算系统、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器系统、基于微处理的系统、小型机、大型计算机、以及包括任一上述系统或设备的分布式计算环境。
在其最基本的配置中,图1中的数据导出系统100至少包括:一个网站的服务器102以及一个或多个客户端104。服务器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置、用于存储数据的存储装置以及与客户端通信的传输装置;客户端104可以包括:微处理器MCU、与服务器通信的传输装置、与用户交互的显示装置。在本说明书和权利要求书中,“数据导出系统”也可以被定义为能够执行软件、固件或微码来实现功能的任何硬件组件或硬件组件的组合。数据导出系统100甚至可以是分布式的,以实现分布式功能。
如本申请所使用的,术语“模块”、“组件”或“单元”可以指在数据导出系统100上执行的软件对象或例程。此处所描述的不同组件、模块、单元、引擎和服务可被实现为在数据导出系统100上执行(例如,作为单独的线程)的对象或进程。尽管此处所描述的系统和方法较佳地以软件来实现,但是硬件或软件和硬件的组合的实现也是可能并被构想的。
实施例1
本申请提供了一种数据导出装置,如图2所示,该装置包括以下部件:
1)构建单元202,用于根据待导出的数据记录的内容属性和格式属性构建Velocity模板(Velocity是一个基于java的模板引擎),其中,Velocity模板包括:分别与内容属性和格式属性对应的内容属性变量和格式属性变量,优选的,上述的内容属性包括待导出Excel文档中的具体内容,例如,待导出的Excel文档为业务量统计的Excel文档,其中的内容属性包括Excel文档中的订单号、金额、日期等相关属性;上述的格式属性包括Excel文档中的EXCEL格式,例如,在上述Excel文档中,合并单元格、设置单元格背景颜色参数等。优选的,以待导出的Excel文件中一行数据记录为单位来设置Velocity模板中的变量,假设Excel文件包括如下数据记录:
订单号 | 金额 | 日期 |
10001 | 2000 | 2010-1-1 |
其中,订单号所在列的每个单元格被设置为红色。相应的,在Velocity模板中设置如下变量:row(Cell1(data.number),Cell1(format.color),Cell2(data.price),Cell3(data.date)),其中,Cell1(data.number),为与内容属性对应的内容属性变量,用于记录“订单号”所在列的单元格的内容,例如,10001;Cell1(format.color),为与格式属性对应的格式属性变量,用于记录“订单号”所在列的单元格的EXCEL格式,例如,使用0x0001表示红色;Cell2(data.price),为与内容属性对应的内容属性变量,用于记录“金额”所在列的单元格的内容,例如,2000;Cell3(data.date),为与内容属性对应的内容属性变量,用于记录“日期”所在列的单元格的内容,例如,2010-1-1。
2)设置单元204,与构建单元202连接,用于根据所需获取的数据记录的总条数N和每次填充Velocity模板所需的数据记录的条数M设置填充Velocity模板的次数T,其中,T=(N+M-1)/M,其中,/为整除,例如,所需获取的数据记录的总条数N为200,每次填充Velocity模板所需的数据记录的条数M为10,则设置填充Velocity模板的次数T=(200+10-1)/10=20,其中,/为整除;
3)填充单元206,与设置单元204连接,用于按照以下步骤执行T次对所述Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量。优选的,首先获取数据库中第1条到第M条数据,并将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量,在完成上述操作之后,再获取第M+1条到第M+M条,继续执行将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量的操作,以此类推,直至获取完数据库中的所有N条数据,并填充至Velocity模板,至此,通过Velocity模板可以获取数据库中的所有N条数据的内容属性的值和格式属性的值。
例如,将每条获取到的数据记录中的内容属性的值和格式属性的值对应的对变量row(Cell1(data.number),Cell1(format.color),Cell2(data.price),Cell3(data.date))进行赋值。
4)生成单元208,与执行单元206连接,用于根据执行单元执行了T次对Velocity模板的填充之后得到的结果生成XML文档。
本优选实施例所涉及的各个优选实施方案在导出Excel数据时,采用了Velocity模板记录EXCEL数据记录中的内容属性的值和格式属性,从而保证了导出后的数据包括原EXCEL文件中的EXCEL格式,此外,还采用了分页查询导出方案,通过分页查询数据集,并用velocity将分页查询的数据集渲染xml文档,在完成整个EXCEL文件的渲染后导出文件,这种用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出大量数据的EXCEL文件,从而解决了现有技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题,达到了在导出含大量数据的EXCEL文件的同时保证导出后的数据包括原EXCEL文件中的EXCEL格式的技术效果。
本申请还对上述构建单元202进行了优化,具体来说,如图3所示,构建单元202包括:获取模块302,用于获取数据记录文档,其中,数据记录文档中包括内容属性和格式属性;转换模块304,与获取模块302连接,用于将数据记录文档转换成XML文档,其中,转换成的XML文档包括内容属性和格式属性;构建模块306,与转换模块304连接,用于根据转换成的XML文档中的格式构建Velocity模板。在上述优选的实施方式中,提供了一种根据待导出的数据记录的内容属性和格式属性构建Velocity模板的优选的方案,在构建Velocity模板过程中,首先获取包含有内容属性和格式属性的数据记录文档,并将数据记录文档转换成包括内容属性和格式属性XML文档,然后根据转换成的XML文档中的格式构建Velocity模板,保证可以导出含有EXCEL格式(例如,合并单元格、设置单元格背景颜色等)的EXCEL文件。
本申请还对上述获取模块302进行了改进,具体来说,如图4所示,获取模块302包括:接收子模块402,用于通过交互界面接收用户输入的一条或多条数据记录,其中,输入的数据记录包括内容属性和格式属性;第一存储子模块404,与接收子模块402连接,用于将用户输入的一条或多条数据记录保存为数据记录文档。在上述优选的实施方式中,提供了一种获取数据记录文档的优选的技术方案,用户可以通过手工输入所要导出数据记录来完成Excel数据的导出。
本申请还对上述获取模块302进行了改进,具体地,如图5所示,获取模块302包括:获取子模块502,用于从数据库中获取M条数据记录中的一条或多条数据记录,其中,获取的数据记录包括内容属性和格式属性;第二存储子模块504,与获取子模块502连接,用于将获取的一条或多条数据记录保存为数据记录文档。在上述优选的实施方式中,提供了另一种获取数据记录文档的优选的技术方案,用户可以通过从数据库中获取所要导出数据记录来完成Excel数据的导出。
本申请还提供了一种生成XML文档的优选的方案,具体来说,生成单元208包括:生成模块,用于Velocity渲染引擎通过调用Velocity渲染引擎内部JAVA程序来将填充得到结果渲染成XML文档。在上述优选的实施方式中,提供了一种生成XML文档的优选的方案,由于用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出含大量数据的EXCEL文件。此外,采用分页的方式来取数据并填充velocity来渲染过程中,例如,分页取数据时,在取第X次(X大于1)的数据时候,保存第X-1次的数据的Java对象因为是局部变量,会被垃圾回收,释放内存,这种方法较现有技术而言,占用内存小。
优选的,本申请还对上述数据导出装置进行了优化,具体来说,数据导出装置还包括:更改单元,用于在根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档之后,将生成的XML文档的后缀名改为EXCEL文档的后缀名;和/或压缩单元,用于将生成的XML文档进行压缩。通过更改后缀名,可以达到方便识别导出的Excel数据;将生成的XML文档进行压缩方便对导出的Excel数据进行后续的处理。
实施例2
在上述实施例1的基础上,本申请还提供了一种数据导出方法,具体来说,如图6所示,该方法包括:
S602,根据待导出的数据记录的内容属性和格式属性构建Velocity模板,其中,Velocity模板包括:分别与内容属性和格式属性对应的内容属性变量和格式属性变量;优选的,上述的内容属性包括待导出Excel文档中的具体内容,例如,待导出的Excel文档为业务量统计的Excel文档,其中的内容属性包括Excel文档中的订单号、金额、日期等相关属性;上述的格式属性包括Excel文档中的EXCEL格式,例如,在上述Excel文档中,合并单元格、设置单元格背景颜色参数等。优选的,以待导出的Excel文件中一行数据记录为单位来设置Velocity模板中的变量,假设Excel文件包括如下数据记录:
订单号 | 金额 | 日期 |
10001 | 2000 | 2010-1-1 |
其中,订单号所在列的每个单元格被设置为红色。相应的,在Velocity模板中设置如下变量:row(Cell1(data.number),Cell1(format.color),Cell2(data.price),Cell3(data.date)),其中,Cell1(data.number),为与内容属性对应的内容属性变量,用于记录“订单号”所在列的单元格的内容,例如,10001;Cell1(format.color),为与格式属性对应的格式属性变量,用于记录“订单号”所在列的单元格的EXCEL格式,例如,使用0x0001表示红色;Cell2(data.price),为与内容属性对应的内容属性变量,用于记录“金额”所在列的单元格的内容,例如,2000;Cell3(data.date),为与内容属性对应的内容属性变量,用于记录“日期”所在列的单元格的内容,例如,2010-1-1。
S604,根据所需获取的数据记录的总条数N和每次填充Velocity模板所需的数据记录的条数M设置填充Velocity模板的次数T,其中,T=(N+M-1)/M,其中,/为整除;优选的,例如,所需获取的数据记录的总条数N为200,每次填充Velocity模板所需的数据记录的条数M为10,则设置填充Velocity模板的次数T=(200+10-1)/10=20,其中,/为整除;
S606,按照以下步骤执行T次对Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给Velocity模板中对应的内容属性变量和格式属性变量;优选的,首先获取数据库中第1条到第M条数据,并将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量,在完成上述操作之后,再获取第M+1条到第M+M条,继续执行将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量的操作,以此类推,直至获取完数据库中的所有N条数据,并填充至Velocity模板,至此,通过Velocity模板可以获取数据库中的所有N条数据的内容属性的值和格式属性的值。
例如,将每条获取到的数据记录中的内容属性的值和格式属性的值对应的对变量row(Cell1(data.number),Cell1(format.color),Cell2(data.price),Cell3(data.date))进行赋值。
S608,根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档。
本优选实施例所涉及的各个优选实施方案在导出Excel数据时,采用了Velocity模板了记录EXCEL数据记录中的内容属性的值和格式属性,从而保证了导出后的数据包括原EXCEL文件中的EXCEL格式,此外,还采用了分页查询导出方案,通过分页查询数据集,并用velocity将分页查询的数据集渲染xml文档,在完成整个EXCEL文件的渲染后导出文件,这种用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出大量数据的EXCEL文件,从而解决了现有技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题,达到了在导出含大量数据的EXCEL文件的同时保证导出后的数据包括原EXCEL文件中的EXCEL格式的技术效果。
本申请还提供了一种优选的根据待导出的数据记录的内容属性和格式属性构建Velocity模板的方法,具体来说,该方法包括:获取数据记录文档,其中,数据记录文档中包括内容属性和格式属性;将数据记录文档转换成XML文档,其中,转换成的XML文档包括内容属性和格式属性;根据转换成的XML文档中的格式构建Velocity模板。在上述优选的实施方式中,提供了一种根据待导出的数据记录的内容属性和格式属性构建Velocity模板的优选的方案,在构建Velocity模板过程中,首先获取包含有内容属性和格式属性的数据记录文档,并将数据记录文档转换成包括内容属性和格式属性XML文档,然后根据转换成的XML文档中的格式构建Velocity模板,保证可以导出含有EXCEL格式(例如,合并单元格、设置单元格背景颜色等)的EXCEL文件。
本申请还提供了一种获取数据记录文档的优选的方法,具体地,该方法包括:通过交互界面接收用户输入的一条或多条数据记录,其中,输入的数据记录包括内容属性和格式属性;将用户输入的一条或多条数据记录保存为数据记录文档。在上述优选的实施方式中,提供了一种获取数据记录文档的优选的技术方案,用户可以通过手工输入所要导出数据记录来完成Excel数据的导出。
本申请还提供了另一种获取数据记录文档的优选的方法,具体地,该方法包括:从数据库中获取M条数据记录中的一条或多条数据记录,其中,获取的数据记录包括内容属性和格式属性;将获取的一条或多条数据记录保存为数据记录文档,其中,上述数据记录文档作为如何创建velocity模板的依据。在上述优选的实施方式中,提供了一种获取数据记录文档的优选的方法,根据用户与系统的交互自己定义配置动态生成Velocity模板,其中,该velocity模板中的每个Excel的sheet显示的列、sheet名称、以及每个sheet的格式等都是通过用户使用系统自己定义。
本申请还提供了一种根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档的优选的方法,具体地,该方法包括:Velocity渲染引擎通过调用Velocity渲染引擎内部JAVA程序来将填充得到结果渲染成XML文档。在上述优选的实施方式中,提供了一种生成XML文档的优选的方案,由于用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出含大量数据的EXCEL文件。此外,采用分页的方式来取数据并填充velocity来渲染过程中,例如,分页取数据时,在取第X次(X大于1)的数据时候,保存第X-1次的数据的Java对象因为是局部变量,会被垃圾回收,释放内存,这种方法较现有技术而言,占用内存小。
本申请还对上述数据导出方法进行了优化,具体地,在根据执行了T次对Velocity模板的填充之后得到的结果生成XML文档之后,该方法还包括:将生成的XML文档的后缀名改为EXCEL文档的后缀名;和/或将生成的XML文档进行压缩。通过更改后缀名,可以达到方便识别导出的Excel数据;将生成的XML文档进行压缩方便对导出的Excel数据进行后续的处理。
实施例3
在上述实施例1和实施例2的基础上,本申请还提供了一种具体的数据导出方法,优选的,图7示出该方法所对应的优选的流程图,从图7中可以看出,该方法包括如下步骤:
S702,根据待导出的Excel文档的XML Schema结构构建Velocity模板;优选的,构建的Velocity模板包括:与内容属性和格式属性对应的内容属性变量和格式属性变量,其中,上述的内容属性包括待导出Excel文档中的具体内容,例如,待导出的Excel文档为业务量统计的Excel文档,其中的内容属性包括Excel文档中的订单号、金额、日期等相关属性;上述的格式属性包括Excel文档中的EXCEL格式,例如,在上述Excel文档中,合并单元格、设置单元格背景颜色参数等。优选的,以待导出的Excel文件中一行数据记录为单位来设置Velocity模板中的变量,假设Excel文件包括如下数据记录:
订单号 | 金额 | 日期 |
10001 | 2000 | 2010-1-1 |
其中,订单号所在列的每个单元格被设置为红色。相应的,在Velocity模板中设置如下变量:row(Cell1(data.number),Cell1(format.color),Cell2(data.price),Cell3(data.date)),其中,Cell1(data.number),为与内容属性对应的内容属性变量,用于记录“订单号”所在列的单元格的内容,例如,10001;Cell1(format.color),为与格式属性对应的格式属性变量,用于记录“订单号”所在列的单元格的EXCEL格式,例如,使用0x0001表示红色;Cell2(data.price),为与内容属性对应的内容属性变量,用于记录“金额”所在列的单元格的内容,例如,2000;Cell3(data.date),为与内容属性对应的内容属性变量,用于记录“日期”所在列的单元格的内容,例如,2010-1-1。
S704,根据所需获取的数据记录的总条数的参数Count和每页的数据量大小参数PageSize计算出分页页数TotalPage;优选的,TotalPage=(Count+PageSize-1)/PageSize,其中,/为整除。例如,所需获取的数据记录的总条数Count为200,每页数据量大小PageSize为10,则分页页数TotalPage=(200+10-1)/10=20,其中,/为整除。
S706,判断是否存在下一页数据;若存在,则执行步骤S708,若不存在,则直接跳转至步骤S712。
S708,从数据库中获取当前页数据所对应的数据记录;
S710,Velocity渲染引擎通过调用JAVA程序来将填充得到结果渲染成XML文档,转到S706;
S712,将得到的最终渲染出的XML文档的后缀名修改为Excel文件的后缀名,例如,修改为.xls,这样便于用户使用Excel软件打开;
S714,将得到的XML文档压缩后导出。优选的,将生成的XML文档进行ZIP格式的压缩,从而方便用户从服务器上下载这些渲染出的XML文档。
从以上描述中可以看出,本申请所涉及的各个优选实施方案在导出Excel数据时,采用了Velocity模板了记录EXCEL数据记录中的内容属性的值和格式属性,从而保证了导出后的数据包括原EXCEL文件中的EXCEL格式,此外,还采用了分页查询导出方案,通过分页查询数据集,并用velocity将分页查询的数据集渲染xml文档,在完成整个EXCEL文件的渲染后导出文件,这种用velocity直接渲染xml文档到输出流的方式占用内存较小,使得在内存一定的情况下可以导出大量数据的EXCEL文件,从而解决了现有技术中无法导出含大量数据的EXCEL文件、且导出后的数据包括原EXCEL文件中的EXCEL格式的问题,达到了在导出含大量数据的EXCEL文件的同时保证导出后的数据包括原EXCEL文件中的EXCEL格式的技术效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (9)
1.一种数据导出方法,其特征在于,包括:
根据待导出的数据记录的内容属性和格式属性构建Velocity模板,其中,所述Velocity模板包括:分别与所述内容属性和所述格式属性对应的内容属性变量和格式属性变量;
根据所需获取的数据记录的总条数N和每次填充所述Velocity模板所需的数据记录的条数M设置填充所述Velocity模板的次数T,其中,T=(N+M-1)/M,/为整除;
按照以下步骤执行T次对所述Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量;
根据执行了T次对所述Velocity模板的填充之后得到的结果生成XML文档;
其中,根据执行了T次对所述Velocity模板的填充之后得到的结果生成XML文档的步骤包括:Velocity渲染引擎通过调用所述Velocity渲染引擎内部JAVA程序来将填充之后得到的结果渲染成XML文档。
2.根据权利要求1所述的方法,其特征在于,根据待导出的数据记录的内容属性和格式属性构建Velocity模板的步骤包括:
获取数据记录文档,其中,所述数据记录文档中包括所述内容属性和格式属性;
将所述数据记录文档转换成XML文档,其中,所述转换成的XML文档包括所述内容属性和格式属性;
根据所述转换成的XML文档中的格式构建所述Velocity模板。
3.根据权利要求2所述的方法,其特征在于,所述获取数据记录文档的步骤包括:
通过交互界面接收用户输入的一条或多条数据记录,其中,所述输入的数据记录包括所述内容属性和格式属性;
将所述用户输入的一条或多条数据记录保存为所述数据记录文档。
4.根据权利要求2所述的方法,其特征在于,所述获取数据记录文档的步骤包括:
从所述数据库中获取M条数据记录中的一条或多条数据记录,其中,所述获取的数据记录包括所述内容属性和格式属性;
将所述获取的一条或多条数据记录保存为所述数据记录文档。
5.根据权利要求1所述的方法,其特征在于,在根据执行了T次对所述Velocity模板的填充之后得到的结果生成XML文档之后,还包括:
将生成的XML文档的后缀名改为EXCEL文档的后缀名;和/或
将生成的XML文档进行压缩。
6.一种数据导出装置,其特征在于,包括:
构建单元,用于根据待导出的数据记录的内容属性和格式属性构建Velocity模板,其中,所述Velocity模板包括:分别与所述内容属性和所述格式属性对应的内容属性变量和格式属性变量;
设置单元,用于根据所需获取的数据记录的总条数N和每次填充所述Velocity模板所需的数据记录的条数M设置填充所述Velocity模板的次数T,其中,T=(N+M-1)/M,/为整除;
填充单元,用于按照以下步骤执行T次对所述Velocity模板的填充:从数据库中获取M条数据记录,将每条获取到的数据记录中的内容属性的值和格式属性的值赋值给所述Velocity模板中对应的内容属性变量和格式属性变量;
生成单元,用于根据执行了T次对所述Velocity模板的填充之后得到的结果生成XML文档;
其中,所述生成单元包括:生成模块,用于Velocity渲染引擎通过调用所述Velocity渲染引擎内部JAVA程序来将填充之后得到的结果渲染成XML文档。
7.根据权利要求6所述的装置,其特征在于,所述构建单元包括:
获取模块,用于获取数据记录文档,其中,所述数据记录文档中包括所述内容属性和格式属性;
转换模块,用于将所述数据记录文档转换成XML文档,其中,所述转换成的XML文档包括所述内容属性和格式属性;
构建模块,用于根据所述转换成的XML文档中的格式构建所述Velocity模板。
8.根据权利要求7所述的装置,其特征在于,所述获取模块包括:
接收子模块,用于通过交互界面接收用户输入的一条或多条数据记录,其中,所述输入的数据记录包括所述内容属性和格式属性;
第一存储子模块,用于将所述用户输入的一条或多条数据记录保存为所述数据记录文档。
9.根据权利要求7所述的装置,其特征在于,所述获取模块包括:
获取子模块,用于从所述数据库中获取M条数据记录中的一条或多条数据记录,其中,所述获取的数据记录包括所述内容属性和格式属性;
第二存储子模块,用于将所述获取的一条或多条数据记录保存为所述数据记录文档。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210161154.XA CN103425692B (zh) | 2012-05-22 | 2012-05-22 | 数据导出方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210161154.XA CN103425692B (zh) | 2012-05-22 | 2012-05-22 | 数据导出方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103425692A CN103425692A (zh) | 2013-12-04 |
CN103425692B true CN103425692B (zh) | 2016-08-10 |
Family
ID=49650448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210161154.XA Active CN103425692B (zh) | 2012-05-22 | 2012-05-22 | 数据导出方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103425692B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500196B (zh) * | 2013-09-22 | 2016-09-14 | 成都交大光芒科技股份有限公司 | 多并发大数据量环境下excel数据导出方法及其导出装置 |
CN107632880B (zh) * | 2017-08-31 | 2021-05-04 | 深圳市丰巢科技有限公司 | 导出excel数据的方法、存储介质及电子设备 |
CN108763457A (zh) * | 2018-05-28 | 2018-11-06 | 厦门海迈科技股份有限公司 | 基于格式化模板的通用型数据导出方法、设备及存储介质 |
CN109241494A (zh) * | 2018-08-07 | 2019-01-18 | 平安科技(深圳)有限公司 | 分页处理方法、系统、计算机设备和存储介质 |
CN112347047B (zh) * | 2019-08-09 | 2024-06-11 | 广州汽车集团股份有限公司 | 一种车辆数据文件生成方法及装置 |
CN112487249B (zh) * | 2020-11-27 | 2024-03-01 | 郑朗 | 一种可扩展标记语言xml文档压缩、解压方法及装置 |
CN112733503A (zh) * | 2021-01-22 | 2021-04-30 | 浪潮卓数大数据产业发展有限公司 | 一种基于poi的html表格生成excel的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945527A (zh) * | 2006-10-26 | 2007-04-11 | 山东浪潮齐鲁软件产业股份有限公司 | 可实现代码复用的server版代码生成系统 |
WO2007114630A1 (en) * | 2006-04-03 | 2007-10-11 | Tobesoft Co., Ltd. | Data division formation system for client-server and method thereof |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
CN101606147A (zh) * | 2006-08-22 | 2009-12-16 | 摩托罗拉公司 | 在通信系统中从应用服务提供商向客户端提供服务 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100332149A1 (en) * | 1998-12-17 | 2010-12-30 | Hach Company | Method and system for remote monitoring of fluid quality and treatment |
-
2012
- 2012-05-22 CN CN201210161154.XA patent/CN103425692B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007114630A1 (en) * | 2006-04-03 | 2007-10-11 | Tobesoft Co., Ltd. | Data division formation system for client-server and method thereof |
CN101606147A (zh) * | 2006-08-22 | 2009-12-16 | 摩托罗拉公司 | 在通信系统中从应用服务提供商向客户端提供服务 |
CN1945527A (zh) * | 2006-10-26 | 2007-04-11 | 山东浪潮齐鲁软件产业股份有限公司 | 可实现代码复用的server版代码生成系统 |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103425692A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425692B (zh) | 数据导出方法和装置 | |
CN105630847B (zh) | 数据存储方法、数据查询方法、装置及系统 | |
Butts | network: a Package for Managing Relational Data in R | |
Barabási | Scale-free networks: a decade and beyond | |
Petychakis et al. | A state-of-the-art analysis of the current public data landscape from a functional, semantic and technical perspective | |
CN109710703A (zh) | 一种血缘关系网络的生成方法及装置 | |
CN106407201A (zh) | 一种数据处理方法及装置 | |
CN107229619A (zh) | 互联网业务链路调用情况的统计、展示方法及装置 | |
CN103678442A (zh) | 基于用户数据访问模式的数据库表格式转换的方法和系统 | |
CN102999537A (zh) | 一种数据迁移系统和方法 | |
Gravejat et al. | Smooth travelling-wave solutions to the inviscid surface quasi-geostrophic equation | |
CN107357812A (zh) | 一种数据查询方法及装置 | |
CN103390018B (zh) | 一种基于SDD的Web服务数据建模与搜索方法 | |
CN104063361A (zh) | 报表设计方法和报表设计系统 | |
CN106503274A (zh) | 一种数据整合与搜索方法及服务器 | |
CN104216961A (zh) | 一种数据处理方法和装置 | |
CN104395881B (zh) | 动态型阵列的表达和变换 | |
US20110264703A1 (en) | Importing Tree Structure | |
CN107766503A (zh) | 基于redis的数据快速查询方法及装置 | |
Kepner et al. | Associative arrays: Unified mathematics for spreadsheets, databases, matrices, and graphs | |
CN109684517A (zh) | 一种历史数据存储方法、读写方法、存储装置和设备 | |
CN113312823B (zh) | 一种有限元后处理数据处理方法、系统、设备及存储介质 | |
EP3759665A1 (en) | Multi-dimensional organization of data for efficient analysis | |
Bernhardt | A Sharkovsky theorem for vertex maps on trees | |
CN109241208A (zh) | 地址定位、地址监测、信息处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |