CN103823793B - 基于Excel模板的动态报表实现方法 - Google Patents

基于Excel模板的动态报表实现方法 Download PDF

Info

Publication number
CN103823793B
CN103823793B CN201410078126.0A CN201410078126A CN103823793B CN 103823793 B CN103823793 B CN 103823793B CN 201410078126 A CN201410078126 A CN 201410078126A CN 103823793 B CN103823793 B CN 103823793B
Authority
CN
China
Prior art keywords
excel
matrix
data
template
html
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.)
Active
Application number
CN201410078126.0A
Other languages
English (en)
Other versions
CN103823793A (zh
Inventor
张盼富
陈劲草
蒋凯
陈奇志
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Original Assignee
CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd filed Critical CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Priority to CN201410078126.0A priority Critical patent/CN103823793B/zh
Publication of CN103823793A publication Critical patent/CN103823793A/zh
Application granted granted Critical
Publication of CN103823793B publication Critical patent/CN103823793B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于Excel模板的动态报表实现方法,其通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据,在将矩阵转换成由Html信息输出到浏览器或/和将矩阵转换成由Excel信息导出。其优点在于:复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。

Description

基于Excel模板的动态报表实现方法
技术领域
本发明涉及Excel报表领域,具体地,涉及一种基于Excel模板的动态报表实现方法。
背景技术
现有的Excel操作工具,采用java语言编写的主要有两种,一种为POI,另一种为JXL,JXL即java Excel API。这两种操作工具的API比较底层,灵活性很好,但用来开发报表都需要编写很多代码。现有还有很多报表工具,他们底层使用POI或者JXL,比如FineReport,IReport等,这些工具都比较强大,能够开发复杂报表。IReport通过图形化可拖拽的方式定义模板,编译成.jasper模板文件,再在程序中调用JasperReport的API来解析模板文件并绑定数据源,最终生成Excel。JasperReport对解析模板文件和填充数据已经封装,我们只需要提供数据源即可。但是,采用POI或JXL进行开发,开发成本太大,周期太长,虽然可以完成任何报表的开发,但是每一张报表都需要编写许多重复代码,并且很难掌握对报表格式的控制,想要调整报表,必须重写代码,这些用户是不可能完成的,必须投入很大的后期维护成本。一般的Excel导出不能解决复杂报表问题,在传统的开发过程中,在使用JasperReport等报表技术时,模板都是用到专门的开发工具,并需要经过编译,开发周期较慢,使得开发人员定义报表模板及在软件维护过程中需调整模板,付出极大的代价。并且由于开发工具的专业性,导致了报表的使用人员很难自已动手,随需应变调整报表样式。
发明内容
本发明所要解决的技术问题是提供一种基于Excel模板的动态报表实现方法,其缩短了报表的开发周期、简化了报表的开发工作,节约开发成本,并且通过简单的培训可以达到让用户自定义新模板、调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。
本发明解决上述问题所采用的技术方案是:
基于Excel模板的动态报表实现方法,包括如下步骤:
a、根据数据源API,读取数据,构建成一个树状结构的源数据;
b、读取Excel模板;
c、遍历sheet中的每一行,提取每一行的配置信息,并在内存中组装成矩阵模型;
d、遍历内存中矩阵模型中的每个配置节点;
e、在遍历配置节点时,对遇到的标签进行判断并解析;
f、按照步骤c-步骤e,依次遍历完模板中的所有sheet;
g、生成最终矩阵结构的结果,遍历每个矩阵结构的结果数据,并将矩阵映射成为Html,取出矩阵中附带存储的Excel样式数据,转换成Html的相应格式,对Html进行设置,或/并将矩阵映射成为Excel,取出矩阵中附带存储的Excel样式数据,对Excel进行设置;
h、将Html输出到浏览器或/并导出Excel。
作为本发明的进一步方案,在步骤e中,
e1、遇到参数标签,则会在源数据中查找对应的数据项,并在该位置用查找结果替换该标签;
e2、遇到变量标签,首先调用系统预置的方法对变量进行计算,然后用计算结果替换该标签;
e3、遇到循环标签,对循环方向进行判断,并根据循环方向确定循环内容的边界位置,在数据源中查找对应的数组数据,并根据数组数据的长度,在矩阵模型中生成对应数量的行或者列。
进一步的,遇到循环标签时,在每一次循环内部,建立一个针对单次循环的临时数据源,并对循环标签内的子标签进行解析。
更进一步的,在对子标签进行解析时,
e31、遇到字段标签,在临时数据源中查找数据,并用查找结果替换标签;
e32、遇到参数标签,采用步骤e1的方式进行解析;
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:
基于Excel模板的动态报表实现方法,包括如下步骤:
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页导出。读取报表模板文件,并通过java API进行解析,然后在系统内存中翻译成为代码级别的报表模型。此时再通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据,将矩阵结果映射成相对应的Html信息和Excel信息,由此完成报表的展现和Excel导出,基本实现所见即所得的配置方式,达到节约开发成本,简化开发难度,缩短报表开发周期;节约维护成本,通过简单培训,可以让用户自定义新模板,调整模板,不需要开发人员参与后期维护的目的。而配置信息,即由标签组成的各类表达式信息。
实施例2:
如图2所示,本实施例在实施例1的基础上做了如下细化:在步骤e中,
e1、遇到参数标签,则会在源数据中查找对应的数据项,并在该位置用查找结果替换该标签;
e2、遇到变量标签,首先调用系统预置的方法对变量进行计算,然后用计算结果替换该标签;
e3、遇到循环标签,对循环方向进行判断,并根据循环方向确定循环内容的边界位置,在数据源中查找对应的数组数据,并根据数组数据的长度,在矩阵模型中生成对应数量的行或者列。若判断出是垂直方向的循环,则接下来计算被循环的内容的上下左右的边界位置,并设置数据填充方向向下;若判断出是水平方向的循环,同样需要首先确定被循环内容的上下左右的边界位置,并设置数据填充方向向右;确定了循环的方向和内容的边界位置后,下一步则会在数据源中查找对应的数组数据。
进一步的,遇到循环标签时,在每一次循环内部,建立一个针对单次循环的临时数据源,并对循环标签内的子标签进行解析。
在对子标签进行解析时,
e31、遇到字段标签,在临时数据源中查找数据,并用查找结果替换标签;
e32、遇到参数标签,采用步骤e1的方式进行解析;
e33、遇到变量标签,采用步骤e2的方式进行解析;
e34、遇到嵌套的循环标签,保存当前的上下文环境到栈中,然后执行步骤e3,循环完毕,在从栈中取出上下文环境,恢复现场。
通过系统提供的标签来定义Excel模板文件,标签的使用规范如下:
参数标签:$P{参数名}
循环标签,支持垂直方向的循环和水平方向的循环,支持嵌套的循环:以$Forbegin开始,以$Forend结尾。
字段标签,配合循环标签使用:$F{字段名}或$F{字段名}.groupby(字段名)
变量标签:$V{系统预定义变量名}
系统预定义函数:如groupby、colspan,rowspan等,用法如上述第3)点
在步骤g中,在将矩阵映射成Html时,将矩阵映射成table,将行映射成Html中的tr,将每一行中的单元格映射成Html中的td。
在步骤g中,在将矩阵映射成为Excel时,将矩阵映射成为Excel中的sheet,将矩阵中每一行映射成sheet的行,将矩阵中每一个单元格映射成Excel的单元格。
在步骤g中,将矩阵中附带存储的Excel样式数据,转换成Html的css格式。
如上所述,可较好的实现本发明。

Claims (6)

1.基于Excel模板的动态报表实现方法,其特征在于,包括如下步骤:
a、根据数据源API,读取数据,构建成一个树状结构的源数据;
b、读取Excel模板;
c、遍历sheet中的每一行,提取每一行的配置信息,并在内存中组装成矩阵模型;
d、遍历内存中矩阵模型中的每个配置节点;
e、在遍历配置节点时,对遇到的标签进行判断并解析;
f、按照步骤c-步骤e,依次遍历完模板中的所有sheet;
g、生成最终矩阵结构的结果,遍历每个矩阵结构的结果数据,并将矩阵映射成为Html,取出矩阵中附带存储的Excel样式数据,转换成Html的相应格式,对Html进行设置,或/并将矩阵映射成为Excel,取出矩阵中附带存储的Excel样式数据,对Excel进行设置;
h、将Html输出到浏览器或/并导出Excel;
其中,在步骤e中,
e1、遇到参数标签,则会在源数据中查找对应的数据项,并在参数标签的位置用查找结果替换参数标签;
e2、遇到变量标签,首先调用系统预置的方法对变量进行计算,然后用计算结果替换变量标签;
e3、遇到循环标签,对循环方向进行判断,并根据循环方向确定循环内容的边界位置,在数据源中查找对应的数组数据,并根据数组数据的长度,在矩阵模型中生成对应数量的行或者列。
2.根据权利要求1所述的基于Excel模板的动态报表实现方法,其特征在于:遇到循环标签时,在每一次循环内部,建立一个针对单次循环的临时数据源,并对循环标签内的子标签进行解析。
3.根据权利要求2所述的基于Excel模板的动态报表实现方法,其特征在于:在对子标签进行解析时,
e31、遇到字段标签,在临时数据源中查找数据,并用查找结果替换字段标签;
e32、遇到参数标签,采用步骤e1的方式进行解析;
e33、遇到变量标签,采用步骤e2的方式进行解析;
e34、遇到嵌套的循环标签,保存当前的上下文环境到栈中,然后执行步骤e3,循环完毕,在从栈中取出上下文环境,恢复现场。
4.根据权利要求1所述的基于Excel模板的动态报表实现方法,其特征在于:在步骤g中,在将矩阵映射成Html时,将矩阵映射成table,将行映射成Html中的tr,将每一行中的单元格映射成Html中的td。
5.根据权利要求1或2所述的基于Excel模板的动态报表实现方法,其特征在于:在步骤g中,在将矩阵映射成为Excel时,将矩阵映射成为Excel中的sheet,将矩阵中每一行映射成sheet的行,将矩阵中每一个单元格映射成Excel的单元格。
6.根据权利要求1至4任一权利要求所述的基于Excel模板的动态报表实现方法,其特征在于:在步骤g中,将矩阵中附带存储的Excel样式数据,转换成Html的css格式。
CN201410078126.0A 2014-03-05 2014-03-05 基于Excel模板的动态报表实现方法 Active CN103823793B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410078126.0A CN103823793B (zh) 2014-03-05 2014-03-05 基于Excel模板的动态报表实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410078126.0A CN103823793B (zh) 2014-03-05 2014-03-05 基于Excel模板的动态报表实现方法

Publications (2)

Publication Number Publication Date
CN103823793A CN103823793A (zh) 2014-05-28
CN103823793B true CN103823793B (zh) 2016-09-14

Family

ID=50758866

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410078126.0A Active CN103823793B (zh) 2014-03-05 2014-03-05 基于Excel模板的动态报表实现方法

Country Status (1)

Country Link
CN (1) CN103823793B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104376068B (zh) * 2014-11-07 2018-04-03 北京思特奇信息技术股份有限公司 一种基于动态报表模板的数据展现系统及方法
CN105893040A (zh) * 2016-03-30 2016-08-24 南京信息工程大学 一种基于excel模板的可变报表的生成方法及系统
CN106202018A (zh) * 2016-07-12 2016-12-07 精硕世纪科技(北京)有限公司 Excel报告生成方法及装置
CN107609131B (zh) * 2017-09-18 2020-04-17 中国银行股份有限公司 一种报表文件生成方法及装置
CN107704445A (zh) * 2017-10-30 2018-02-16 北京恒华伟业科技股份有限公司 一种表单填报方法及装置
CN108509554B (zh) * 2018-03-22 2022-03-01 威创软件南京有限公司 一种基于wpf技术和excel快速生成组织架构图的方法
CN116861878A (zh) * 2018-04-03 2023-10-10 福建榕基软件工程有限公司 一种结合输出形式的自定义报表生成方法与终端
CN109033039A (zh) * 2018-06-15 2018-12-18 中煤电气有限公司 Excel报表的预览方法、工具、计算机设备及可读存储介质
CN110941949B (zh) * 2019-11-21 2020-12-11 望海康信(北京)科技股份公司 数据表格渲染控制方法、装置、计算机设备及存储介质
CN111126019B (zh) * 2019-11-28 2024-01-05 泰康保险集团股份有限公司 基于模式定制的报表生成方法、装置和电子设备
CN111324844A (zh) * 2020-02-20 2020-06-23 重庆锐云科技有限公司 数据导出控制方法、装置、营销管理平台及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183356A (zh) * 2007-12-14 2008-05-21 华为技术有限公司 Excel报表的实现方法及Excel报表系统
CN102819564A (zh) * 2012-07-05 2012-12-12 无锡中科泛在信息技术研发中心有限公司 一种有限表元组合的报表生成方法
CN102902546A (zh) * 2012-10-12 2013-01-30 重庆亚德科技股份有限公司 一种通用报表列表组件
CN103324731A (zh) * 2013-06-28 2013-09-25 中国农业银行股份有限公司 将电子表格文件转换为网页格式文件的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0028434D0 (en) * 2000-11-22 2001-01-10 Decision Curve Ltd Methods and apparatus for automatically producing spreadsheet-based models

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183356A (zh) * 2007-12-14 2008-05-21 华为技术有限公司 Excel报表的实现方法及Excel报表系统
CN102819564A (zh) * 2012-07-05 2012-12-12 无锡中科泛在信息技术研发中心有限公司 一种有限表元组合的报表生成方法
CN102902546A (zh) * 2012-10-12 2013-01-30 重庆亚德科技股份有限公司 一种通用报表列表组件
CN103324731A (zh) * 2013-06-28 2013-09-25 中国农业银行股份有限公司 将电子表格文件转换为网页格式文件的方法和装置

Also Published As

Publication number Publication date
CN103823793A (zh) 2014-05-28

Similar Documents

Publication Publication Date Title
CN103823793B (zh) 基于Excel模板的动态报表实现方法
CN104461484B (zh) 前端模板的实现方法和装置
CN101676910B (zh) 一种面向Web应用系统的页面生成方法
CN106371825B (zh) 一种移动端应用界面表单动态生成方法及装置
CN104407863B (zh) 抽象控件模型编程装置和方法
CN103809975B (zh) 智能云表单的实现方法
CN105183489A (zh) 一种基于Extjs框架的数据智能分析系统及方法
CN102982010A (zh) 提取文档结构的方法和装置
CN109145235B (zh) 用于解析网页的方法、装置及电子设备
CN106951231B (zh) 一种计算机软件开发方法及装置
CN103176954A (zh) 一种基于HTML5 canvas的数学公式显示方法及系统
RU2015109665A (ru) Способ и система синтеза текста на основе извлеченной информации в виде rdf-графа с использованием шаблонов
CN107133027A (zh) 一种语法树层次化表示方法
CN106325647B (zh) 一种ui调整方法、装置和移动终端
CN105938454A (zh) 一种测试用例的生成方法及系统
CN104182484A (zh) 一种实现HBase数据与Java域对象映射的方法和装置
CN104679932A (zh) 智能化电力工程设计方法及系统
CN104361025A (zh) 一种多源空间数据融合与集成的方法
CN104866310A (zh) 知识数据的处理方法和系统
CN106776779B (zh) 基于Mac平台的JSON数据生成实体文件的方法
CN105335161B (zh) 一种从tasm时间抽象状态机到扩展nta自动机的转换方法
CN105512096B (zh) 一种基于文档中内嵌字体的优化方法及装置
CN110058849A (zh) 流程图的生成方法、装置、计算机设备以及存储介质
CN110554860B (zh) 一种软件项目自然语言编程接口nli的构造方法及代码生成方法
US8291313B1 (en) Generation of a container hierarchy from a document design

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information

Inventor after: Zhang Panfu

Inventor after: Chen Jincao

Inventor after: Jiang Kai

Inventor after: Chen Qizhi

Inventor before: Zhang Panfu

Inventor before: Jiang Kai

Inventor before: Chen Qizhi

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant