系列文章:
[《还在担心报表不好做?不用怕,试试这个方法》(三)]()
概要
在上一篇文章[《还在担心报表不好做?不用怕,试试这个方法》(三)]()中,小编为大家分享了数据间的主从关系及单元格布局。主要讲解数据之间的主从关系,以及如何在单元格中表示这种关系。
在本期教程中,小编将为大家分享如何在模板中解决各种分组与扩展的情况。
模板中的扩展
模板引擎如何扩展单元格
在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》(三)中,小编通过主从相关的属性(Context 以及 Range)为模板配置主从关系。以及提到了扩展相关的规则:
- 先扩展主单元格,后扩展从单元格。
- 主单元格扩展的时候,需要复制从单元格,并调整主从关系。
- 从单元格获取数据的时候要受主单元格的约束,扩展的时候要考虑调整主单元格的位置和大小。
这次我们举一个例子,让大家更好地理解如何进行数据填充的,假定现有如下的模板:
第一步:先扩展 A1 单元格,模板引擎从数据源 ds 中,获取销售公司的数据,得到两条数据。根据默认的扩展方向(向下),将数据跳至 A1 和 A2 中。同时,C1 的单元格因为主从关系,而被复制,实现结果如下:
第二步:扩展单元格 C1,模板引擎从数据源中获取销售公司为 【西安公司】的员工数据。得到三条数据,因此扩展C1,并填入数据。A1 也因为是 C1 的主单元格,从而也被复制扩展。结果如下:
第三步:继续扩展 C4 单元格。与第二步逻辑一样,结果如下:
扩展的方向
Excel作为结构化表格,本质是一个二维矩阵。因此扩展的方向,自然也只有水平,横向扩展和垂直,纵向扩展。
在刚才的例子中,A列和C列的数据扩展均是向下的。但是在有些报表中,数据是水平甚至是交叉扩展的。
因此,提供了属性 E,可以通过设置 E = H 来指定,横向扩展。
在大多数情况下,可以根据单元格主从关系来,选择扩展方向:
- 当主从单元格为左右相邻,则向下扩展。
- 当主从单元格为上下相邻,则向右扩展。
但是当主从单元格不相邻时,则可以使用 E 来指定方向。使用( E= V)向下或者向右( E= H)两个方向进行扩展,或者 E = N,不作扩展。
例子:交叉扩展
基于之前的数据表,如果希望生成的报表如下所示,是一个交叉表。那就需要合理利用扩展属性来解决问题。
为了能够生成如上的报表结果,模板应该如下设计:
ng)
在B2中,我们通过横向扩展商品类型,为系统增加了更多的选择。而A2则根据默认设置,实现了纵向扩展的功能。同时,在B2格子中,小编进行了显示指定,根据A2和B1的数据进行自动扩展。通过灵活的报表生成功能,小编能够获得之前期望的结果,提供更美观、直观的数据展示。
模板中的分组
在上述例子中,细心的读者可能已经注意到在数据源中,【销售公司】数据与【员工】数据相关联。然而,在导出后,公司名称却被自动分组去重。这正是模板填充时的一项智能功能,它能够自动为数据进行分组,从而提供更清晰、简洁的数据展示效果。这个特性使得数据处理更加美观和易于理解。
在模板属性中,可以通过分组属性 Group来处理各种分组的需求,Group 有四种属性值:
- G=Normal: 对于列中的相应记录,不重复分组依据字段的值;而是每个数据组打印一次。
- G=Merge (默认值): 行为与常规参数相同,不同之处在于它会合并每个组集的按字段分组的单元格。
- G=Repeat: 对相应的记录重复分组依据字段的值。
- G=List: 字段值针对相应的记录独立列出。
不同的属性应用在模板上会有如下效果:
Normal
模板修改如下:
生成的报表如下:
Normal 情况下,A1单元格会扩展,但是数据仅出现一次。
Merge (默认情况)
模板如下:
生成的报表如下:
Merge 即默认情况,A1单元格会扩展,数据仅出现一次,但会合并单元格。
Repeat
模板如下:
生成的报表如下:
Repeat情况下,A1单元格会扩展,且数据会被重复填充。
List
模板如下:
生成的报表如下:
在List情况下,A1单元格会自动扩展,并且数据会被重复填充。然而,这种情况下并没有进行分组,数据库中的数据被完整地列出。我们可以将List理解为不进行数据分组的方式,而其他三种情况则代表了经过分组后的不同展示方式。这种设计使得数据处理更加优雅和清晰。
总结
本章主要对模板语言中的扩展和分组进行讲解,扩展和分组是模板填充中重要且基础的概念。
本文所提到的所有内容均来自葡萄城公司的服务端表格控件产品GcExcel。如果您想了解更多信息,可以参考这篇产品文档及Demo 网站。下一期,小编将为大家介绍数据展开等其他设置是如何在模板中使用的。下一期,小编将继续为大家讲解模板填充中的其他属性及设置。
扩展链接:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。