本发明专利技术公开了一种基于Excel模板的动态报表实现方法,其通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据,在将矩阵转换成由Html信息输出到浏览器或/和将矩阵转换成由Excel信息导出。其优点在于:复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。
【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种,其通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据,在将矩阵转换成由Html信息输出到浏览器或/和将矩阵转换成由Excel信息导出。其优点在于:复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。【专利说明】
本专利技术涉及Excel报表领域,具体地,涉及一种。
技术介绍
现有的Excel操作工具,采用java语言编写的主要有两种,一种为Ρ0Ι,另一种为JXL,JXL即java Excel API。这两种操作工具的API比较底层,灵活性很好,但用来开发报表都需要编写很多代码。现有还有很多报表工具,他们底层使用POI或者JXL,比如FineReport, IReport等,这些工具都比较强大,能够开发复杂报表。IReport通过图形化可拖拽的方式定义模板,编译成.jasper模板文件,再在程序中调用JasperReport的API来解析模板文件并绑定数据源,最终生成Excel。JasperReport对解析模板文件和填充数据已经封装,我们只需要提供数据源即可。但是,采用POI或JXL进行开发,开发成本太大,周期太长,虽然可以完成任何报表的开发,但是每一张报表都需要编写许多重复代码,并且很难掌握对报表格式的控制,想要调整报表,必须重写代码,这些用户是不可能完成的,必须投入很大的后期维护成本。一般的Excel导出不能解决复杂报表问题,在传统的开发过程中,在使用JasperR印ort等报表技术时,模板都是用到专门的开发工具,并需要经过编译,开发周期较慢,使得开发人员定义报表模板及在软件维护过程中需调整模板,付出极大的代价。并且由于开发工具的专业性,导致了报表的使用人员很难自已动手,随需应变调整报表样式。
技术实现思路
本专利技术所要解决的技术问题是提供一种,其缩短了报表的开发周期、简化了报表的开发工作,节约开发成本,并且通过简单的培训可以达到让用户自定义新模板、调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。本专利技术解决上述问题所采用的技术方案是: ,包括如下步骤: a、根据数据源API,读取数据,构建成一个树状结构的源数据; b、读取Excel模板; C、遍历sheet中的每一行,提取每一行的配置信息,并在内存中组装成矩阵模型; d、遍历内存中矩阵模型中的每个配置节点; e、在遍历配置节点时,对遇到的标签进行判断并解析; f、按照步骤C-步骤e,依次遍历完模板中的所有sheet; g、生成最终矩阵结构的结果,遍历每个矩阵结构的结果数据,并将矩阵映射成为Html,取出矩阵中附带存储的Excel样式数据,转换成Html的相应格式,对Html进行设置,或/并将矩阵映射成为Excel,取出矩阵中附带存储的Excel样式数据,对Excel进行设置; h、将Html输出到浏览器或/并导出Excel。作为本专利技术的进一步方案,在步骤e中, el、遇到参数标签,则会在源数据中查找对应的数据项,并在该位置用查找结果替换该标签; e2、遇到变量标签,首先调用系统预置的方法对变量进行计算,然后用计算结果替换该标签; e3、遇到循环标签,对循环方向进行判断,并根据循环方向确定循环内容的边界位置,在数据源中查找对应的数组数据,并根据数组数据的长度,在矩阵模型中生成对应数量的行或者列。进一步的,遇到循环标签时,在每一次循环内部,建立一个针对单次循环的临时数据源,并对循环标签内的子标签进行解析。更进一步的,在对子标签进行解析时, e31、遇到字段标签,在临时数据源中查找数据,并用查找结果替换标签; e32、遇到参数标签,采用步骤el的方式进行解析; e33、遇到变量标签,采用步骤e2的方式进行解析; e34、遇到嵌套的循环标签,保存当前的上下文环境到栈中,然后执行步骤e3,循环完毕,在从栈中取出上下文环境,恢复现场。作为本专利技术的进一步方案,在步骤g中,在将矩阵映射成Html时,将矩阵映射成table,将行映射成Html中的tr,将每一行中的单元格映射成Html中的td。作为本专利技术的进一步方案,在步骤g中,在将矩阵映射成为Excel时,将矩阵映射成为Excel中的sheet,将矩阵中每一行映射成sheet的行,将矩阵中每一个单元格映射成Excel的单元格。作为本专利技术的进一步方案,在步骤g中,将矩阵中附带存储的Excel样式数据,转换成Html的css格式。本专利技术后台通过“解释执行”的方式,读取报表模板文件,并通过java API进行解析,然后在系统内存中翻译成为代码级别的报表模型。此时再通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据。最后把矩阵转换成由Html的〈table〉<tr> <td>构成的内容,并根据模板文件中的表格样式、字体样式设置html的样式,就产生了报表;此外,把矩阵转换成Excel中的Sheet、Row、Cell构成的内容,并根据模板文件中的样式设置生成的Excel文件的样式,就完成了 Excel导出。其解决了复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。综上,本专利技术的有益效果是: 本专利技术解决了复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。【专利附图】【附图说明】图1是本专利技术实施例1的流程图。图2是本专利技术实施例2的流程图。【具体实施方式】下面结合实施例及附图,对本专利技术作进一步地的详细说明,但本专利技术的实施方式不限于此。实施例1: ,包括如下步骤: a、根据数据源API,读取数据,构建成一个树状结构的源数据,使得顶层有多个根节点,表示设置的对象和参数; b、读取Excel模板; C、遍历sheet中的每一行,提取每一行的配置信息,并在内存中组装成矩阵模型,矩阵模型描述了 Excel模板文件中使用的标签的内容、位置、类型等信息。d、遍历内存中矩阵模型中的每个配置节点; e、在遍历配置节点时,对遇到的标签进行判断并解析; f、按照步骤C-步骤e,依次遍历完模板中的所有sheet; g、当把数据源中的数据,通过矩阵结构的模型,生成最终矩阵结构的结果,遍历每个矩阵结构的结果数据,并将矩阵映射成为Html,取出矩阵中附带存储的Excel样式数据,转换成Html的相应格式,对Html进行设置,或/并将矩阵映射成为Excel,取出矩阵中附带存储的Excel样式数据,对Excel进行设置; h、将Html输出到浏览器或/并导出Excel。后台使用的数据源的类型为java.util.Map,对多个sheet页进行遍历,使得其支持多Sheet页导出。读取报表模板文件,并通本文档来自技高网...
【技术保护点】
基于Excel模板的动态报表实现方法,其特征在于,包括如下步骤:a、根据数据源API,读取数据,构建成一个树状结构的源数据;b、读取Excel模板;c、遍历sheet中的每一行,提取每一行的配置信息,并在内存中组装成矩阵模型;d、遍历内存中矩阵模型中的每个配置节点;e、在遍历配置节点时,对遇到的标签进行判断并解析;f、按照步骤c?步骤e,依次遍历完模板中的所有sheet;g、生成最终矩阵结构的结果,遍历每个矩阵结构的结果数据,并将矩阵映射成为Html,取出矩阵中附带存储的Excel样式数据,转换成Html的相应格式,对Html进行设置,或/并将矩阵映射成为Excel,取出矩阵中附带存储的Excel样式数据,对Excel进行设置;h、将Html输出到浏览器或/并导出Excel。
【技术特征摘要】
【专利技术属性】
技术研发人员:张盼富,蒋凯,陈奇志,
申请(专利权)人:成都交大光芒科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。