[17.1.5]筛选顺序问题
本帖最后由 Joestar.Xu 于 2024-11-14 14:56 编辑图一:筛选框顺序图二:实际数据顺序筛选框的顺序和我实际的顺序不一致,怎么解决呢?
本帖最后由 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 < dataTypePriority) {
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;
}
页:
[1]