一种报表的生成方法

文档序号:6576514阅读:222来源:国知局

专利名称::一种报表的生成方法
技术领域
:本发明涉及电子表格,更具体地说,涉及一种报表的生成方法。
背景技术
:电子表格是一种在日常工作中经常使用的工具,其使用的方便程度经常影响使用者对其所在的运用系统的评价。目前应用系统在制作报表时,一般有这样几种方法一种方法是使用POI,JXL等Excel驱动程序,生成Excel报表对象,然后向指定的单元格写入数据,最后保存为Excel报表文件。但这种方法,程序不仅要提供数据,还要控制各区段的生成以及报表样式、格式,程序代码量大且不直观。在报表样式改变时需要改动代码。另一种方法是使用第三方的报表工具,如iReport,Birt等。这些工具自带设计器,可定义报表的样式,输出格式,数据绑定。在运行时驱动报表引擎生成报表对象,然后提供数据给报表对象即可生成所需报表,并且报表输出支持各种格式。但这种方式需要专用的报表设计工具,这些报表设计工具操作起来比较复杂,并且报表模板的设计也不是基于Excel表格方式的。不方便大部分操作人员的使用。
发明内容本发明要解决的技术问题在于,针对现有技术的上述需要改动代码、使用不方便或操作较为复杂的缺陷,提供一种基本不需要改动代码、使用方便以及操作筒单的一种报表的生成方法。本发明解决其技术问题所采用的技术方案是构造一种报表的生成方法,所述每种报表包括一个模板文件和一个样式文件,还包括如下步骤A)构造与每种报表模板,得到与该报表对应的模板文件和样式文件,并存储;B)选择报表种类,并读取与报表对应的模板文件和样式文件,加载报表模板;C)生成报表,并输出。在本发明所述的报表的生成方法中,所述步骤A)进一步包括Al)用Excel得到所需报表模板样式,生成Excel格式的模板文件;A2)定义所述报表模板样式中的各区段,生成样式文件。在本发明所述的报表的生成方法中,步骤A2)中所述定义各区段包括定义各区段中所要放置的数据项、所述数据项的位置以及所述数据项的显示格式,所述生成样式文件包括将上述信息记录在所述样式文件中。在本发明所述的报表的生成方法中,所述模板文件包括.xls文件;所述样式文件包括.xml文件。在本发明所述的报表的生成方法中,所述步骤B)进一步包括Bl)读取所选报表的样式文件,解析其定义信息,生成报表样式定义对象;B2)读取所选报表的模板文件,读取其每个区段中的合并单元格信自在本发明所述的才艮表的生成方法中,所述步骤C)进一步包括如下步骤Cl)构造一个新报表,设置该报表的输出路径;C2)初始化所构造的新报表;C3)生成新区段;C4)填充所述新区段,并输出所述新报表。在本发明所述的报表的生成方法中,所述步骤C2)进一步包括C21)由所述报表模板中复制其表头和表尾到所述新报表;C22)将新区段插入指针位置设置在所述表头和表位之间。在本发明所述的报表的生成方法中,所述步骤C)进一步包括如下步骤Cl)构造一个新报表,设置该报表的输出路径;C2)初始化所构造的新报表;C3)生成新区段;5.C4)填充所述新区段,并输出所述新报表。在本发明所述的报表的生成方法中,所述步骤C4)进一步包括如下步骤C41)由所述报表定义对象中取得所述报表中各区段单元格所对应的数据项的定义;C42)从指定的数据对象中获取数据;C43)处理所述数据;C44)将所述处理后得到的数据填入其对应的区段单元格中。在本发明所述的报表的生成方法中,步骤C41)中所述数据项定义包括数据项名称、所述数据项所在的位置以及所述数据项的显示格式。实施本发明的报表的生成方法,具有以下有益效果由于每个报表都具有与其对应的模板文件和样式文件,因此在生成报表时其表格与表格中的数据是分开的,所以就绝大多数情况而言不需要改动代码、使用方便以及操作简单。图1是本发明一种报表的生成方法实施例的报表生成流程图;图2是所述实施例的报表模板生成流程图;图3是所述实施例的报表模板加载流程图;图4是所述实施例中报表生成流程图。具体实施例方式下面将结合附图对本发明实施例作进一步说明。如图l所示,在本发明一种报表的生成方法实施例中,从总体上来看,包括了如下步骤步骤S1构造报表模板,得到其对应的模板文件和样式文件,存储这些文件在本步骤中,构建供使用者调用的报表模板,这些报表模板是生成报表的基础,之后的动作都是在此基础上产生的。由于该报表模板分为模板文件和样式文件,因此,其产生报表时,数据与报表式样是分开的,互不相关的,因此其在绝大多数情况下不需要改动代码、使用方便以及操作简单。至于,产生报表模板的具体步骤,稍后有更详细的描述。步骤S2选择报表,加载其模板在本步骤中,上述报表模板已经存在,使用者(通常在终端的浏览器上)选择报表模板中的一个,并由服务器中加载该报表模板(报表模板存储在服务器上)。步骤S3生成报表,并输出在加载的报表模板上进行数据取得及处理,最后将这些处理后的数据填入对应单元,生成报表,并输出该报表。图2示出了上述步骤S1中报表模板生成的具体步骤,在图2中,包括步骤Sll用Excel得到报表模板的样式,生成模板文件在本实施例中,每个报表模板都需要一个模板文件(Excel文件)和一个样式文件(XML文件),在本步骤中,就是使用Excel画出一个报表模式,这就得到一个.xls格式的模板文件。步骤S12定义上述模板的样式中的区段,生成样式文件在本步骤中,将上述模板分好各个区段,设定每个区段中要放置的数据项。以及数据项的位置,显示格式等。将这些配置信息记录在文件中。生成一个样式文件(xml文件)。通过上述步骤S11和步骤S12,得到一个完整的、包括了模板文件和样式文件的报表模板。多个这样的报表模板存储在一起,就构成了服务器中的报表模板,可在其中选择任何一个模板来生成与其格式一样的报表。下面具体描述使用者在浏览器上选择具体报表后,其生成报表的过程。图3示出了上述步骤S2中报表模板加载的具体步骤,在图3中,包括步骤S21读取所选报表的样式文件,生成报表样式定义对象在本步骤中,读取所选报表的样式文件,解析该样式文件中的信息,于是生成报表样式定义对象。步骤S22读取所选报表的模板文件,得到其中的单元格信息在本步骤中,读取所选报表的模板文件,取得其区段中每个单元格或合并单元格的信息,完成模板力口载。图4示出了上述步骤S3中报表生成(在上述模板加载完成后)的具体步骤,在图4中,包括-步骤S30构造一个新报表,设置该报表的输出途径由本步骤开始,直到步骤S39,都是在描述被选择的报表的生成过程,其中,步骤S31到步骤S32是该报表的初始化过程;步骤S33到步骤S35是描述该报表中生成新区段的过程;步骤S36到步骤S39描述的是将要求的数据填充新区段的过程。在本步骤中,构造一个新的报表,设置报表输出。报表可输出到文件,也可以输出到浏览器。步骤S31由所述报表模板中复制表头和表尾到新报表中上述报表中表头、表尾部分是固定的,都只有一个,但分组头、明细、分组尾是按需要生成的。所以初始化报表时从报表模板中复制表头和表尾到新报表。步骤S32将新区段插入指针设置在上述表头和表尾之间在本步骤中,设置新区段插入指针在表头和表尾之间的位置,完成报表的初始化。步骤S33在所述新区段位置插入模板文件中的行数在本步骤中,在新区段插入指针位置处,插入区段定义的行数;这个区段定义的行数也就是模板文件中所定义的行数。步骤S34以模板文件中的行高设置所插入行的行高在本步骤中,设置新区段中各行的高度为模板中该区段各行高度。步骤S35复制模板文件中各单元格信息到所插入的单元格中在本步骤中,将模板中该区段中各单元格的文字、样式、表格线、合并单元格信息复制到新生成的区段中。步骤S36取得单元格对应的数据项定义在本步骤中,由上述报表定义对象(读取报表样式文件时产生的)中获取分别对应于各个单元格的数据项定义。步骤S37获取数据因上述步骤已得到数据项的定义,而其定义中有这些数据的所在位置,因此,本步骤中,从提供的数据对象里获取数据。步骤S38处理所述数据在上述取得的数据中,按照数据项定义的数据类型、所在单元格位置、;f各式对数据进行处理。例如可能有些数据需要运算等。步骤S39将处理后的数据填入对应单元格将上述处理过的数据填充到目标单元格中,完成该报表的生成。在本实施例中,实现了基于Excel模板文件的报表生成方法,将报表的样式控制与数据处理完全分开。每个报表有一个模板文件和一个样式文件。ExcelEngine报表引擎(以下简称报表引擎,引擎,或ee)读取报表模板文件,样式文件,得到报表区段与数据项定义。应用程序只需提供数据给报表引擎,报表引擎根据报表定义,生成各个区段,然后对数据进行格式化等处理,填充到报表相应区段的指定位置,最终生成报表文件。在改变报表样式时只需改动模板文件。如标题文字,字体,位置,单元格大小,边框。在改变数据项格式,位置,是否输出时只需改变报表样式文件,无需改动程序。只有改变报表某区段中包含的数据项(如原来的学生信息报表中没有家长姓名和联系方式,现在需要添加)或数据项所属区段改变时,才需要修改程序,提供新加的数据项。该引擎可用来生成各种明细表,分组表,卡片表等。该引擎可向报表中嵌入图片,如各种曲线,直方图,饼图等。在本实施例中,每个报表都需要一个模板文件(Excel文件)和一个样式文件(XML文件)。制作报表的过程为按照需求,用Excel画报表模板。生成一个Excel格式的模板文件(xls文件)。将模板按以上方式分好各个区段,定好每个区段中要放置的数据项。以及数据项的位置,显示格式等。将这些配置信息记录在样式文件中。生成一个冲羊式文件(xml文件)。在本实施例中中,一个才各式文件的例子为普通明细表-操作员清单—style,xml<xmlversion="l.0"encoding="UTF-8"><reportdefine><report-definename'操作员清单"model_file="普通明细表—操作员清单.xls"create—date="2008-10-30"title—rows="5"group—title—rows="0"body—rows='T'group—foot—rows='T'footrows="0"print—cols="B匿E"/><report-title-define><itemname—'title'1row="2"col二"b"display="true"fonnat=',0/ol$st喿<乍员清单"format—data—type二"c"length二"0'1datatype="c"/><itemname:"pWntdate1,row="3"col="e"display="true"format二1,1,length="0"datatype="d"/></report-title-define><report-grouptitIe-define></report-grouptitle-defme><report-body-define><itemname:"getBh"<itemname=''getMc"<itemname="getGdj"<itemname—'getJs"</report-body-define〉<report-groupfoot-define></report-groupfoot-define><report-foot-define></report-foot-define><report-imagesegment="foot"row—'i"col="b"height一rows="10"width_cols="5"/><remark></remark></reportdefme>该文件是一个标准格式的XML文件,其格式符合XML文件格式的要求。以UTF-8作为编码4各式。以下对样式文件的内容啦爻一详细说明在该文件中,才艮节点的名称为〈reportdefine〉。在本实施例中。<reportdefine〉的第一个子结点是〈report—define>,该节点是对整个报表的定义,有以下属性〈report-defi歸ame="操作员清单"-报表名称,如果运行时将报row="]''col="b"display二"true"format-1'"length="0"datatype="c"/〉row二'M"col:"c'1display="true"format=''''length="0"datatype="c"/>row=tT'col:"d"display="trueMformat="''length="0"datatype="c"/>row='MMcol="e"display="true"forrnat='mlength="0"datatype二"c"/>10表输出为Exce1文件,Excel文件的默认文件名就是净艮表名称;model_file="普通明细表—操作员清单.xls"-使用的模板文件名。模板文件应和样式文件在同一个目录里,文件名称可以不同。但建议起相同的名字以便管理;create—date="2008-10-30"-创建日期。非关4建属性;title-rows="5"-表头行数;group—title—rows="0"-分组头行数;body—rows=""-表体行数;group-foot—rows="1"-分组尾行数;foot—rows-"Q"-表尾行数;print—cols="B-E"/>-打印列范围。第一列的列号-最末列列号(使用Excel的ABC样式表示列号而不要使用—般可指定第一列到最后一个有数据的列,以便报表引擎处理报表模板时,忽略右边那些没有内容的列,可加快运行速度。以上5个区段,如果某个区段没有,则对应区段行数=0在本实施例中,定义了报表的属性后,还需要定义各个区段的如下数据项〈report-title-define〉一表头区凄丈才居项定义〈report-grouptitle-define>-分组头区数据项定义<report-body-define〉-表体区数据项定义<report-g,pfoot-define>-分組尾区数据项定义〈report-foot-define〉-表尾区凝:据项定义其中,如某个区段中无数据项,对应节点无子结点。对于〈report-grouptitle_define〉,<report-body-define>,<report-groupfoot-define〉节点,可以有以下两个属性addpagebreak,ignorefirst。如<report-body-defineaddpagebreak="true"ignorefirst="true"〉。其中,addpagebreak:耳又4直为',true"/"false",如果省田各,则默认为"false"。每次生成一个新的区段时,是否在该区^:前边添加一个换页符。这种情况对打印发票这种固定大小的的报表特别有用。比如,要打印多个用户的费用清单,每个用户的费用清单使用固定大小的打印纸,那么可以把报表的纸张大小定义为自定义大小,然后在生成每个用户的清单时,给前边添加一个换页符,这样每次打印完一个用户的信息,打印机都会强行换页,保证下一个用户信息打印在新的一页纸上。此外,ignorefirst:取值为"true"/"false",如果省略,则默认为"true"。只有当addpagebreak=true时,ignorefirst才起作用。表示第一个生成的区段前是否忽略分页符。一般而言,对Excel文件来说,填到每个单元格的数据项有三种数据类型字符串型,数字型,日期时间型。对字符串来说一般是原样填充,对数字型和曰期时间型可在Excel模板文件里设置显示格式,只有在Excel里不支持的格式化,才需要在程序进行格式化处理。Excel表格中还可以设置各种计算公式,比如总价=单价*数量,这种情况下,单价和数量都要以数字方式填充到单元格中,Excel才能正确的计算。在本实施例中,如果某区段中有数据项,数据项按以下格式配置<itemnarae="title"row="2"col=''b"display-"true"datatype々"format="%l$s操作员清单"format-data—type="c"length-'10"/〉其中name:数据项名称,string;row:在所在区段中的相对行号,行号从1开始。int,取值范围1-该区段行数;col:所在列,使用ABC样式的列号表示。string,取值范围A-打印列的最末列列号;display:是否显示,如果为f'alse,则引擎运行时该数据不填充到模板中。Boolean,取值"true"/"false";datatype:数据类型,String,可选值为c/n/d。即字符型/数字型/日期型,如果不能确定数据类型的话,可选择字符型,这样数据会原样填到报表中;如果选择数字型或日期型,那么数据会按照数字或日期方式填到表格中。format:格式化字符串。String。如果不需要对该数据进行格式化处理,则format为空(空字符串一"")。如果数据类型指定为字符型,format参数才起作用。format的的格式应符合Java中format函数的语法。具体语法"i青参阅Java相关文档。对于"%l$s操作员清单"这样的格式字符串的解释如下%l$s表示第一个参数的占位符。比如运行时该数据项的值是"南山供电局",那么使用"°/。l$s操作员清单,,对"南山供电局,,进行格式化后的结果是"南山供电局操作员清单",即运行时使用该数据项的值替换格式字符串中的占位符。format—data-type:才各式4匕IU居时4安4十么方式。String,可选值c/n/d。该属性只有在数据类型为字符型且format属性不为空时才需要配置。format—data-type属性指明对数据进行才各式化时,按照哪种数据类型进行格式化处理。C-字符型,n--数字型,d--日期型。如果数据类型错误,那么格式化过程会出错。length:数据填充长度,int型,取值范围>=0,以字节为单位。(注意一个汉字为两个字节)。该属性只有在数据类型为字符型时起作用。如果length-0,数据按实际长度填到单元格里。如果〉0,则判断数据长度是否超出length,如果超出的话会截断。在某些报表中,单元格的大小是固定的,只能容納有限个字符,这种情况下可使用length属性来将超出的字符截断。对于某些图文并茂的报表,比如报表上部是表格,下边需要输出一个chart,这种时候需要给报表定义一个特殊的区段-图片段〈report-inmge〉。运行时,可将其他程序生成的图片输出到如果报表中〈report-image〉定义的位置。如果不需要图片,可以没有〈report-image〉节点。<report-imagesegment="foot"row="1"col="b"height—rows="10"width—cols="5"/〉其中segment:图片所属区段,String,可选值title/group一title/body/group—foot/foot;row:图片在所定义区段中的位置。行号,int,取值范围l-所属区段的行数;col:图片在所定义区段中的位置。列号,String,ABC样式的列号。取值范围A-打印范围的最末列;height—rows:图片占的行数,int,耳又值范围row+height—rows应小于所属区段的行数;width—cols:图片占的列凄史,int,耳又值范围col+width_cols应小于打印范围的最末列;实际上,图片输出到才艮表后,将占据从第row行上边沿,第col列左边沿,height—rows行高,width_cols列宽的一个范围。并且在用户拖动改变行高列宽时,图片的大小也将跟着改变。例如普通报表,上边是明细表格,最后输出一个Chart图片。可将图片定义在foot区;分组报表,每个分组中都需要有自己的Chart图片,可将图片定义在group-foot区。此外,在本实施例中,〈remark〉〈/remark〉节点中还可以写一些备注信息。在本实施例中,上述报表的实现过程如下首先,在ExcelEngine(报表引擎)软件包里计划实现以下几个类其中,报表样式定义部分包括ReportStyleDefine:Bean,报表样式定义对象Segment:Bean,报表区段定义;SegType:枚举,报表区段类别;DataItem:Bean,报表数据项定义;ImageDefine:Bean,图片定义;MergeRange:Bean,合并单元格定义;而报表处理引擎部分包括ExcelEngine:报表引擎类上述各个类的结构描述如下R印ortStyleDefine类的基础l史据结构如下表String;:createDate创建日期int;eridCoi结束列号ImageDefine|imageDefine报表中定义的图片String:modelFileName模板文件名Sheet:modelSheet模板sheet对象,只读Workbook:modelWorkBookI模板workbook对象,只读Stringlnams报表的名字HashMap<SegType,Segm:segmentsent〉!报表中各区段的定义对象,:Title,GroupTitle,Body,GroupFoot,Foot.五个段每;个都会在map中放一个实例SegType:区段类别Segment:区段实例intistartCol起始列号(第一列从O开始)StringstyleFileName15Segment类的基础数据结构如下表ArrayLisKData工tem〉;dataltems该区段中定义的数据项如果区段的行数定义为0,那么区段中不应定义数据项。boolean:isAddPageBreak生成新的该区段时,是否在前边添加一个1RowPageBreak(行分页符)boolean;isIgnoreFirst如果在生成新区段时需要在之前添加行;分页符,如果该区段是首次生成,是否不添加行分i页符。ArrayList<MergeRange>:mergeRange该区段中包含的合并单元格的定义注意:报表定义时,合并单元格不应跨区段。intIrows行数intstartRow在模板中的起始行数,从Q开始SegType区段类别<table>tableseeoriginaldocumentpage17</column></row><table>在本实施例中,当上述各个类建立后,开始读取模板文件及样式文件报表引擎读取样式定义文件,解析报表定义信息,生成一个报表样式定义对象ReportStyleDefine;读取报表模板文件,将模板文件中的第一页当作模板。读取每个区段中的合并单元格信息。如果某个合并单元格跨了不同的区段,那么解析过程失败,抛出异常。至此,加载模板过程结束。当上述加载模板完成后,开始生成报表,即构造一个新的报表,设置报表输出。可输出到文件,也可以输出到浏览器response(在Web应用时比较方便)。初始化报表对象。报表中表头、表尾部分是固定的,只有一个,但分组头、明细、分組尾是按需要生成的。所以初始化报表时从报表模板中复制表头和表尾到新报表。并设置新区段插入指针是表头和表尾之间的位置。之后,开始填充各区段数据,报表引擎提供了各种方法接受以下格式的数据BEAN,-单个的JavaBean,实际就是一个Java类实例。通过访问指定的方法获得数据。MAP,-JavaMap对象。通过Key可从Map中获得凄丈据。ARRAY,-JavaArray对象,即数组。里面的数据只能按顺序(索引)访问。LIST,-JavaList对象。同Array类似,里面的数据只能按顺序(索引)访问。DATASET-雨,-JavaDataSet对象。即数据集对象对象,但只使用DataSet中的当前记录。LIST—BEAN,-JavaList〈Bean〉对象,Bean对象的集合。LIST—MAP,-JavaLisKMap〉对象。List中的每个元素是一个Map。DATASET,-数据集对象。类似于ResaultSet。其中可包含多条记录。GROUP—MAP;-JavaMap〈Beanl,Lis<86&112>〉对象。一般用来给分组报表提供数据。Beanl用来提供分组的数据,1^3^86&112〉用来给该分组的明细区提供数据。在上述填充过程中,生成一个新的区段,然后从报表定义对象里获取各个数据项定义,从提供的数据对象里获取数据。再按照数据项定义的数据类型、所在单元格位置、格式对数据进行处理,处理完后填充到目标单元格中。其中,生成一个新的区段由包括生成新区段的过程如果要生成的区段是表头、表尾,则忽略生成区段的过程。因为表头表尾已存在了;在新区段插入指针位置处,插入区段定义的行数;设置新区段中各行的高度为模板中该区段各行高度;将模板中该区段中各单元格的文字、样式、表格线、合并单元格信息复制到新生成的区段中。如果该区段需要添加换页符,则在区段顶端添加换页符。其中,新区段插入指针=新区段插入指针+新区段行数;填充数据从该区4爻定义对象segment,dataltems中可得知该全段中各个数据项的配置信息。如果提供的数据为Bean,那么dataltera.name实际上对应的是Bean的某个方法名,利用Java反射机制,访问、Bean的某个方法,获得数据;如果提供的数据为Array或List,那么按dataltem在dataltems中的index,从Array或Ust中获得数据;如果提供的数据为DaUSet,那么dataltem.name实际上是字段名,按字段名从DataSet中获fl数据;如果提供的数据为Map,那么dataltem.name实际上是Map.key,按key到Map中获得指定的数据;在获得数据后,就可以按照dataltem的其他属性对数据进行处理,然后填充。如果dataltem.isFill=false,则不填充该lt据项;按dataltem的数据类型对数据进行类型转换,转换为字符型/数字型/日期时间型,然后按不同类型填充到区段的对应位置。位置属性为dataltem.row和dataltem.col。遍历segment,dataltems中的各个数据项,逐个进行填充;如果提供的数据为DataSet,List〈Bean〉,List〈Map〉这种包含多个数据对象的集合,那么就会逐个生成多个区段。比如明细区中的多行记录。对于分组报表,有以下两种快捷数据填充方式调用fillGroup—And—Body(DataSetgro叩DS,DataSetbodyDS,StringfilterFieldName)方法填充;其中groupDS是分组数据集对象;b。dyDS是分组明细区数据集对象;fiUerFieldName是分组数据对象和明细数据对象的关联字段。引擎首先在groupDS中遍历每条记录,为每条记录生成一个分组头,19然后按关联字段的值,到bodyDS中搜索符合条件的记录,然后生成多个分組明细记录。第二种方法调用fillGroup-And—Body(LinkedHashMap〈Object,ArrayList〈Object》,)方法填充;其中map.keyBean,为分组头和分組尾提供数据;mep.valueLisyKBean〉,为该分组的明细区才是供数据。各区段数据都写入报表后,将报表内容写入文件,然后关闭打开的文件,释放资源。至此报表制作过程结束。综上所述,本发明解决了在J2EE平台下报表制作时数据和样式控制完全分离的问题,使用Excel文件作为报表模板的问题。可在各种管理信息系统中生成报表时使用。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。20权利要求1、一种报表的生成方法,其特征在于,所述每种报表包括一个模板文件和一个样式文件,还包括如下步骤A)构造与每种报表模板,得到与该报表对应的模板文件和样式文件,并存储;B)选择报表种类,并读取与报表对应的模板文件和样式文件,加载报表模板;C)生成报表,并输出。2、根据权利要求1所述的报表的生成方法,其特征在于,所述步骤A)进一步包括Al)用Excel得到所需报表模板样式,生成Excel格式的模板文件;A2)定义所述报表模板样式中的各区段,生成样式文件。3、根据权利要求2所述的报表的生成方法,其特征在于,步骤A2)中所述定义各区段包括定义各区段中所要放置的数据项、所述数据项的位置以及所述数据项的显示格式,所述生成样式文件包括将上述信息记录在所述样式文件中。4、根据权利要求3所述的报表的生成方法,其特征在于,所述模板文件包括.x1s文件;所述样式文件包括.xm1文件。5、根据权利要求4所述的报表的生成方法,其特征在于,所述步骤B)进一步包括Bl)读取所选报表的样式文件,解析其定义信息,生成报表样式定义对象;B2)读取所选报表的模板文件,读取其每个区段中的合并单元格信息。6、根据权利要求5所述的报表的生成方法,其特征在于,所述步骤C)进一步包括如下步骤Cl)构造一个新报表,设置该报表的输出路径;C2)初始化所构造的新报表;C3)生成新区段;C4)填充所述新区段,并输出所述新报表。7、根据权利要求6所述的报表的生成方法,其特征在于,所述步骤C2)进一步包括C21)由所述报表模板中复制其表头和表尾到所述新报表;C22)将新区段插入指针位置设置在所述表头和表位之间。8、根据权利要求7所述的报表的生成方法,其特征在于,所述步骤C3)进一步包括如下步骤C31)在所述新区段插入指针位置插入模板文件中所述区段定义的行数;C32)用所述模板文件中定义该区段的行高来定义所述新区段的行高;C33)将所述模板文件中该区段中各单元格的信息复制到所述新区段中。9、根据权利要求8所述的报表的生成方法,其特征在于,所述步骤C4)进一步包括如下步骤C41)由所述报表定义对象中取得所述报表中各区段单元格所对应的数据项的定义;C42)从指定的数据对象中获取数据;C43)处理所述数据;C44)将所述处理后得到的数据填入其对应的区段单元格中。10、根据权利要求9所述的报表的生成方法,其特征在于,步骤C41)中所述数据项定义包括数据项名称、所述数据项所在的位置以及所述数据项的显示格式。全文摘要本发明涉及一种报表的生成方法,所述每种报表包括一个模板文件和一个样式文件,还包括如下步骤构造与每种报表模板,得到与该报表对应的模板文件和样式文件,并存储;选择报表种类,并读取与报表对应的模板文件和样式文件,加载报表模板;生成报表,并输出。实施本发明的报表的生成方法,具有以下有益效果由于每个报表都具有与其对应的模板文件和样式文件,因此在生成报表时其表格与表格中的数据是分开的,所以就绝大多数情况而言不需要改动代码、使用方便以及操作简单。文档编号G06F17/24GK101650711SQ20091010935公开日2010年2月17日申请日期2009年8月18日优先权日2009年8月18日发明者邓志峰申请人:深圳市科陆电子科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1