首页 > 其他分享 >还在担心报表不好做?不用怕,试试这个方法(二)

还在担心报表不好做?不用怕,试试这个方法(二)

时间:2024-02-21 09:59:40浏览次数:28  
标签:报表 试试 数据源 单元格 不用 workbook 数据 ds 模板

前言

在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》中,小编分享了如何使用模板语言生成报表的过程。今天小编进一步介绍模板语言中一些基本的概念和用法,因此读者可以配合上一篇文章一起看。

本文介绍的内容有:

  • 模板文件
  • 绑定数据源
  • 单元格扩展
  • 模板属性
  • 分组
  • 排序
  • 公式

1. 模板文件

在报表生成的过程,需要提供一个模板用于填充数据和整理报表的布局,样式以及模板语言等业务相关的设计,都包含在模板文件中。通常这个模板可以用Excel设计来实现。

2. 绑定数据源

在Excel中准备好模板配置(包含绑定字段、表达式、公式、工作表字段)后,需要将这些字段绑定一个数据源。模板支持三种数据源,ResultSet(结果集)、对象实例和Json。

(1)ResultSet(结果集):

代码示例:

Workbook workbook = new Workbook();
workbook.open("template.xlsx");
ResultSet resultSet = getDataFromDataBase();
workbook.addDataSource("ds", resultSet);
workbook.processTemplate();

(2)对象实例

代码示例:

Workbook workbook = new Workbook();
workbook.open("template.xlsx");
Data data = new Data();
workbook.addDataSource("ds",data);
workbook.processTemplate();

(3)JSON

代码示例:

Workbook workbook = new Workbook();
workbook.open("template.xlsx");
String json = "{\"name\":\"john\",\”score\”,100}";
workbook.addDataSource("ds", new JsonDataSource(json));
workbook.processTemplate();

3. 单元格扩展

在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》中,小编曾经提过模板语言是通过 "{{}}" 将数据源及字段名包括在内,表示在特定单元格中填充数据。而当处理模板时,模板引擎会根据数据路径从数据源中去寻找对应的数据。如果找到的数据只有一个,那么就用数据替换“{{}}”,如果对应的是一组数据,则填充数据时会自动扩展单元格。

假设现在有一个模板如下:

当我们把这个模板和前面的数据源结合在一起运行后,将看到下面的结果:

从上表中可以看出,因为员工是一组数据,所以模板引擎会在 A1 单元格的位置下面插入一些单元格,用来放置多出来的数据。这种行为策略被称为“扩展”。

在模板中,扩展有两个方向,纵向(垂直向下)和横向(水平向右),其中默认为纵向扩展。如果希望横向扩展,可以使用 Expansion 属性。例如下图所示,小编将{{ds.员工}} 改为 {{ds.员工(Expansion=Horizontal)}}。

数据源填充后的结果如下:

4. 模板属性

在第三步单元格扩展中,小编使用到了 Expansion 属性,来指定单元格横向扩展。实际上,对于模板语言而言,其提供了一组模板属性,用来配置各种设置,如分组,排序,分页,父子关系等,也包括刚才使用到的扩展。

模板属性的语法有以下特点:

  1. 使用半角小括号括起来 "()"
  2. 放在绑定字段的后面。例如 ”ds.员工“
  3. 可以使用缩写,如 E = H
  4. 当需要设置多个属性时,使用逗号 "," 分割,如 (E=H, S=Desc)

下图是一个例子,其绑定名为 ds 的数据源,员工字段,并且横向扩展,降序排列。

因为篇幅原因,这里不做过多扩展,如果您想了解更多信息可以点击这里查看。

5. 分组

再回到模板示例来看,虽然数据源中员工字段的数据并不唯一,但是在生成的报表中,员工名字做了去重。这是因为分组模板属性 Group (G)中有四种值:

  • Merge (M) 默认值,表示数据去重,并且将相同值的单元格合并在一起
  • List (L) 平铺数据源中的数据,不做任何分组或去重
  • Normal (N) 数据中的每种值仅出现一次,但是相同值的单元格不合并在一起
  • Repeat (R) 将父子单元格一起进行分组,并且相同值的单元格不合并在一起

以List为例,小编将模板的 Group 设置为 List:

显示结果如下:

6. 排序

在第五步分组的例子中,虽然小编按照List的形式将数据进行展示,但是可以发现报表中数据的顺序并不一致。这是因为当没有指定 Group 时,默认的 Merge 会自动排序。但当 Group 为 List 时,则不会排序,因此还需要对数据进行排序设置:

和分组一样,排序也提供了一个模板属性 Sort (S),包括下面三个值:

  • Ascending (ASC) 升序排列
  • Descending (DESC) 降序排列
  • None 与数据源保持一致,不做排序

同样地,如果希望不做任何排序,与数据源保持一致时,我们应该按下图设计模板,

显示结果如下:

7. 公式

在大多数情况下,数据源所提供的数据就是报表所需的直接结果,数据源可能来自数据库,第三方数据服务,前端传输的数据。组织数据以及数据源结构,也是业务逻辑的一环,为了进一步解耦,将业务独立包含在模板文件中。

目前模板语言支持以下几种函数:

  • Sum
  • Count
  • Max
  • Min
  • Min
  • Product
  • StdDev
  • StdDevp
  • Var
  • Varp

以Sum函数为例,假设小编现在需要计算所有数据销量之和,在单元格中直接使用公式“{{=sum(ds.销量)}}”即可。

在模板引擎处理模板,填充数据时,会根据公式进行计算,并且将结果填充至单元格内。如下图所示:

更多公式相关的内容,可以参考产品文档以及在线示例

总结

本文所提到的所有内容均来自葡萄城公司的服务端表格控件产品GcExcel。如果您想了解更多信息,可以参考这篇产品文档Demo 网站

扩展链接:

Redis从入门到实践

一节课带你搞懂数据库事务!

Chrome开发者工具使用教程

如何在Web应用中添加一个JavaScript Excel查看器

高性能渲染——详解HTML Canvas的优势与性能

标签:报表,试试,数据源,单元格,不用,workbook,数据,ds,模板
From: https://www.cnblogs.com/powertoolsteam/p/18003401

相关文章

  • JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具
    项目介绍一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!Web版报表设计器,类似于excel操作风格,通过拖拽完成报表设计。秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、节......
  • RDLC 报表导出Excel 多列合并问题
    将Rdlc报表导出Excel后,会出现多列数据合并的情况,问题如下图: 后来查看了rdlc报表的相关使用,发现原因是大标题的文本框的左右两边,没有与列对齐,在报表中修改下样式,如下图: 此时再次导出Excel,多列合并的问题就没有了。......
  • EAS_查询某个sql在扩展报表的哪个sql数据集中
    ==========查询报表sql数据集是否包含某个表============SELECTCASEWHENDBMS_LOB.INSTR(fcontent,utl_raw.cast_to_raw('T_NT_EndorsementBillEntry'))>0THEN'found'ELSE'notFo......
  • table布局为什么不用了?
    table就应该是用来做表格展示。而不应该用它做页面布局。table是一个html标签。它在老旧的项目里用来做网页布局。table布局的优点当然是四四方方,它跟网页排版有种莫名的契合感。把页面看作是一个表格来进行排版。但是,它也有它致命的缺点。就是它不够灵活自由。假如你的页面......
  • idea修改jetty代码后不用重启项目
    确保是Debug模式 注意:上面还有个是:updateresources,这个配置应该是只会更新JS和JSP这些,而不会重新编译class文件,如果选择updateclassesandresources会重新编译java文件和JSP,js,相当于热部署。(这个有时候会报错不能删除jar包,多切换几次上面的更新的......
  • SAP 获取自开发报表数据
    有时候开发报表的时候需要用到其他自开发报表的数据,但是重新写逻辑又显得很复杂,所以通过以下的代码可以直接获取到自开发报表的结果数据,其中的ty_show结构原则上来说和引用的自开发报表结构一致,或者更少。DATA:gt_resTYPESTANDARDTABLEOFty_show.DATA:ls_resTYPER......
  • 大学电路搜题软件哪个好?寻找完美解答?试试这款大学搜题工具
    大学生搜题软件是一种方便快捷的工具,可以帮助大学生们在解答问题和完成作业时节省时间和精力。1.快解题这是一个网站是一款服务于职业考证的考试搜题软件,拥有几千万不同考试医学考试题库和执业医师试题库,通过章节练习,模拟试题,历年真题等练习来让不同的用户学习和巩固知识,使他......
  • 零侵入!试试这款Api接口文档生成器!
    大家好,我是Java陈序员。作为一名合格的程序员,不仅代码要写好,而且文档要写好。虽然目前有成熟的框架可以快速生成接口文档,如大名鼎鼎的Swagger.但是Swagger需要编写大量的注解来辅助生成文档,侵入了业务代码。不符合高内聚、低耦合的编程规范!今天,给大家介绍一款零侵入的Api......
  • AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
    AI绘画平台难开发,难变现?试试StableDiffusionAPIServerless版解决方案136人阅读14分钟前分享全屏显示Stable Diffusion 模型,已经成为 AI 行业从传统深度学习时代走向 AIGC 时代的标志性里程碑。越来越多的开发者借助 stable-diffusion-webui (以下简称 SDWeb......
  • 还在担心报表不好做?不用怕,试试这个方法
    前言在各种业务场景中,我们经常需要生成各种报表,例如学校中的学生成绩表、商业场景中的销售单和发票单、测量检测场景中的检测报告等等。这些报表对于组织和管理数据非常重要,因为它们提供了直观、清晰的方式来展示和分析数据。一般情况下,使用Excel设计和生成这些报表就可以,但是随......