CN101706722A - 一种生成报表的方法及系统 - Google Patents
一种生成报表的方法及系统 Download PDFInfo
- Publication number
- CN101706722A CN101706722A CN200910249724A CN200910249724A CN101706722A CN 101706722 A CN101706722 A CN 101706722A CN 200910249724 A CN200910249724 A CN 200910249724A CN 200910249724 A CN200910249724 A CN 200910249724A CN 101706722 A CN101706722 A CN 101706722A
- Authority
- CN
- China
- Prior art keywords
- instruction
- report
- script
- dsl
- template
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种使用脚本语言生成报表的方法及系统,包括步骤:使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;使用脚本语言编写定制模板报表,定义DSL模板报表;解析DSL报表指令文件,通过专门编写的解析程序自动化分析报表指令文件,并将分析后的结果以报表形式展现出来。本发明实施例中的技术方案不必利用专门的软件来或利用WEB方式来设计报表模型开发报表,而且在需要转换报表类型时操作简单,从而开发效率高,重复性工作少。
Description
技术领域
本发明涉及计算机软件领域,更具体地说,涉及一种生成报表的方法及系统。
背景技术
目前报表生成所采用的技术,均为界面设计,首先根据所要设计报表的特点,选择不同的报表类型,进行一些初始化设置;然后利用报表软件提供的界面,设计报表模型。
在现有技术的方案中采用界面设计报表模型,再加载报表模型,展现出实际的报表。比如现有技术的方案中采用类似Excel报表设计模型(常用的报表软件如水晶报表、润乾报表等均采用这种形式),在处理复杂报表(复合报表等)设计时,界面设计简洁,具有一定优势;但在处理简单报表以及格式相对固定的报表时,由于现有技术为界面设计报表模型,所以必须利用专门的软件来或利用WEB方式来设计报表模型开发报表,在需要转换报表类型时操作比较复杂,所以开发效率较低,重复性工作较多。
发明内容
有鉴于此,本发明实施例提供了一种使用脚本语言生成报表的方法及系统,以实现方便高效的开发表报。
为了实现上述目的,本发明实施例提供了如下技术方案:
一种生成报表的方法,包括步骤:
使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;
为所需的各个类型报表及其典型应用编写DSL模板,所述DSL模板为通过脚本语言使用所述指令集中的指令编写形成的报表指令文件;
通过解析程序分析所需的DSL模板,以分析后的结果生成报表。
优选的,在本发明实施例所述方法中,所述脚本语言为Groovy、JavaScript、Ruby或VbScript。
优选的,在本发明实施例所述方法中,所述脚本语言使用Uedit编辑器或Windows中的记事本程序作为编辑。
优选的,在本发明实施例所述方法中,所述定制报表指令包括方法指令和属性指令。
优选的,在本发明实施例所述方法中,所述方法指令内可以包含子方法指令;所述属性指令可以包含属性节点。
一种生成报表的系统,包括:
定制报表指令集形成装置,用于使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;
DSL模板报表定义装置,用于为所需的各个类型报表及其典型应用编写DSL模板,所述DSL模板为通过脚本语言使用所述指令集中的指令编写形成的报表指令文件;
DSL报表指令解析装置,用于通过解析程序分析所需的DSL模板,以分析后的结果生成报表。
优选的,在本发明实施例所述系统中,所述脚本语言为Groovy、JavaScript、Ruby或VbScript。
优选的,在本发明实施例所述系统中,所述脚本语言使用Uedit编辑器或Windows中的记事本程序作为编辑。
优选的,在本发明实施例所述系统中,所述定制报表指令包括方法指令和属性指令。
优选的,在本发明实施例所述系统中,所述方法指令内可以包含子方法指令;所述属性指令可以包含属性节点。
通过以上技术方案可以看出,在本发明实施例的方法或系统中,通过脚本语言编写专门用于生成报表的DSL,并采用模版报表的设计思路,从而使得报表的设计人员可以不用具备良好的编程能力的情况下,通过简单的学习后就可以用诸如Windows中的记事本或Uedit编辑器等来编写简洁的代码来高效的完成报表的设计。解决了现有技术中在处理简单报表以及格式相对固定的报表时,必须利用专门的软件来或利用WEB方式来设计报表模型生成报表,在需要转换报表类型时操作比较复杂,所以开发效率较低,重复性工作较多的技术问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中所述方法的步骤流程图;
图2为本发明实施例中所述系统的组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了能够更好的理解本发明实施例,以下是对本发明实施例中应用到的一些技术内容所作的相应说明:
DSL(domain specific language),即领域专用语言,其基本思想是求专不求全,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。它是具有针对某一领域的特点量身定制的用来完成特定功能的一种编程语言。其特点是其功能具有很强的针对性、代码简洁且简单易学。
脚本语言,即脚本语言或其扩建的语言,又叫动态语言。是一种编程语言控制软件应用程序。它的执行独立于任何其他的应用。它可以不需要安装任何专门软件就可以在诸如WINDOWS中自带的记事本等文本编辑器中完成程序的开发。
报表模板、报表模板可以被认为是原始报表中的数据和模板报表布局之间的关联。模板中包含了基本结构,当相应字段被添加到报表时,可以相应的格式予以显示和格式化报表。报表模板实际上是通常的报表文件。这意味着你能够使用事实上任何的报表文件作为报表模板。模板能够被应用到其它报表,所以它们的格式化和布局能够用作其它报表的基础。把模板应用到其它报表,布局等格式化将被应用到报表。模板能够存储许多类型的对象。报表设计过程中的集中数据部分完成后,这些对象能够被应用到报表。这种方式可以节约大量的重复性劳动,有效的提高开发效率。
本发明公开了一种使用脚本语言的DSL生成报表的方法,以实现方便高效的生成表报。通过脚本语言编写专门用于生成报表的DSL,并采用模版报表的设计思路,从而使得报表的设计人员可以不用具备良好的编程能力的情况下,通过简单的学习后就可以使用诸如Windows中的记事本或Uedit编辑器等来编写简洁的代码来高效的完成报表的设计。本发明实施例中的脚本语言可以是JavaScript、VbScript、Ruby或Groovy等计算机脚本编程语言。图1为本发明实施例中所述方法的步骤流程图。以下根据图1所示并以Groovy脚本语言为例来说明本发明实施例方法的具体步骤:
步骤S11、定制报表指令,形成定制报表指令集。
本发明实施例使用脚本语言Groovy定制报表指令,根据要实现的报表特点,定制报表指令。再利用脚本语言Groovy将定制的报表指令加以封装,形成所需的报表指令集。
所述指令可以包括方法指令和属性指令对应。方法指令内可以包含子方法指令,而属性指令内不含任何子指令,属性指令可包含属性节点。
比如,在使用Groovy脚本语言为开发语言时,
方法指令可以归类如表1所示:
表1
方法指令名称 | 指令作用 |
report | 定义一张报表 |
data | 定义数据源 |
title | 定义报表标题区 |
table | 定义报表主体区 |
sumary | 定义报表汇总区 |
row | 定义报表的一行 |
style | 定义样式 |
init | 初始化指令 |
方法指令名称 | 指令作用 |
order | 排序指令 |
group | 分组指令 |
属性指令可以归类如表2所示:
表2
属性指令名称 | 所属方法指令 | 指令作用 |
create | report/table | 定义报表属性参数 |
id | data | 数据源名称 |
ds | data | 数据源标识 |
sql | data | sql语句 |
binding | table | 定义绑定区域 |
sortField | order | 排序字段 |
sortAscending | order | 是否为升序 |
groupField | group | 分组字段 |
header | group | 分组字段的组头行数 |
footer | group | 分组字段的组脚行数 |
cell | row | 报表单元格的内容 |
left | row | 报表单元格所在列 |
height | row | 报表单元格占的行数 |
width | row | 报表单元格占的列数 |
包含属性节点的属性指令可以如表3所示:
表3
步骤S12、编写定制模板报表,定义DSL模板报表。
根据不同类型的报表,例如固定行列报表、纵向扩展报表等具体报表类型,以及典型的应用场景形成报表指令文件,定义DSL模板报表。所述DSL模板报表覆盖各具体类型报表及其典型应用。通过定义能够被应用到其它报表的DSL模板报表,可以节约大量的重复性劳动,有效的提高开发效率。
以下为在使用Groovy脚本语言为开发语言时纵向报表DSL具体实现的实例:当只加入一个数据源,将数据源以报表形式展示时,可以用以下代码实现:
report{data{id′data1′ds′db1′sql′select*from schoolmates′}init{}} |
带排序及分组纵向报表可以用以下代码实现:
report{create title:′测试报表′,row:2,col:3data{id′data1′ds′db1′sql′select*from schoolmates′}table{create type:′vextend′,dataID:′data1′,top:1,left:1,height:2,width:3binding top:2,left:1,height:1,width:3order{sortField′F:id′sortAscending 0}group{groupField′F:city′,′F:name′}row{cell′学号′,′城市′,′姓名′}row{cell′F:id′,′F:city′,′F:name′}} |
init{}} |
步骤S13、解析DSL报表指令文件,并以报表形式展现。
解析DSL报表指令文件。参考所述DSL模板报表,完成编写报表指令文件后,就可以通过专门编写的解析程序自动化分析报表指令文件,并将分析后的结果以报表形式展现出来。
此外,本发明实施例还公开了一种使用脚本语言的DSL生成报表的系统,包括定制报表指令集形成装置,DSL模板报表定义装置2和DSL报表指令解析装置3。本发明实施例通过脚本语言编写专门用于开发报表的DSL,并采用模版报表的设计思路,从而使得报表的设计人员可以不用具备良好的编程能力的情况下,通过简单的学习后就可以使用诸如Windows中的记事本或Uedit编辑器等来编写简洁的代码来高效的完成报表的设计。本发明实施例中的脚本语言可以是JavaScript、VbScript、Ruby或Groovy等计算机脚本编程语言。图2为本发明实施例中所述系统的组成示意图。以下根据图2所示并以Groovy脚本语言为例来说明本发明实施例系统的具体结构:
定制报表指令集形成装置,DSL模板报表定义装置2和DSL报表指令解析装置3,
定制报表指令集形成装置1,用于使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;
本发明实施例中,所述定制报表指令集形成装置1使用脚本语言Groovy定制报表指令,根据要实现的报表特点,定制报表指令。再利用脚本语言Groovy将定制的报表指令加以封装,形成所需的报表指令集。
所述指令可以包括方法指令和属性指令对应。方法指令内可以包含子方法指令,而属性指令内不含任何子指令,属性指令可包含属性节点。
比如,在使用Groovy脚本语言为开发语言时,方法指令可以归类如表4所示:
表4
方法指令名称 | 指令作用 |
report | 定义一张报表 |
data | 定义数据源 |
title | 定义报表标题区 |
table | 定义报表主体区 |
sumary | 定义报表汇总区 |
方法指令名称 | 指令作用 |
row | 定义报表的一行 |
style | 定义样式 |
init | 初始化指令 |
order | 排序指令 |
group | 分组指令 |
属性指令可以归类如表5所示:
表5
属性指令名称 | 所属方法指令 | 指令作用 |
create | report/table | 定义报表属性参数 |
id | data | 数据源名称 |
ds | data | 数据源标识 |
sql | data | sql语句 |
binding | table | 定义绑定区域 |
sortField | order | 排序字段 |
sortAscending | order | 是否为升序 |
groupField | group | 分组字段 |
header | group | 分组字段的组头行数 |
footer | group | 分组字段的组脚行数 |
cell | row | 报表单元格的内容 |
left | row | 报表单元格所在列 |
height | row | 报表单元格占的行数 |
width | row | 报表单元格占的列数 |
包含属性节点的属性指令可以如表6所示:
表6
DSL模板报表定义装置2,用于使用脚本语言编写定制模板报表形成报表指令文件,定义DSL模板报表;
所述DSL模板报表定义装置2根据不同类型的报表,例如固定行列报表、纵向扩展报表等具体报表类型,以及典型的应用场景形成报表指令文件,定义DSL模板报表,所述DSL模板报表覆盖各具体类型报表及其典型应用。通过定义能够被应用到其它报表的DSL模板报表,可以节约大量的重复性劳动,有效的提高开发效率。
以下为在使用Groovy脚本语言为开发语言时纵向报表DSL具体实现的实例:
当只加入一个数据源,将数据源以报表形式展示时,可以用以下代码实现:
report{data{id′data1′ds′db1′sql′select*from schoolmates′} |
init{}} |
带排序及分组纵向报表可以用以下代码实现:
report{create title:′测试报表′,row:2,col:3data{id′data1′ds′db1′sql′select*from schoolmates′}table{create type:′vextend′,dataID:′data1′,top:1,left:1,height:2,width:3binding top:2,left:1,height:1,width:3order{sortField′F:id′sortAscending 0}group{groupField′F:city′,′F:name′}row{cell′学号′,′城市′,′姓名′}row{cell′F:id′,′F:city′,′F:name′}}init{}} |
DSL报表指令解析装置3,用于通过专门编写的解析程序自动化分析报表指令文件,并将分析后的结果以报表形式展现出来。
所述DSL报表指令解析装置3解析DSL报表指令文件。参考所述DSL模板报表,完成编写报表指令文件后,就可以通过专门编写的解析程序自动化分析报表指令文件,并将分析后的结果以报表形式展现出来。
需要说明的是,本技术领域人员可以理解,在本发明实施例中用于生成报表的脚本语言可以是除本发明实施例中所提供的几种脚本语言以外的其它类型的可以适用的脚本语言。在本发明实施例中用来生成报表的脚本语言所用到的编辑器也可以是除本发明实施例中所提供的几种脚本语言编辑器以外的其它类型的可以适用的脚本语言编辑器。
综上所述,在本发明实施例中,通过脚本语言编写专门用于生成报表的DSL,并采用模版报表的设计思路,从而使得报表的设计人员可以不用具备良好的编程能力的情况下,通过简单的学习后就可以用诸如Windows中的记事本或Uedit编辑器等来编写简洁的代码来高效的完成报表的设计。解决了现有技术中在处理简单报表以及格式相对固定的报表时,必须利用专门的软件来或利用WEB方式来设计报表模型生成报表,在需要转换报表类型时操作比较复杂,所以开发效率较低,重复性工作较多的技术问题。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种生成报表的方法,其特征在于,包括步骤:
使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;
为所需的各个类型报表及其典型应用编写DSL模板,所述DSL模板为通过脚本语言使用所述指令集中的指令编写形成的报表指令文件;
通过解析程序分析所需的DSL模板,以分析后的结果生成报表。
2.根据权利要求1所述方法,其特征在于,所述脚本语言为Groovy、JavaScript、Ruby或VbScript。
3.根据权利要求1或2中所述方法,其特征在于,所述脚本语言使用Uedit编辑器或Windows中的记事本程序作为编辑。
4.根据权利要求1或2中所述方法,其特征在于,所述定制报表指令包括方法指令和属性指令。
5.根据权利要求4所述方法,其特征在于,所述方法指令内包含子方法指令;所述属性指令包含属性节点。
6.一种生成报表的系统,其特征在于,包括
定制报表指令集形成装置,用于使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;
DSL模板报表定义装置,用于为所需的各个类型报表及其典型应用编写DSL模板,所述DSL模板为通过脚本语言使用所述指令集中的指令编写形成的报表指令文件;
DSL报表指令解析装置,用于通过解析程序分析所需的DSL模板,以分析后的结果生成报表。
7.根据权利要求6所述系统,其特征在于,所述脚本语言为Groovy、JavaScript、Ruby或VbScript。
8.根据权利要求6或7中所述系统,其特征在于,所述脚本语言使用Uedit编辑器或Windows中的记事本程序作为编辑。
9.根据权利要求6或7中所述系统,其特征在于,所述定制报表指令包括方法指令和属性指令。
10.根据权利要求9所述系统,其特征在于,所述方法指令内包含子方法指令;所述属性指令包含属性节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910249724A CN101706722A (zh) | 2009-12-01 | 2009-12-01 | 一种生成报表的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910249724A CN101706722A (zh) | 2009-12-01 | 2009-12-01 | 一种生成报表的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101706722A true CN101706722A (zh) | 2010-05-12 |
Family
ID=42376948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910249724A Pending CN101706722A (zh) | 2009-12-01 | 2009-12-01 | 一种生成报表的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101706722A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908039A (zh) * | 2010-06-29 | 2010-12-08 | 北京科技大学 | 一种报表模板定制系统 |
CN102955823A (zh) * | 2011-08-30 | 2013-03-06 | 方方 | 一种对电视节目评估调研样本数据的处理方法 |
CN104657138A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于脚本的报告生成系统及方法 |
CN108536660A (zh) * | 2018-04-03 | 2018-09-14 | 福建榕基软件工程有限公司 | 一种自定义报表的生成方法及终端 |
CN111027300A (zh) * | 2019-10-30 | 2020-04-17 | 厦门天锐科技股份有限公司 | 一种自定义生成报表的方法及装置 |
-
2009
- 2009-12-01 CN CN200910249724A patent/CN101706722A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908039A (zh) * | 2010-06-29 | 2010-12-08 | 北京科技大学 | 一种报表模板定制系统 |
CN101908039B (zh) * | 2010-06-29 | 2011-11-16 | 北京科技大学 | 一种报表模板定制系统 |
CN102955823A (zh) * | 2011-08-30 | 2013-03-06 | 方方 | 一种对电视节目评估调研样本数据的处理方法 |
CN102955823B (zh) * | 2011-08-30 | 2016-01-20 | 方方 | 一种对电视节目评估调研样本数据的处理方法 |
CN104657138A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于脚本的报告生成系统及方法 |
CN108536660A (zh) * | 2018-04-03 | 2018-09-14 | 福建榕基软件工程有限公司 | 一种自定义报表的生成方法及终端 |
CN108536660B (zh) * | 2018-04-03 | 2023-08-04 | 福建榕基软件工程有限公司 | 一种自定义报表的生成方法及终端 |
CN111027300A (zh) * | 2019-10-30 | 2020-04-17 | 厦门天锐科技股份有限公司 | 一种自定义生成报表的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101122899B (zh) | 报表的生成方法和设备 | |
CN101025738B (zh) | 一种免模板动态网站生成方法 | |
CN112181416A (zh) | 一种从视觉稿直接生成ui代码的方法及装置 | |
CN104571977A (zh) | 基于html模板的报表打印方法及系统 | |
CN106293664A (zh) | 代码生成方法及装置 | |
CN101706722A (zh) | 一种生成报表的方法及系统 | |
CN102637184A (zh) | 用于定制网页的方法和系统 | |
CN104133772A (zh) | 一种自动生成测试数据的方法 | |
CN107423061A (zh) | 一种基于ison数据的表单生成方法 | |
CN103955366A (zh) | 一种可视化网站模版的制作方法 | |
CN102609252A (zh) | 基于测量仪器的逻辑菜单资源智能配置方法 | |
CN102360296A (zh) | 一种基于web的在线表单开发工具 | |
CN105045775A (zh) | 一种指定格式的Excel文档生成方法及装置 | |
CN104298725A (zh) | 在线课件开发系统一次性编辑输入多版本输出的方法 | |
CN105809375A (zh) | 一种扩展表单设计集成方法 | |
CN102306102A (zh) | 程序文件自动生成方法及装置 | |
CN103823793A (zh) | 基于Excel模板的动态报表实现方法 | |
CN105975466A (zh) | 一种面向短新闻的机器写稿方法及装置 | |
CN104615431A (zh) | 一种Web应用的实现方法和装置 | |
CN105183450A (zh) | 一种前后台分离的电子政务表单模型配置化系统 | |
CN108647019B (zh) | 一种服务组合的控制层编码方法 | |
CN103309849B (zh) | 一种基于OpenXML的docx文档创建和修改方法 | |
CN104572744A (zh) | 结构化文档生成方法和装置 | |
CN116579316A (zh) | 一种文档模板化生成的方法 | |
CN107085641A (zh) | 一种Allegro软件中快速定位铜皮void的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100512 |