[]
GcExcel 报表模板,提供了排序属性,允许您对数据进行排序,包括:
单列排序
多列排序
指定规则排序
表达式排序(即将以上几种排序,组合使用)
Sort 属性('S')定义了模板内的排序类型。此属性适用于由相应单元格值确定的单个或多个列。排序功能不仅限于按升序和降序排序;它允许对单个或多个列应用自定义排序规则。
理解排序的内在规则,可以更好的帮您制作模板,以及得到预期的排序结果。
GcExcel的排序并不是基于数据源进行排序,而是基于展开后的结果,这样的好处是可以对公式的结果进行排序。
例如:
希望对表达式字段排序 {{ =A18*0.05 }}
,需要先计算完结果,才能排序。
如果您希望在数据填充前排序,目前可以在数据填充前,通过 Java 代码直接对数据源进行排序。
排序属性所设置的字段位置,表示对该字段进行排序。排序属性显示定义的列或者规则,则表示排序的依据。
例如:
{{ds.field(S=Desc)}} : 表示对 field 字段排序,依据为 field 字段的降序顺序。
{{ds.OrderID(S=(C12,D12 desc),G=List)}}:表示对 OderID 字段排序,依据是先以 C12 列展开后升序的顺序,再以 D12 列展开后数据降序的顺序进行排序。
因为排序是基于展开的结果,当数据展开后,结构是一棵树。那就会产生一个问题,如果希望对一个节点进行排序,那排序的结果合适
可以参考下图所生成的数据表。
City中有一些合并的单元格,我们可以理解为后续单元格数据的父节点。而 Name,Category,Sales 则形成了 City 的子孙节点。
排序的本质是互换整行数据,对于树形结构,原理相同。因此为了保持数据正确性,当排序时,根据排序的字段,会对所有先祖节点按行互换,子孙节点则整棵树随着行一起交换。
示例:
如下图所示,A 行与 B 行是可以排序互换的两行,C 与 D, E 与 F 是可以互换的两行。
但是为了保证数据的正确,A 与 C 或者 B 与 D 无法互换。
C 与 E 或者 D 与 F 也不能互换。
基于树形结构的排序,可以延伸开到所有的情况。
对于 G = List,平铺开的数据,我们可以假设所有的数据都有一个父节点 worksheet。这样也会符合树形结构排序的原理及规律。
语法:
单列排序,仅会对当前字段进行排序:
Asc (默认值): 升序
Desc : 降序
None: 不排序,使用数据源中的顺序
示例:
{{ds.field(S=Desc)}}
下图表示了模板字段是如何根据他们的排序类型进行展开的,您也可以下载下面例子所使用的模版文件。
语法:
与单列排序不同,多列排序需要指定待排序的模板单元格的 cell Range。当不显示制定排序值时,即默认使用升序。
示例:
{{ds.OrderID(S=(C12,D12 desc),G=List)}}
下面的例子展示了 Order ID 列如何根据 C12(Date 列升序)和 D12(Sales 列降序)两列进行排序,您也可以下载下面例子所使用的模版文件。
语法:
有时,排序并不遵循字符串排序,您可以通过制定排序规则对数据进行排序。
示例:
{{ds.City(S=(A12 desc {"New York", "Chicago", "Minnesota", "Santiago", "Fremont", "Quito", "Medillin", "Buenos Aires"}))}}
下图展示了City列,如何根据自定义规则进行排序,您也可以下载下面例子所使用的模版文件。
语法:
GcExcel 允许您将不同的排序方式组合起来使用,例如对 A1 的列使用升序,对B1的列使用自定义排序。
示例:
{{ds.City(S=(A12 desc {"New York", "Chicago", "Minnesota", "Santiago", "Fremont", "Quito", "Medillin", "Buenos Aires"}, D12), G = List)}}
下图展示了City 列,如何根据自定义规则进行排序,并且同时对 Sales 列降序排列,您也可以下载下面例子所使用的模版文件。