排序
本文描述了什么是排序,以及如何通过文档模型使用排序。它包括以下各节:
什么是排序?
排序功能允许根据一个或多个排序条件排列数据。
有关应用于工作表的排序的信息包含在工作表属性中SortState这是一种类型SortState.通过它,您可以设置和修改工作表排序条件。所有排序条件实现的接口为ISortCondition.
SortState
的SortState类公开以下公共成员:
数:当前应用的排序条件的个数。
SortConditions:当前应用的排序条件。
SortRange: CellRange类型的属性,表示应用排序条件的排序范围。工作表一次只能排序一个范围。如果没有应用排序,则排序范围为空。
void Set(CellRange sortRange, params ISortCondition[] sortConditions):将指定的排序条件设置为指定的范围。
空白Clear ():从工作表中移除所有排序。
ISortCondition
可应用于排序范围的所有排序条件都实现ISortCondition接口。接口公开了以下成员:
SortIndex:获取应用排序条件的列的索引。索引相对于排序范围的开始。
IComparer
比较器 :确定排序值的顺序。对象GetValue(Cells Cells, int rowIndex, int columnIndex):获取位于指定索引的单元格的值。此值用于确定在排序过程中如何对包含该值的单元格进行排序。
图中图1属性继承的不同类型的条件ISortCondition接口,以及实现它们的类。
图1:条件的类型
OrderedSortCondition
有序排序条件是一种按升序或降序对值进行有序排序的条件类型。它由抽象类表示OrderedSortConditionBase
类的成员之外,该类有一个额外的成员ISortCondition接口:
排序方式:排序顺序。它可以有以下值之一:
提升
下行
ValuesSortCondition
值排序条件是使用单元格的值对它们进行排序的条件。
示例1控件创建ValuesSortCondition.
例1:创建ValuesSortCondition
ValuesSortCondition条件=新的ValuesSortCondition(0, SortOrder.Ascending);
该条件将使用预定义的比较器以直观的升序对选定范围内的单元格的值进行排序。结果是可见的图2.
图2:值排序结果
CustomValuesSortCondition
有时预定义比较器的行为是不够的。在这种情况下,您可能希望使用自定义值排序条件。使用它,您可以指定您希望值排序的顺序。
示例2展示如何创建CustomValuesSortCondition。
例2:创建CustomValuesSortCondition
CustomValuesSortCondition条件= new CustomValuesSortCondition(0, new string[] {"regular", "1 day", "2 days", "express"}, SortOrder.Ascending);
图3:自定义值排序结果
ForeColorSortCondition
前色排序条件根据单元格中文本的颜色对单元格进行排序。每个条件可以有一种颜色,它设置在排序顺序的顶部或底部。
示例3控件创建ForeColorSortCondition.此条件将通过将所有前色为红色的单元格放在顶部来对范围进行排序。
例3:创建ForeColorSortCondition
ForeColorSortCondition条件=新的ForeColorSortCondition(0,新的ThemableColor(Colors.Red), SortOrder.Ascending);
FillColorSortCondition
填充颜色排序条件根据填充颜色对单元格进行排序。每个条件可以有一个填充,它设置在排序顺序的顶部或底部。
示例4控件创建FillColorSortCondition.
例4:创建FillColorSortCondition
FillColorSortCondition条件= new FillColorSortCondition(0, PatternFill.CreateSolidFill(颜色。FromArgb(255, 181, 18, 27)), SortOrder.Ascending);
图4显示此条件将通过将所有带有红色的单元格放在顶部来对范围进行排序。
图4:填充颜色排序结果
设置排序条件
排序工作表上的范围有两种方法:使用SortState属性,或通过单元格选择。在这两种情况下,您都需要创建一个排序条件,然后应用它。
注意,不像有过滤,可以在一列上应用多个排序条件。事实上,如果你想按多个颜色排序,这就是你需要做的。
示例5演示如何创建三个排序条件。
例5:创建条件
工作表Worksheet = workbook.ActiveWorksheet;CustomValuesSortCondition condition1 = new CustomValuesSortCondition(5, new string[] {"regular", "1 day", "2 days", "express"}, SortOrder.Ascending);FillColorSortCondition条件2 = new FillColorSortCondition(7, PatternFill.CreateSolidFill(颜色。FromArgb(255, 181, 18, 27)), SortOrder.Ascending);FillColorSortCondition条件3 = new FillColorSortCondition(7, PatternFill.CreateSolidFill(颜色。FromArgb(255,94,151,50)), SortOrder.Ascending);
此外,例子6控件应用排序条件SortState财产。
例6:通过SortState设置条件
worksheet.SortState。Set(new CellRange(3,0,17,7), condition1, condition2, condition3);
另外,例7显示如何通过单元格选择属性应用排序条件。
例7:通过选择设置条件
工作表。细胞[3,0,17,7]。排序(条件1,条件2,条件3);
无论你选择哪一种,结果都是一样的。条件将按照您设置的顺序应用。在图5你可以看到,在这个例子中,行首先被F列的自定义列表重新排列,然后红色被放在上面,绿色被放在后面,在每个由F列中具有相同值的行组成的部分中。
图5:设置条件的结果
清除排序
为了清除排序,可以使用Clear ()方法SortState财产。如果你想设置新的排序条件,不需要清除旧的排序条件,它们将在内部被清除。
示例8演示如何清除排序。
例8:清除排序
worksheet.SortState.Clear ();