一种生成报表的方法及系统的制作方法

文档序号:6585757阅读:160来源:国知局

专利名称::一种生成报表的方法及系统的制作方法
技术领域
:本发明涉及计算机软件领域,更具体地说,涉及一种生成报表的方法及系统。
背景技术
:目前报表生成所采用的技术,均为界面设计,首先根据所要设计报表的特点,选择不同的报表类型,进行一些初始化设置;然后利用报表软件提供的界面,设计报表模型。在现有技术的方案中采用界面设计报表模型,再加载报表模型,展现出实际的报表。比如现有技术的方案中采用类似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(domainspecificlanguage),即领域专用语言,其基本思想是求专不求全,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。它是具有针对某一领域的特点量身定制的用来完成特定功能的一种编程语言。其特点是其功能具有很强的针对性、代码简洁且简单易学。脚本语言,即脚本语言或其扩建的语言,又叫动态语言。是一种编程语言控制软件应用程序。它的执行独立于任何其他的应用。它可以不需要安装任何专门软件就可以在诸4如WINDOWS中自带的记事本等文本编辑器中完成程序的开发。报表模板、报表模板可以被认为是原始报表中的数据和模板报表布局之间的关联。模板中包含了基本结构,当相应字段被添加到报表时,可以相应的格式予以显示和格式化报表。报表模板实际上是通常的报表文件。这意味着你能够使用事实上任何的报表文件作为报表模板。模板能够被应用到其它报表,所以它们的格式化和布局能够用作其它报表的基础。把模板应用到其它报表,布局等格式化将被应用到报表。模板能够存储许多类型的对象。报表设计过程中的集中数据部分完成后,这些对象能够被应用到报表。这种方式可以节约大量的重复性劳动,有效的提高开发效率。本发明公开了一种使用脚本语言的DSL生成报表的方法,以实现方便高效的生成表报。通过脚本语言编写专门用于生成报表的DSL,并采用模版报表的设计思路,从而使得报表的设计人员可以不用具备良好的编程能力的情况下,通过简单的学习后就可以使用诸如Windows中的记事本或Uedit编辑器等来编写简洁的代码来高效的完成报表的设计。本发明实施例中的脚本语言可以是JavaScript、VbScript、Ruby或Groovy等计算机脚本编程语言。图1为本发明实施例中所述方法的步骤流程图。以下根据图1所示并以Groovy脚本语言为例来说明本发明实施例方法的具体步骤步骤Sll、定制报表指令,形成定制报表指令集。本发明实施例使用脚本语言Groovy定制报表指令,根据要实现的报表特点,定制报表指令。再利用脚本语言Groovy将定制的报表指令加以封装,形成所需的报表指令集。所述指令可以包括方法指令和属性指令对应。方法指令内可以包含子方法指令,而属性指令内不含任何子指令,属性指令可包含属性节点。比如,在使用Groovy脚本语言为开发语言时,方法指令可以归类如表1所示表1<table>tableseeoriginaldocumentpage5</column></row><table>方法指令名称指令作用order排序指令group分组指令属性指令可以归类如表2所示表2属性指令名称所属方法指令指令作用createreport/table定义报表属性参数iddata数据源名称dsdata数据源标识sqldatasql语句bindingtable定义绑定区域sortFieldorder排序字段sortAscendingorder是否为升序groupFieldgroup分组字段headergroup分组字段的组头行数footergroup分组字段的组脚行数cellrow报表单元格的内容leftrow报表单元格所在列heightrow报表单元格占的行数widthrow报表单元格占的列数包含属性节点的属性指令可以如表3所示表36<table>tableseeoriginaldocumentpage7</column></row><table>复性劳动,有效的提高开发效率。以下为在使用Groovy脚本语言为开发语言时纵向报表DSL具体实现的实例当只加入一个数据源,将数据源以报表形式展示时,可以用以下代码实现report{data{id'datal'ds'dbl'sql'select衬romschoolmates'initU带排序及分组纵向报表可以用以下代码实现report{createtitle:'测试报表',row:2,col:3data{id'cktel'ds'dbl'sql'select*fromschoolmates'table{createtype:'vextend',dataID:'datal',top:1,left:1,height:2,width:3bindingtop:2,left:1,height:1,width:3order{sortField'F:icTsortAscendingOgroup{groupField'F:city','F:name'row{cell'学号','城市','姓名'row{cell'F:icT,'F:city','F:name'8init{}步骤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<table>tableseeoriginaldocumentpage9</column></row><table>方法指令名称指令作用row定义报表的一行style定义样式init初始化指令order排序指令group分组指令属性指令可以归类如表5所示表5属性指令名称所属方法指令指令作用createreport/table定义报表属性参数iddata数据源名称dsdata数据源标识sqldatasql语句bindingtable定义绑定区域sortFieldorder排序字段sortAscendingorder是否为升序groupFieldgroup分组字段headergroup分组字段的组头行数footergroup分组字段的组脚行数cellrow报表单元格的内容leftrow报表单元格所在列heightrow报表单元格占的行数widthrow报表单元格占的列数10包含属性节点的属性指令可以如表6所示表6属性指令名称所属方法指令属性节点名称属性节点作用title报表名称type报表类型encoding编码才各式creat6reportrow报表占的行数col报表占的列数height行高width列宽createtabletype子表类型style子表扩展方式,仅用于固定行列报表dataID引用数据源的名称top子表起始行left子表起始列height子表共占的行数width子表共占的列数top绑定区域起始行bindingtableleft绑定区域起始列height绑定区域占的行数width绑定区域占的列数11DSL模板报表定义装置2,用于使用脚本语言编写定制模板报表形成报表指令文件,定义DSL模板报表;所述DSL模板报表定义装置2根据不同类型的报表,例如固定行列报表、纵向扩展报表等具体报表类型,以及典型的应用场景形成报表指令文件,定义DSL模板报表,所述DSL模板报表覆盖各具体类型报表及其典型应用。通过定义能够被应用到其它报表的DSL模板报表,可以节约大量的重复性劳动,有效的提高开发效率。以下为在使用Groovy脚本语言为开发语言时纵向报表DSL具体实现的实例当只加入一个数据源,将数据源以报表形式展示时,可以用以下代码实现report{data{id'datal'ds'dbl'sql'select衬romschoolmates'initU带排序及分组纵向报表可以用以下代码实现12report{createtitle:'测i式手艮表',row:2,col:3data{id'cktel'ds'dbl'sql'select*fromschoolmates'table{createtype:'vextend',dataID:'datal',top:1,left:1,height:2,width:3bindingtop:2,left:1,height:1,width:3order{sortField'F:id'sortAscendingOgroup{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方式来设计报表模型生成报表,在需要转换报表类型时操作比较复杂,所以开发效率较低,重复性工作较多的技术问题。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。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所述系统,其特征在于,所述方法指令内包含子方法指令;所述属性指令包含属性节点。全文摘要本发明实施例公开了一种使用脚本语言生成报表的方法及系统,包括步骤使用脚本语言定制报表指令并将所述定制报表指令加以封装,形成定制报表指令集;使用脚本语言编写定制模板报表,定义DSL模板报表;解析DSL报表指令文件,通过专门编写的解析程序自动化分析报表指令文件,并将分析后的结果以报表形式展现出来。本发明实施例中的技术方案不必利用专门的软件来或利用WEB方式来设计报表模型开发报表,而且在需要转换报表类型时操作简单,从而开发效率高,重复性工作少。文档编号G06F9/44GK101706722SQ20091024972公开日2010年5月12日申请日期2009年12月1日优先权日2009年12月1日发明者车帅,陈军营申请人:山东中创软件工程股份有限公司;山东中创软件商用中间件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1