CN103823793B - 基于Excel模板的动态报表实现方法 - Google Patents
基于Excel模板的动态报表实现方法 Download PDFInfo
- 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
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Excel模板的动态报表实现方法,其通过定义的数据源API获取数据,并按照内存中的报表模型,对数据进行组装,生成矩阵结构的数据,在将矩阵转换成由Html信息输出到浏览器或/和将矩阵转换成由Excel信息导出。其优点在于:复杂报表导出的问题,代码简单,缩短的报表开发周期,简化报表的开发工作,并且通过简单的培训可以达到让用户自定义新模板,调整模板的目的,开发人员不需要对报表的增加和变更进行繁琐的后期维护,节约维护成本。
Description
技术领域
本发明涉及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格式。
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)
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)
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)
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 |
-
2014
- 2014-03-05 CN CN201410078126.0A patent/CN103823793B/zh active Active
Patent Citations (4)
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 |