[]
        
(Showing Draft Content)

排序

概述

GcExcel 报表模板,提供了排序属性,允许您对数据进行排序,包括:

  • 单列排序

  • 多列排序

  • 指定规则排序

  • 表达式排序(即将以上几种排序,组合使用)

排序规则

Sort 属性('S')定义了模板内的排序类型。此属性适用于由相应单元格值确定的单个或多个列。排序功能不仅限于按升序和降序排序;它允许对单个或多个列应用自定义排序规则。

理解排序的内在规则,可以更好的帮您制作模板,以及得到预期的排序结果。

1. 基于展开结果排序

GcExcel的排序并不是基于数据源进行排序,而是基于展开后的结果,这样的好处是可以对公式的结果进行排序。

例如:

希望对表达式字段排序 {{ =A18*0.05 }} ,需要先计算完结果,才能排序。

如果您希望在数据填充前排序,目前可以在数据填充前,通过 Java 代码直接对数据源进行排序。

2. 排序属性的含义

排序属性所设置的字段位置,表示对该字段进行排序。排序属性显示定义的列或者规则,则表示排序的依据。

例如:

  • {{ds.field(S=Desc)}} : 表示对 field 字段排序,依据为 field 字段的降序顺序。

  • {{ds.OrderID(S=(C12,D12 desc),G=List)}}:表示对 OderID 字段排序,依据是先以 C12 列展开后升序的顺序,再以 D12 列展开后数据降序的顺序进行排序。

3. 基于树形结构的排序规则

因为排序是基于展开的结果,当数据展开后,结构是一棵树。那就会产生一个问题,如果希望对一个节点进行排序,那排序的结果合适

可以参考下图所生成的数据表。

image

City中有一些合并的单元格,我们可以理解为后续单元格数据的父节点。而 Name,Category,Sales 则形成了 City 的子孙节点。

排序的本质是互换整行数据,对于树形结构,原理相同。因此为了保持数据正确性,当排序时,根据排序的字段,会对所有先祖节点按行互换,子孙节点则整棵树随着行一起交换。

示例:

如下图所示,A 行与 B 行是可以排序互换的两行,C 与 D, E 与 F 是可以互换的两行。

但是为了保证数据的正确,A 与 C 或者 B 与 D 无法互换。

C 与 E 或者 D 与 F 也不能互换。

image

基于树形结构的排序,可以延伸开到所有的情况。

对于 G = List,平铺开的数据,我们可以假设所有的数据都有一个父节点 worksheet。这样也会符合树形结构排序的原理及规律。

image

排序属性

单列排序

语法:

image

单列排序,仅会对当前字段进行排序:

  • Asc (默认值): 升序

  • Desc : 降序

  • None: 不排序,使用数据源中的顺序

示例:

{{ds.field(S=Desc)}}

下图表示了模板字段是如何根据他们的排序类型进行展开的,您也可以下载下面例子所使用的模版文件。

单列排序-模板文件.xlsx

image

多列排序

语法:

image

与单列排序不同,多列排序需要指定待排序的模板单元格的 cell Range。当不显示制定排序值时,即默认使用升序。

示例:

{{ds.OrderID(S=(C12,D12 desc),G=List)}}

下面的例子展示了 Order ID 列如何根据 C12(Date 列升序)和 D12(Sales 列降序)两列进行排序,您也可以下载下面例子所使用的模版文件。

多列排序-模板文件.xlsx

image

指定规则排序

语法:

image

有时,排序并不遵循字符串排序,您可以通过制定排序规则对数据进行排序。

示例:

{{ds.City(S=(A12 desc {"New York", "Chicago", "Minnesota", "Santiago", "Fremont", "Quito", "Medillin", "Buenos Aires"}))}}

下图展示了City列,如何根据自定义规则进行排序,您也可以下载下面例子所使用的模版文件。

制定规则排序-模板文件.xlsx

image

表达式排序:

语法:

image

GcExcel 允许您将不同的排序方式组合起来使用,例如对 A1 的列使用升序,对B1的列使用自定义排序。

示例:

{{ds.City(S=(A12 desc {"New York", "Chicago", "Minnesota", "Santiago", "Fremont", "Quito", "Medillin", "Buenos Aires"}, D12), G = List)}}

下图展示了City 列,如何根据自定义规则进行排序,并且同时对 Sales 列降序排列,您也可以下载下面例子所使用的模版文件。

表达式排序-模板文件.xlsx

image