




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
作者:ajun版本:2006-11-10 1.0一 Excel Report简介:21.1 什么是Excel Report?21.2 它具有那些功能?21.3 Excel Report的灵活性:21.4 它与普通报表工具的区别:3二 体验生成一个简单报表的制作过程:32.1 运行环境配置32.2 开始制作一个简单的报表4三 ReportConfig.xml配置43.1 设计一个报表需要配置那些信息?53.2 datasource 节点53.3 report节点73.4 配置文件配置信息规范建议9四 报表模板文件配置94.1 报表模板中的基本元素104.2 Excel Report模板文件的构成124.3 报表模板配置规范建议164.4 格式化输出控制164.5 通过$V(Excel函数模板)来使用excel的函数174.6 示例:184.7 常见问题:18五 设计报表嵌入对象185.1 为什么需要设计报表嵌入对象?185.2 我们可以在嵌入对象里面做些什么?195.3 一个嵌入对象实例:19六 使用Excel Report的高级特性:196.1 扩充你自己的数据源。196.2 使用变量别名。196.3 设计模板是使用$V调用excel函数时的注意事项。196.4 在web容器中配置Excel Report(ExcelReportServlet)206.5 在非web容器环境下使用excel report.20七 一个完整的报表示例:207.1 配置reportConfig.xml207.2 配置模板文件207.3 设计嵌入对象20结束语:20一 Excel Report简介:1.1 什么是Excel Report?Excel Report是一款基于Excel的报表生成工具,它通过用户定义报表模板文件,定义数据源,并配置相应的配置文件,就可以通过页面向指定Servlet请求输出报表,其生成的报表是一个excel文件。通过模板文件的方式来生成Excel文件,可以让程序员从生成特定格式的Excel文件的输出格式控制以及Excel文件读写等纷繁复杂而又容易出错的细节中解放出来,使得程序员只需组装自己的数据源,而根本不需要关心如何去生成Excel文件,如何去控制最终的文件输出效果等细节,从而大大减轻了制作一个Excel报表的工作量,并增强了程序的可维护性,因为很多的报表的修改只需通过模板文件的修改就可以实现,而无需改动程序。同时该报表工具又提供一些灵活的特性来使得用户可以自由控制报表的输出过程。1.2 它具有那些功能?1. 卡片式报表的支持。 2. 列表式报表的支持。3. 主从式报表的支持。4. 分组式报表的支持。(注:主从式和分组式之间可以任意嵌套,即一个主从式报表中我们可以嵌套一个分组从而实现对主记录或从记录进行分组的功能,反之也如此。)5. 格式化的数据输出,该报表工具支持所有Excel的格式化输出控制。6. 支持所有Excel的函数。1.3 Excel Report的灵活性:3.1 数据源的自定义:用户可以自己定义数据源以替代默认实现,例如,我们可以编写一个自己的数据库数据源,通过定义该数据源我们可以利用现有系统的数据库连接及数据检索框架等。3.2 嵌入报表数据处理类:用户可以嵌入自己报表数据处理类(通过配置文件配置),通过嵌入用户自己的报表数据处理类,报表工具给用户提供了一个入口让用户参与报表的生成过程。比如,用户可以在生成报表前来组合自己的数据源,在这里用户完全可以充分利用现有系统的相关业务类来生成自己的数据源。3.3 插入查询监听器:用户可以插入自己的查询监听器,通过监听数据源的查询请求来做相关数据的检索及处理等工作(该功能在主从报表中尤其有用)。3.4 插入字段监听器:通过插入字段监听器,使得用户可以参与报表的输出过程,控制报表的具体输出的数据。(对于数据库自动检索数据类数据源的应用场合尤其有用)这些特性在后面的章节我们会做详细的介绍。1.4 它与普通报表工具的区别:4.1 Excel Report是一个完全基于excel的报表工具,其最大的特点是完全依赖于excel。这是其于其他任何报表工具的最大区别。4.2 通过依赖于Excel它具备了以下优点:A. 省略了专门的报表模板定义工具,应为该工具就是Excel本身,相信Excel的强大功能可以胜过任何其他报表工具模板定义工具。B. 可以充分利用Excel的强大功能,如Excel函数库及其相关的脚本技术,Excel的图表(暂未提供支持)以及其对打印功能的强大控制能力。二 体验生成一个简单报表的制作过程: 计算机世界里面大多数语言类的教程,在起始部分都会有一个经典的Hello World小程序,作为整个书的开篇,当然这样一个用例放在全文的开始,一来可以使读者可以快速的感受下所学东西的功能,二来也可以让读者快速上手,通过成功运行一个简单例子,而获得一定的成就感,从而增强继续学习下去的信心。 在这里我们也不想免俗,让大家感受一下,制作一个Excel报表是多么的简单。当然在开始这个简单例子之前,一些必要的环境必须得提前准备好。(注:你可以在example/tomcat5.0下找到一个已经配置好的基于tomcat5.0的web应用。可以把它直接拷贝到本地的tomcat应用目录下运行例子程序)本手册只针对ExcelReport的功能及其使用方法进行介绍,并未涉及报表制作相关的知识说明,因此在阅读此文档前必须要求读者具备一定报表制作相关的基础知识,且具备一定报表制作的经验,并了解普通报表设计的一般流程。2.1 运行环境配置首先你得准备一个WEB服务器(推荐用Tomcat5.0),1. 拷贝exampletomcat5.0目录下的excelreport.xml文件到你的TOMCAT_HOME confCatalinalocalhost目录下2. 拷贝exampletomcat5.0 excelreport目录到你的TOMCAT_HOMEwebapps目录下3启动数据库找到TOMCAT_HOMEwebappsexcelreportdababaseserver.bat,双击该文件启动HSQL数据库服务器。(Windows环境)4. 拷贝excelreport对应的运行库文件到目录:TOMCAT_HOMEwebappsexcelreportWEB-INFlib5. 拷贝TOMCAT_HOMEwebappsexcelreportdababase hsqldb.jar到TOMCAT_HOMEcommonlib目录下截止到目前,运行环境已经搭建完成。2.2 开始制作一个简单的报表1 配置ReportConfig.xml在我们example例子数据库中已经存在一个user的表。在配置文件中加入下面配置信息:2 配置helloworld.xls模板文件如图红线圈住地方配置你的数据集字段要输出的位置。初接触配置文件会比较麻烦,因为配置的信息比较多,在后续的章节我们会详细介绍具体每个配置信息的具体功能。为了避免出现不必要的错误,你最好从例子附带的模板文件拷贝配置信息。这样可以减少不必要的失误带来的麻烦。3 启动tomcat服务器4 请求报表:http:/localhost:8080/excelreport/report?report=helloworld具体信息可以根据你web服务器的具体配置做相应调整。如果能看到文件下载对话框,那么恭喜你,第一个例子程序运行成功了。三 ReportConfig.xml配置在上一章节我们来快速地体验了一下Excel Report的具体功能,从这样一个简单的报表当中相信你也应该能体验到Excel Report的真正功能:通过分离报表数据和报表生成逻辑,使得程序员可以不用关心报表的具体如何生成,而只要准备自己的数据源和模板文件,仅此而已。这能给我们的程序带来什么样的好处呢?它能为我们的程序带来更好的灵活性和可维护性。我们可以很方便地通过更改模板文件来更改报表的具体输出效果,而这一过程可以做到尽可能小的影响到数据源的相关业务逻辑。你再也看不到业务数据相关的代码和excel文件生成的代码交叉在一起的痛苦场面了,当然你也再也不需要去写那些麻烦的Excel输出格式控制的代码了。我们在上一章节Hello World Report例子里面其中很关键得一步就是配置一个ReportConfig.xml的配置文件(注意:这个文件名称本身也是可配置的),在该配置文件里面我们配置了datasource和report两个节点,接下来的这一章节我们就来详细介绍该配置信息的具体功能和配置项的具体使用方法。3.1 设计一个报表需要配置那些信息?相信每一个刚接触到这个工具的人头脑里面都会问的一个问题,当然这要看,不同的报表有不同的实现(废话:),但不管什么报表有两个配置项目是必不可少的,datasource和report。其中detasource是用来描述一个数据源的信息,由它来告诉报表工具如何去生成一个具体的数据源对象实例,我们在这个配置项你们需要回答报表工具以下几个问题:1我需要一个什么类型的数据源?2这个数据源如何取数据(取决于1)。3数据源应该接收那些输入参数?(可选)4数据源有那些字段?字段的类型是什么等等。(可选)5如果是database型的数据源的话,查询的sql是什么?Report是用来告诉报表生成工具,生成一个报表需要用到那些资源?从那去取?比如:报表模板文件名称,报表中用到的数据源名称等等信息。报表生成工具通过这些配置信息,去取得相应的资源,并生成用户想要的报表文件。3.2 datasource 节点上面我们说过datasource是用来描述一个数据源,该节点定义一个全局的数据源信息,当定义好一个全局的数据源之后,就可以在我们具体的报表里面应用该数据源。在详细介绍该节点配置信息之前,我们看一个比较典型的实例,参照该实例来具体介绍一个数据源的配置信息需要使用到那些配置项目,他们具体的意思是什么?下面是一个数据源的配置信息实例:=arg1 and VSVWPARTSID <= arg2/1Datasource节点有两个属性,name和typeName:用来标识当前定义的datasource名称,在其他地方通过该名称来引用该数据源。Type:有两种类型database和static(注意区分大小写),前者(type=” database”)表示当前数据源是数据库自动检索类型的数据源(该类数据源用户只需配置sql语句和参数,数据源会自动从数据库检索数据;后者(type=” static”)表示当前数据源是一个静态的数据源,(该类数据源数据需要使用者在代码里面手动填入)2Sql子节点: 该节点只有在type=” database”类型的数据源中配置有效,Value:配置一条sql语句,在数据源去自动检索数据时会调用该sql查询数据。并将查询结果填到数据源记录集中。3Field子节点: 该节点描述一个字段的具体类型,一旦在数据源里面将一个字段设置为制定类型后,报表工具在将该字段值写入到excel文件前会将该值转化为用户配置的字段类型。然后根据该类型再写相应的excel单元格。这个属性主要是用在格式化输出上,比如我们要格式化一个日期型的输出,假设我们从数据库中检索出来的字段值是一个字符串型的日期,那么我们就可以在数据源中配置field子节点,将该字段强制设置成java.util.Date类型,这样报表工具会自动将该字符串转化成日期型并写入到excel文件中去,这样就可以在生成的excel文件中看到格式化的日期输出效果了。(注:当然你必须也要在excel的模板文件中配置该模板字段的格式化日期输出格式)Name:字段名称,表示当前配置数据源中的那个字段。Type:字段对应的数据类型,它主要有以下几种类型:类型说明对应Excel类型java.lang.Integer对应于java中的IntegerNumber类型java.lang.Byte对应于java中的Bytejava.lang.Double对应于java中的Doublejava.lang.Float对应于java中的Floatjava.lang.Long对应于java中的Longjava.lang.Short对应于java中的Shortjava.lang.String对应于java中的String字符型java.lang.Boolean对应于java中的Booleanjava.util.Date对应于java中的Date日期型4Parameter子节点:该节点用来配置数据源输入参数,一个数据源当需要检索数据时它可能需要一些输入参数,该参数用来告诉数据源应该去检索那些数据。例如在database类型的数据源中我们sql语句可能需要相应的检索条件,该检索条件的值就可以通过定义数据源参数的形式来与相应的sql语句关联起来。当然该参数也可以运用在static类型的数据源中。Name:参数名称【Type】:表示参数的类型,可以参考field子节点的type类型定义。3.3 report节点在第一节中我们曾提到过一个report节点是用来配置一个报表相关的资源信息,该节点是报表配置信息中非常关键的一步,同样在我们介绍该节点配置信息之前我们先看一个比较典型的配置范例:1Report节点也有两个属性:Name:表示当前配置的report的名称,该名称也是在请求输出一个报表时传入的报表名称。Templetfile:表示当前报表对应模板文件,该文件的路径在系统当前路径或设定的配置文件路径下。(可以通过配置,设定模板文件的一个公共目录,这样系统查找所有的模板文件都会去该目录下读取)2EmbeddedObject子节点:该节点定义当前报表的入口处理类,该类是在生成报表初期,报表工具会调用该节点配置的嵌入类信息,并生成相应对象实例,同时调用该对象的execute函数来只需一些用户定制的代码。通过这个节点配置信息,给用户在报表生成的初期,让用户有机会参与报表数据生成的过程。相信使用过Struts的朋友都知道使用struts是该节点的详细信息可以参考 设计嵌入对象一节。Name:标识当前嵌入对象实例名称。Class:标识嵌入对象类全名,该名称是一个包含包路径信息的完整类名描述。注意:embeddedObject子节点在一个报表配置节点中只能出现一次。3Sheet子节点:Sheet子节点用来配置一个excel报表文件的具体sheet对应的报表信息。注意excel report报表生成工具是依照excel文件格式来生成报表输出数据,因此一个报表文件可以看成是由多个sheet只报表页面组成的一个报表集合。其中每个sheet才真正对应了一个具体子报表的输出单元。Name:该属性用于指定输出报表文件的sheet名称,当然该名称必须与对应模板文件中的sheet名称一致,在实际的配置过程当中要注意大小写的问题。index:该属性原来是打算用于name属性的一个补充,但目前还没启用,可以不配置。reportstyle:指定当前sheet页对应的报表风格。可以指定的列表风格有以下几种:风格名称说明card标识当前输出报表是一个卡片风格的报表,卡片风格的报表就是整个报表输出结果类似于一张卡片,其中只有一些固定项目的内容需填充在卡片报表的具体位置,且结果集都只有一条记录。(真正的卡片式报表的风格可能还不一定只有一条记录数据,该处还有待继续完善)list列表风格的报表:是整个报表工具中最常用的一种风格(几乎是目前唯一比较实用的一种风格),该风格的报表,报表的数据行数是根据结果集的记录数,并根据不同的模板定义,产生处不同的纵向行扩展的报表输出效果。(详细信息可以参考模板定义一章)cross(暂未实现)交叉风格的报表:该类报表是一种比较复杂的报表,其列和行的数据都是根据数据集来动态生成,并且配合一定的统计计算,可以生成一些非常复杂的报表。datasource子节点:该节点用来配置当前sheet报表中使用的数据源实例,它与上节datasource配置信息关系类似于类与对象的关系。全局的datasource定义了一个数据源,而本节点则定义了该数据源的一个具体实例。全局的数据源是可以给所有报表公用的,但数据源实例只存在于当前报表中。name:数据源实例名称;在报表模板中如果需要使用数据源,则通过该名称来引用。source:当前数据源实例引用的数据源。指定一个数据源名称,该名称在一个全局datasource中定义的名称。(参考datasource节点说明一节)注:在一个sheet报表中,可以定义多个datasource子节点。group子节点:一个goup子节点用于定义一个分组信息,分组可以结合分组模板定义,用来控制报表输出一个分组效果的报表。name:分组名称,在模板文件中定义一个分组时需要使用该名称来引用一个分组。groupby:定义分组字段,如果有多个字段则各字段间用逗号(,)分割。dataSource:应用的datasource实例名称。(注意这里不是全局的datashouce)注:1 在使用group分组功能时,首先必须保证结果集中的数据集已经按照分组定义的字段顺序存放。在报表输出过程中报表工具只对输出的数据进行分组控制,但对数据源的数据本身不会进行分组。比如,在一条分组数据中,如果要产生正确的分组效果,数据源对应的sql语句必须通过order by 先对数据进行分组,这样就可以保证产生的数据已经按照需要分组的要求顺序排列在数据源中。2 group节点可以定义多个。3.4 配置文件配置信息规范建议四 报表模板文件配置在我们制作一个报表的过程当中,其中很关键的一步就是配置报表的模板文件,通过前面的介绍我们知道,一个报表模板文件它决定了整个报表的输出格式,数据的显示方式,以及数据的格式化输出控制等信息,可以这么说,你的报表做的好不好看,符不符合用户的要求全在它了。在我们详细介绍Excel Report报表模板定义信息之前,让我们先了解一下做一个普通报表所要接触到的一些基本的概念。当然这些基本的概念/规则同样适用于其它的报表工具。如果你之前有过报表制作经历的话,相信这些概念对你来说都不陌生。我们知道任何报表工具其最终都是由一些标题、字段项描述和具体数据等基本元素构成。其中数据元素有些可能是原始的业务数据,我们可能通过一定的抽取规则取得,比如通过查询条件查询符合特定条件的数据;也有一些统计类的数据元素,这类数据我们一般是通过一定的计算规则计算取得;当然除此之外还有一些如表头(整个报表的开始部分),表尾(整个报表的结尾部分,页头(每个页的开始部分)页尾(每个页的结尾部分),组头组尾,数据区(band)头数据区(band)尾等这样一些在所有报表制作过程当中比较常用到的概念,接下来我们就来详细介绍一下这些在报表制作过程当中可能会用到的一些基本元素及其各自在报表模板文件中所代表的意思:表头:整个报表的开始部分(或叫区域,下同)。表尾:整个报表的结束部分。页头:每个分页的开始部分。页尾:每个分页的结尾部分。组头:每个数据分组的开始部分。(什么是组?在4.2我们会详细介绍)组数据区:每个组数据输出部分。组尾:每个数据分组的结尾部分。band数据区头:每个band数据区开始部分。(什么是band?在4.2我们会详细介绍)band数据区:每个band数据区数据输出部分。band数据区尾:每个band数据区结束部分。在上述报表的基本元素中,组和band是两个比较特殊,也非常常用的元素。由于他们本身比较灵活,因此你需要在你的报表设计过程当中需小心谨慎地使用它们,通过一些巧妙的模板定义你也可以构建出一些特殊效果的报表。当然不同的报表工具可能对这些概念的命名和具体规定的细则不定相同,但其基本的原理还是一致的。接下来的一节我们会详细介绍应该如何将这样一些基本的报表元素放在一个Excel Report报表模板中去。4.1 报表模板中的基本元素在本章的开头部分我们大致了解了在制作一个报表的过程当中,可能会使用到的一些基本的概念,接下来的这一节我们会详细介绍这些基本元素应该如何应用到我们的Excel Report模板文件中去。下面我们列出一个表格,该表格详细说明了Excel Report中所用到的所有模板配置过程当中用到的基本报表元素:基本元素Excel Report对应定义规则详细说明表头任何band或组定义的开始之前的区域在Excel Report工具中考虑到模板设置的简化,因此没有去设定专门定义表头开始区域的模板定义元素,而是将所有band或组定义之前的所有区域都自动认为是报表的表头部分。表尾任何band或组定义结束之后的区域同上页头无通过excel自己的分页功能来实现页尾无通过excel自己的分页功能来实现组头$G property=head 定义行$G property=body 定义行之间的区域在Excel Report工具中定义一个组都是通过设定$G开头,并以结尾的单元格来标识一个组模板定义信息。组模板定义有几个属性值必须指定:Name:标识当前组名称Property:标识当前组定义区域,有四个可选值(head-组头,body-组数据区,foot-组结尾,end-组定义结束 注:该属性值是有顺序的,模板的定义必须是head-body-foot-end否则系统会仍出无效的模板定义的异常信息出来)dataSource:定义当前分组的数据源。组数据区$Gproperty=body 到$Gproperty= foot之间的区域同上组尾$Gproperty=foot到$Gproperty=end之间的区域同上band头$Bproperty=head到$Bproperty=body定义行之间的区域类似于分组定义,声明一个band通过设定$B开头,并以结尾的单元格来标识一个band模板定义信息。Band的模板定义同样也有几个属性值必须指定:Name:标识当前band名称Property:标识当前band定义区域,有四个可选值(head-band头,body-band数据区,foot-band结尾,end-band数据区定义结束。注:该属性值是有顺序的,模板的定义必须是以head-body-foot-end的顺序来定义,否则系统解析模板时会抛出无效的模板定义的异常)dataSource:定义当前band对应的数据源band数据区$Bproperty=body到$Bproperty=foot之间的区域同上band尾$Bproperty=foot到$Bproperty=end之间的区域同上其它Excel Report模板定义元素:Excel Report模板元素说明$PparameterName参数变量模板元素该语法用来定义一个参数变量模板元素。一个参数变量模板元素,表示当前模板定义所在的单元格的内容在生成报表过程中,报表生成工具会取参数变量模板元素定义的参数值来替代。(参数名称:由parameterName指定)$FdatasourceName.fieldName字段变量模板元素该语法用来定义一个字段变量模板元素。字段变量模板元素表示:该模板的实际值是根据运行期数据源(datasourceName指定引用的数据源)中的实际字段(fieldName指定数据源中的字段名称)值。报表工具在实际生成报表过程当中,会在字段变量模板位置的单元格写入该数据源实例对象对应字段的实际值。$VvaribleName变量模板元素该语法有两层含义,用于不用的地方。1 用来在报表中使用Excel原生的函数。我们可以通过$VExcel Function(.)的形式来声明一个模板元素,该元素在生成报表时会输出用户配置的Excel 函数。(详细见4.5)2 用来引用另外一个变量。$S用来定义在模板对应位置输出一个字符串,在该模板变量里面可以嵌入其它模板元素如( $F, $P, $V ) 比如:定义$SHello: $Fds.userName 假设$Fds.userName当前值为excelReport : 该模板运行后的输出效果: Hello: excelReport$R注意:在使用$V模板元素时,当该元素应用或使用其他字段值或变量,必须要求该变量在定义该模板元素之前就已经存在。否则系统会无法引用该变量。(就是要注意顺序问题,在引用一个变量的值时,该变量必须已经定义/存在。)4.2 Excel Report模板文件的构成在上面一节我们了解了在一个报表模板文件中可能会用到的模板元素,接下来我们从整个报表模板文件的整体布局来介绍,那些部分该放那些模板元素,应该放什么样的模板元素。这些问题都会在我们这一小节一一讲解。然而由于不同风格的报表其模板配置的布局也不尽相同,因此在下面的介绍中我们通过不同的报表的类型来分别介绍。1 卡片式报表在目前系统提供的卡片式报表中,整个报表就一个区(卡片内容区域),你可以认为它没有什么表头,表尾的概念,因为它整个报表就一张静态的卡片,在这个卡片区域内我们可以放入:( $P, $F, $V )这样一些模板元素。之所以定义卡片风格的报表,是因为该类型的报表要比列表式报表生成的速度更快,因为它模板定义和解析都非常简单。(需要注意的是,在卡片式风格的报表中不能定义$B或$G这样的模板配置元素,因为该类风格的报表在模板分析时会忽略该信息)2 列表式风格报表列表式风格的报表是我们平常应用最多的一种类型的报表,在该类报表的模板配置文件中一般可以由以下几个区域组成:表头区,表尾区,表数据区,band数据区,组数据区。整个报表模板文件分区: 整个模板文件可以分为三个大的区域:包含表头区,报表数据区(band数据区,注意不能是组数据区),表结尾区。如下图:图4.1下面来详细介绍每个区域的划分规则和作用。表头区:(如图4.1 1所示区域)区域边界定义:在任何一个$B模板元素定义前的那部分区域。可用模板定义元素: $P, $F, $V区域输出规则: 这部分区域在整个报表生成过程中都只输出一次。且放在整个生成报表文件的最开始部分。报表数据区(band数据区):(如图4.1 2所示区域)区域边界定义:在模板文件第一个出现$B模板定义元素的位置作为开始行,到最后一个$B模板定义元素的位置作为结束行,在开始和结束行之间的这段区域都作为报表数据区。可用模板定义元素:$B区域输出规则:这部分区域取决于$B(band数据区)的相应输出规则。表结尾区:(如图4.1 3所示区域)边界:最后一个$B定义结束位置,到整个模板文件的结尾部分。可用模板定义元素:$P, $F, $V区域输出规则:这部分区域在整个报表生成过程中都只输出一次。且放在整个生成报表文件的结尾部分。band数据区:band数据区模板定义规则:$Bname=band1;property=head;dataSource=ds$Bname=band1;property=body$Bname=band1;property=foot$Bname=band1;property=end任何一个band的定义都必须由上述几部分模板单元组成,其中:name:标识当前band名称,模板分析时会根据该名称来检查当前band定义是否正确结束(通过查找head-body-foot-end)。property:标识当前模板元素是属于当前band的那部分。该属性有四个值可供选择(head,body,foot,end),且必须遵循从上到下head-body-foot-end。否则系统会认为当前组的模板定义不合法。datasource:定义当前band引用的数据源,该数据源需要在报表配置文件(ReportConfig.xml)中配置。详细说明:band数据区也分为三个区域,这三个区域由四个标记属性来描述,它们分别是:(property=head,property=body,property=foot,property=end),由这四个属性值来表示band数据区头,band数据区,band数据区尾。如下图:图4.2band数据区头: (如图4.2 1所示区域)区域边界定义:同一个band(根据band的name属性来区分)的property=head到property=body元素定义之间的区域为当前band的数据区头。(如图4.2 1所示区域)可用模板定义元素:$B, $P, $F, $V。也就是说在band的头部可以嵌入band,组,以及其他的模板定义元素。区域输出规则: band数据区头对应的区域在每次输出该band时都会输出一次。band数据区:(如图4.2 2所示区域)区域边界定义:同一个band(根据band的name属性来区分)的property=body到property=foot元素定义之间的区域为当前band的数据区。(如图4.2 2所示区域) 。可用模板定义元素:$B, $G, $P, $F, $V。区域输出规则:band数据区的输出次数是根据band模板datasource属性值对应的数据源实例记录集条数来决定的。该数据源有多少条记录,该区域就会被重复输出多少次。band数据区尾:(如图4.2 3所示区域)区域边界定义:同一个band(根据band的name属性来区分)的property=foot到property=end元素定义之间的区域为当前band的数据区尾。(如图4.2 3所示区域) 。可用模板定义元素:$B, $P, $F, $V。区域输出规则:每输出一个band,在其band结尾部分都会输出band数据区尾对应区域的区域。band数据区的功能实际上就是将按照band数据区模板定义的输出格式将band对应数据源的所有记录输出到报表的指定位置。组数据区:组数据区模板定义规则:$Gname=group; property=head; dataSource=groupDs$Gname=group; property=body$Gname=group; property=foot$Gname=group; property=end任何一个分组的定义都必须由上述几部分模板单元组成,其中:name:标识当前组名称,模板分析时会根据该名称来检查当前组定义是否正确结束。注意该名称必须同(ReportConfig.xml)配置的goup对应名称相同。参见3.3property:标识当前模板元素是属于相应组的那部分。该属性有四个值可供选择(head,body,foot,end),各属性值之间且必须遵循从上到下head-body-foot-end。否则系统会认为当前组的模板定义不完整,并仍出模板定义异常信息。datasource:定义当前分组引用的数据源,该数据源需要在报表配置文件(ReportConfig.xml)中配置。组数据区也可分为三个区域,各区域的划分也是通过property属性来描述,它们分别是:(property=head,property=body,property=foot,property=end),由这四个属性值来表示组头,组数据区,组尾。如下图:图4.3组头: (如图4.3 1所示区域)区域边界定义:同一个组(根据组模板定义的name属性来区分)的property=head到property=body元素定义之间的区域为当前组的组头。(如图4.3 1所示区域)可用模板定义元素:$B, $P, $F, $V。根据该规则我们可以知道,在组的头部可以嵌入band以及其他的模板定义元素。区域输出规则: 组头对应的区域在每次生成该分组报表数据时都会被输出一次。组数据区:(如图4.3 2所示区域)区域边界定义:同一个组(根据分组的name属性来区分)的property=body到property=foot元素定义之间的区域为当前组的组数据区。(如图4.3 2所示区域) 。可用模板定义元素:$B, $G, $P, $F, $V。根据该规则我们可以知道,在一个组的数据区还可嵌套其它的组或band。区域输出规则:组数据区的输出是根据组模板对应的数据源实例记录集的分组情况来决定的。生成报表数据时,该组对应数据源的当前分组内有多少条记录,该区域就会被重复输出多少次。组尾:(如图4.3 3所示区域)区域边界定义:同一个组(根据组的name属性来区分)的property=foot到property=end元素定义之间的区域为当前组的组尾。(如图4.2 3所示区域) 。可用模板定义元素:$B, $G, $P, $F, $V。区域输出规则:每输出一个组,在其分组报表结尾部分都会输出组尾对应的区域。注:可用模板定义元素指的是在当前区域内可以定义的模板变量。4.3 报表模板配置规范建议1定义模板元素$B,$G时尽量将整个行都合并,并将合并后的单元格设置一个背景色,如4.2图所示。这样使得整个模板定义文件分区清晰,便于维护和修改。因为$B,$G模板元素对应的整个行在报表输出过程中都会被忽略掉,它只是在模板分析过程中才有效。因此,当我们在$B,$G行定义任何信息都不会出现在最终生成的报表文件当中。这点在模板文件制作的过程中尤其需要注意。2嵌套分组,和band的模板定义可以采用缩进的风格,以便增强整个报表模板文件的可读型。3在定义Excel函数时,我们可以先定义好相关的Excel函数,并在excel中测试计算结果,等计算结果正确后我们才将该函数放到$V模板中,并用相应的字段变量替换原有的单元格,这样可以大大减少我们定义模板出错的可能。4band和分组的命名尽量简短并有意义,当然好处自然不用说了,这跟我们在编程过程中取个好的变量/函数名是同样的道理。4.4 格式化输出控制在一个报表工具中,格式化输出是非常重要的一项功能,它能使用户能灵活的控制数据的输出格式,以便生成清晰专业的报表数据。当然在Excel Report中也支持数据的格式化输出,这里需要说明的是,在我们这个报表工具中格式化输出最终是通过Excel来实现的。换句话说,在Excel 报表文件的生成过程中,工具本身并不格式化数据,而是将模板定义的格式化设置信息写入到生成的单元格中,这样该单元格在Excel中显示时会被Excel格式化输出并显示。因此在Excel Report中我们可以使用Excel所支持的丰富的格式化功能。下面我们来介绍一些如何设置一个格式化输出的字段。当我们在制作一个报表过程当中,需要控制一个模板变量($V,$F)的格式化输出时,我们首先需要设置该模板变量所在单元格的格式信息(通过Excel设置单元格格式来设定),设置好你想要的格式化输出效果。当你完成这一步后对于$V和大部分$F的模板定义已经足够了,我们就应该可以看到生成的报表已经按照我们想要的效果进行了格式化输出。但对于某些较特殊的值我们还需进一步处理:对于$F模板定义的单元格,我们还需要进一步判断该模板变量对应的字段值是否与你需要格式化控制的类型一致,比如,如果我们需要格式化输出一个日期型字段,那么我们一定要确保该字段在数据源中必须以Date类型的数据保存。如果数据不是以Data类型保存在数据源中呢?比如在某些表中日期被检索出来可能就是一个字符串。对于这种情况,如果你不对数据源进一步处理,你是无法在生成的报表中看到格式化的输出效果的。对于进一步如何对该字段进行处理?在Excel Report中有两种方式:第一 我们可以在数据源定义时指定某个字段的类型,这样报表工具会自动将数据源中的值转换用户定义的类型(这种情况在数据库类型数据源中较常用)。第二 我们可以在数据源中对该字段插入一个字段监听器,这样在报表工具读取该字段值时可以自己去手动将该值转换成Date类型并返回转换后的值,这样报表工具就会用我们转换过的值来生成报表。(这种情况对于静态类型的数据源或某些报表工具本身不支持的类型转换的情况下较常用)4.5 通过$V(Excel函数模板)来使用excel的函数在报表制作过程当中我们经常会对一些输出的数据进行一些统计计算,比如求和求平均值等常见的统计函数等等,甚至可以这么说,一个报表工具完善与否跟它所支持的统计函数及相关脚本的功能强大与否有着很大的关系。在Excel Report中工具本身并不提供任何报表统计函数和脚本技术,它只是利用Excel的丰富的函数库来实现报表统计功能。之所以这么做主要是考虑到以下两个方面:1充分利用Excel的函数库来实现报表的相关统计功能,这样在减少实现该工具的复杂性的同时又使的Excel Report具备了其他报表工具所无法比拟的强大函数库的支持。2由于统计函数的实现不是在报表生成时去计算,因此减少了生成报表数据所需要花费的时间。上面我们简要介绍了Excel Report的实现方式,接下来我们来详细介绍如何来定义一个Excel函数,并把该函数引入到模板定义当中。来看一个例子:$VSUM($Fds.field1*$Fds.field2) 这个例子的意思是,将ds数据源对应的字段值field1和field2通过Excel得sum函数来做乘法运算。从这个例子我们可以看到,当我需要在某个单元格生成一个Excel函数,我们首先得把该函数包在一个$V标记得模板定义语法当中,这样报表工具在分析该语法时就知道该处应该生成一个Excel函数单元格。如上例,报表工具最终生成得单元格可能是:1=SUM(B3*C3) 生成该语句是因为最近一个$Fds.field1和$Fds.field2的值在B3和C3位置输出了值。所以系统就通过引用这两个单元格来实现对这两个字段值进行计算的效果。2=SUM(12*20) 生成该语句是因为报表工具在模板文件中无法找到$Fds.field1和$Fds.field2的模板元素定义,这样系统就会直接去ds数据源中取得field1和field2对应的当前值,并用该值来生成相应的sum函数。下面所列表格我详细介绍了在制作报表模板时我们可在$V中使用的一些模板
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省蠡县2025年上半年公开招聘城市协管员试题含答案分析
- 河北省广宗县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年地震监测测绘合同书模板
- 2025版食堂承包合同补充协议范本(含节假日特殊服务)
- 2025版事业单位教职工合同制聘用规范范本
- 2025年度生态旅游用地地基买卖合同范本
- 2025年度成都二手房交易税费计算及缴纳指导合同
- 2025年度电子劳动合同智能语音服务合同
- 2025年度城市绿化养护与植物保护合同范本
- 2025房地产剩余价值抵押与养老产业投资合同
- 《尿液红细胞及形态》课件
- 2019人教版高中英语必修三单词表带音标
- 一例臀部巨大脓肿切开引流患者的个案护理汇报课件
- 液化石油气机械修理工施工质量管控详细措施培训
- 中建挂篮悬臂浇筑箱梁施工方案
- JCT2199-2013 泡沫混凝土用泡沫剂
- 创业的励志格言80句
- 加油站主要生产设备清单
- 国寿新绿洲团体意外伤害保险(A款)条款
- 人工流产的护理(妇产科护理课件)
- 安全生产标准化实施情况评定纠正措施落实记录
评论
0/150
提交评论