本帖最后由 Richard.Ma 于 2024-11-11 16:45 编辑
筛选列表的显示肯定是需要对数据先进行分组。然后才得到筛选项
分组的结果实际上和对数据正序排序的结果是一样的,如果你需要自定义筛选项顺序。可以重写我们暴露出来的GC.Spread.Sheets.Filter.HideRowFilter.ListValueCompareFn方法。一个简单的重写示例如下
注:下面的代码仅为针对的是对日期筛选项排序的场景,ListValueCompareFn重写的简单示例。
并不是针对于你这个场景的,实际上按照你的需求,要求过滤和你的数据行里面的顺序完全相同,你得先考虑对数据行里面的这列的单元格值数组去重,得到不重复的一个数组。然后再以此为排序基准。来在ListValueCompareFn中判断应该返回1或者-1
- var spread = new GC.Spread.Sheets.Workbook("ss");
- var sheet = spread.getActiveSheet();
- spread.suspendPaint();
- for (var row = 1; row < 50; row++) {
- sheet.setValue(row, 1, new Date(2020 + row, row, 1));
- }
- sheet.setColumnWidth(1, 200);
- sheet.rowFilter(new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(1, 1, 50, 1)));
- spread.resumePaint();
- GC.Spread.Sheets.Filter.HideRowFilter.ListValueCompareFn = function (a, b) {
- let dataTypePriority = { date: 0, number: 1, string: 2, boolean: 3, blank: 4 };
- let aValue = a.value, bValue = b.value, aValueType = a.type, bValueType = b.type;
- if (aValueType !== bValueType) {
- if (dataTypePriority[aValueType] < dataTypePriority[bValueType]) {
- return -1;
- }
- return 1;
- }
- if (aValueType === 'date' && bValueType === 'date') {
- let aYear = aValue.getFullYear(), bYear = bValue.getFullYear();
- if (aYear < bYear) {
- return -1;
- } else if (aYear > bYear) {
- return 1;
- }
- }
- if (aValueType === 'string' && bValueType === 'string') {
- aValue = aValue.toLowerCase();
- bValue = bValue.toLowerCase();
- }
- if (aValue > bValue) {
- return 1;
- }
- return aValue < bValue ? -1 : 0;
- }
复制代码
|