性能碾压-POI-利用模板语法快速生成-Excel-报表

5次阅读

共计 6275 个字符,预计需要花费 16 分钟才能阅读完成。

本期讲师:刘鹏 GcExcel 项目组,外围开发者

Hello,大家好,本期葡萄城技术公开课,将由我来为大家带来《性能碾压 POI!利用模板语法疾速生成 Excel 报表》的技术分享。

本期课程,咱们将借助服务端表格组件 GcExcel 的模板语法来实现 Excel 报表的生成,通过应用简略的语法标记,能够在不借助任何第三方组件的状况下,联合数据源,自动化地生成 Excel 模板文件。

目前,GcExcel 能够生成的文件格式包含 XLSX、PDF、SSJSON 以及 HTML。在公开课上,我将具体介绍 GcExcel 的模板性能,并教大家如何应用模板生成 Excel 报表,欢送大家预约本期公开课,7 月 10 日 下午 14:00,期待您的准时收看。

收费预约地址:https://live.vhall.com/120821085

GcExcel 的模板性能简介

GcExcel 的模板性能是一个高级性能,它提供了一组标记,使用户能够通过简略的语法,疾速制作出一个 Excel 模板文件。而后,联合数据源,自动化地生成文件。

要应用这个性能,请返回 GcExcel 产品官网下载试用最新版本。

工作机制:

  1. 首先,咱们须要筹备一个模板文件(不限于 Excel 文件,也能够是 GcExcel 的模板实例)
  2. 有了模板文件,咱们就能够联合数据源和 GcExcel 的模板引擎,实现自动化生成模板文件的性能,从而防止了手动输出大量数据的工作

GcExcel 的模板性能工作机制

代码示例:


// 重要的 4 个步骤:

//1\. 关上模板文件(.xlsx)

//2\. 增加并命名数据源

//3\. 解决模板,调用接口 IWorkbook.processTemplate()

//4\. 保留已解决的文件

IWorkbook workbook = new Workbook();

workbook.open("template.xlsx"); // 关上模板文件

workbook.addDataSource("ds", *getData());* // 增加并命名数据源

workbook.processTemplate(); // 解决模板

workbook.save("result.xlsx");// 导出解决后的文件

模板样例:

· Tablix 报告:该模板次要用于设计简单表头款式,如行和列题目中存在多行、表头中存在小计行等。

· 员工缺勤打算:该模板应用了条件格局,它通过一个工作表名称,在独自的工作表中显示每个月的数据。

· 商品详情:该模板应用了模板属性 “image=true”,即在模板解决后把图片字段的数据显示为图片。

留神:上述模板的展现成果并非 GcExcel 的性能,而是借助了 SpreadJS 纯前端表格控件进行可视化展现。

应用模板生成 Excel 的基本概念和步骤详解

通过上一节,置信大家曾经对 GcExcel 的模板性能有了肯定的意识,上面我会具体介绍如何应用模板来生成 Excel 报表。

根本语法:

  1. GcExcel 中模板的定义:

· 应用 {{和}} 作为标记符,用以定义模板。

· 在这两个标记符之间,用户能够定义数据字段、函数、表达式等。

· GcExcel 提供了丰盛的属性,用以配置并更改默认行为。

  1. 模板的用法:

· 能够以字符串的模式,设置在 Excel 单元格中。

· 目前,一个单元格只能应用一个模板。

  1. 代码示例:

 {{ds.name}} {{ds.students.name}}

 {{=sum(ds.score)}}

 {{=ds.count*ds.price}}
  1. 模板属性

· 定义:在 GcExcel 的模板中,能够用键值对的模式配置属性。

· 用法:{{模板(属性名 1 = 属性值 1, 属性名 2 = 属性值 2, …)}}

在模板尾部,应用一对圆括号作为标记,能够在其中配置各种属性。

属性用等于号 (=) 作为分隔符,以键值对的模式定义。多个属性之间用逗号分隔。

· 示例:{{ds.name(Context=D5, Group=list)}}

GcExcel 的模板属性过多,在本期公开课上就不一一解说了,感兴趣的同学能够返回 GcExcel 产品官网的学习指南中理解更多。

GcExcel 提供了十分丰盛的模板类型,能够满足不同场景下的业务须要,罕用的模板类型包含:数据模板、函数模板、表达式模板、公式模板、工作表模板和内联模板。

模板类型:

数据模板:用来从数据源提取纯数据的模板类型。

· 用法:在模板标记符内,应用圆点 (.) 作为名称分隔符,批示数据拜访门路:{{数据源名称. 字段名}}

· 示例:{{ds.name}}

其中,ds 为数据源名称,是用户通过代码设置数据源时指定的;name 为数据库字段名,或自定义代码对象的属性名;

数据模板示例

函数模板:该模板内置了 10 种统计函数:Sum, Count, Average, Max, Min, Product, StdDev, StdDevp, Var, Varp

· 用法:在模板标记符内,以单个等号 (=) 结尾。参数名为数据模板,或者数据模板在表格中的地位名称。目前,这些函数只反对单个参数,也就是说,只能对单个数据字段进行统计。如:{{= 函数名(参数名)}}

· 示例:

{{=Sum(ds.score)}} 对数据 ds.score 进行求和;

{{=Sum(A6)}} 对表格中 A6 单元格里的数据模板进行求和

函数模板示例

表达式模板:该模板反对以下操作符组成的四则运算表达式:’+’, ‘-‘, ‘*’, ‘/’ 和 ‘()’

· 用法:在模板标记符内,以单个等于号 (=) 结尾。表达式由操作符、数据字段、地位名称组成。如:{{= 表达式}}

· 示例:

{{=ds.count*ds.price}}

{{=A18+D18-G18}}

{{=(A18+A20)*0.3}}

表达式模板示例

公式模板:该模板通过 GcExcel 的解决后,对应单元格间接生成 Excel 公式,而不只是数值。

· 用法:在模板标记符内,以两个等于号 (==) 结尾。经公式模板解决后,公式中的单元格援用,也会依据最终后果进行调整。能够反对任意 Excel 公式。如:{{==Excel 公式}}

· 示例:{{==SUM(C15, D15)}}

公式模板示例

工作表模板:在 Excel 工作表的表名中,应用模板。

· 用法:与数据模板雷同。经模板解决后,GcExcel 将依据工作表模板对应的用户数据,为每条数据生成独立的 Excel 工作表。并且,每个工作表中仅展现与以后表名数据对应的内容。

工作表模板示例

内联模板:在单元格内容中应用的模板,叫作内联模板。

· 用法:你好,{{ds.name}}!通过内联模板,能够把模板嵌入到单元格的内容中,自定义展现后果。目前,一个单元格只能嵌入一个模板类型。

· 示例:销售总额:{{=SUM(C15)}} 万元

根底概念:

这部分次要会解说制作模板文件时须要留神的一些重要概念,如单元格扩大、上下文和区域上下文。

单元格扩大:一个模板单元格,在解决实现后,会扩大为多个单元格。

· 扩大方向: 能够应用属性 E(extension)来为模板配置扩大方向,例如:{{ds.name(E=H)}}

· 扩大方向分为:

  • 垂直扩大:从上到下扩大,记作 V(vertical);
  • 程度扩大:从左到右扩大,记作 H(horizontal);

· 留神:一个模板只能有一种扩大方向,默认为垂直扩大。

· 单元格扩大示例:

上下文:一个模板在数据处理过程中,所要参考的对象,咱们称之为它的上下文. 就像在语文浏览了解中,要确定一个词语的具体含意,须要参考它所处地位前后语句一样。在模板文件中,两个相邻模板单元格之间,会默认造成一种分组与过滤的关系,咱们称之为模板之间的上下文关系(Context)。以后模板单元格在解决后的最终后果,须要参考它所属的上下文模板来决定。

· 上下文单元格:一个模板单元格,作为其余模板的上下文时,被称为上下文单元格。一个上下文单元格,依据其扩大方向的不同,又被称为程度上下文和垂直上下文。

o 程度上下文单元格,通常位于其余单元格的上边;

o 垂直上下文单元格,通常位于其余单元格的右边;

o 一个模板最多能够领有一个程度上下文和一个垂直上下文。

· 上下文单元格示例:

o A2 模板受其程度上下文模板 A1 的影响,在程度方向进行了分组。

o A2 模板的数据,则在各组内,默认依照垂直方向扩大显示。

· 默认上下文:由 GcExcel 模板引擎自动识别各个模板之间的上下文关系。

o 辨认规定:相邻的右边单元格为模板单元格并且扩大类型 (Expansion) 是 Vertical,则选中作为以后单元格的上下文节点;相邻的上边单元格为模板单元格并且扩大类型 (Expansion) 是 Horizontal,则选中作为以后单元格的上下文节点;非相邻模板之间不产生默认上下文关系。如果有须要,用户必须通过 Context 属性显式指定。

o 条件:地位和扩大类型两个条件,缺一不可。

o 示例:

· 上下文属性:能够通过属性 C(context) 来被动指定一个模板的上下文,常见的有以下几种设置形式:

  • 无:(C=None)。即没有上下文,以后模板独立扩大。

  • 默认:用户不指定上下文属性,由模板引擎自动识别上下文。

  • 自定义: 用户被动指定以后模板的上下文,能够是数据字段或单元格地位。

· 示例:

  • 一个上下文:(C=A15) (C=ds.Team)
  • 两个上下文:(C=A3B2) (C=ds.Teamds.City)
  • 两个上下文之间须要用星号 (*) 分隔。
  • 目前不反对两个以上的上下文。

区域上下文:有些场景下,存在大量模板的上下文是雷同的状况,此时通过 Context 属性一一设置,会十分繁琐。因而,GcExcel 推出了区域上下文的性能,能够应用 R(range) 属性,为一个模板单元格设置一个区域值,该模板称为区域上下文模板。如:{{ds.Team(R=A5:G10)}}

在该区域内,所有单元格都会被视作模板。并且,区域内任何的一个模板如果既没有显式设置上下文,又无奈找到默认上下文,则它会应用区域上下文作为其上下文模板。

· 区域值:由冒号 (:) 分隔的两个单元格所造成的矩形区域。(下图中的所有元素:数据、款式等都应该以人员名称作为上下文。)

款式设置:

· 单元格款式:模板的款式能够通过 Excel 的单元格款式零碎进行设置,款式能够作用到相应模板的每一条数据上。

· 示例:

模板数据源:

代码示例:


// 步骤:

//1\. 关上模板文件(.xlsx)

//2\. 增加并命名数据源

//3\. 解决模板,调用接口 IWorkbook.processTemplate()

//4\. 保留已解决的文件

IWorkbook workbook = new Workbook();

workbook.open("template.xlsx"); // 关上模板文件

workbook.addDataSource("ds", *getData());* // 增加并命名数据源

workbook.processTemplate(); // 解决模板

workbook.save("result.xlsx");// 导出解决后的文件

自定义对象: 用户通过代码,定义和创立的数据对象。把对象增加为数据源后,能够将相应的属性名,作为数据模板的名称来应用。如:ds.name

对于嵌套对象,能够用点号 (.) 组成一个链式拜访门路。如:ds.student.father.name

  1. 自定义对象

public class SalesData{public List<SalesRecord> sales;}

 public class SalesRecord{

 public String area;

 public String city;

 public String category;

 public String name;

 public double revenue;

}
  1. 数据源配置

SalesData datasource = new SalesData();

… // 设置数据

… // 设置数据

 // 增加数据源

workbook.addDataSource("ds", datasource);
  1. 数据源应用

{{ds.sales.category}}
{{ds.sales.name}}

{{ds.sales.revenue}}

变量:用户通过代码定义的变量,可作为独自的数据源,增加至模板中。

· 示例代码:


// 定义变量

String className = "一年级三班";

int [] records=new int[30];

List<String> students = new ArrayList<String>();

 // 增加数据源

workbook.addDataSource("className", className);

workbook.addDataSource("records",  records);

workbook.addDataSource("students",  students);

// 援用

{{className}}

{{records}}

数据库对象:

GcExcel 反对将数据库的后果集,作为数据源应用:

  • Java 语言,反对的是 java.sql.ResultSet;
  • .Net 语言,反对的是 DataTable;

留神:用户须要本人建设数据库链接,并将数据读取至对应的后果集,而后作为数据源,增加到模板中。

数据库表中的字段名,即列名,能够作为数据模板的字段名称。

· 示例代码:


// 获取数据库后果

java.sql.ResultSet datasource = new GcMockResultSet(…);

 // 增加数据源

workbook.addDataSource("ds",  datasource);

// 援用

{{ds.Category}}

{{ds.City}}

JSON 文件:

用户能够应用 JSON 文件作为数据源。在此之前,用户须要把 JSON 文件读取并序列化成自定义对象,而后作为数据源应用。事实上,任何能够序列化的数据,都能够用这种形式,转换成模板数据源。如:XML 文件,csv 文件等。

· 示例代码:


// 从 JSON 文件获取数据

InputStreamReader reader = new InputStreamReader(this.getResourceStream("Template_FamilyInfo.json"));

Gson gson = new Gson();

// 数据序列化

StudentInfos datasource = gson.fromJson(reader, StudentInfos.class);

 // 增加数据源

workbook.addDataSource("ds", datasource);

经典模板展现

后果文件:

左表头:

上表头:

数据区域:

统计我的项目:

除了上述模板,GcExcel 还反对更多模板类型:如图片、图表、迷你图、条件格局等,能够帮忙大家制作十分丑陋且内容丰盛的统计表、帐目表和个人简历。

更多精彩内容,欢送返回我的公开课理解,7 月 10 日 下午 14:00,期待与大家不见不散。

收费预约地址:https://live.vhall.com/120821085

对于服务端表格组件 GcExcel

GrapeCity Documents for Excel(简称:GcExcel)是一款基于 Java 平台的服务端高性能表格组件,可与 纯前端表格控件 SpreadJS 前后端兼容,无需依赖 Office、POI 或第三方应用软件,在前端展现电子表格数据,在服务端批量创立、加载、编辑、打印、导入 / 导出 Excel 文档,为您开发的应用程序提供在线文档的前后端数据同步、在线填报与服务端批量导出与打印,以及类 Excel 报表模板设计与服务端高性能解决等一整套 类 Excel 全栈解决方案。

正文完
 0