本帖最后由 Ellia.Duan 于 2024-9-2 13:52 编辑
在上一篇文章中,我们介绍了使用formulaCondition实现了类似Excel中高级筛选的功能,
在SpreadJS中封装了筛选器中“本年度截至到现在”的功能,如下图所示:
所以今天我们介绍下,如何使用formulaCondition实现筛选器中“本年度截至到现在”的功能。
首先,我们创建一点数据
1、创建数据
- sheet.setValue(0, 0, '日期', GC.Spread.Sheets.SheetArea.colHeader);
- sheet.setValue(0, 0, new Date('2023-1-1'));
- sheet.setValue(1, 0, new Date('2025-1-1'));
- sheet.setValue(2, 0, new Date('2024-1-1'));
- sheet.setValue(3, 0, new Date('2024-8-1'));
- sheet.setValue(4, 0, new Date('2024-12-1'));
- sheet.setColumnWidth(0, 200)
- sheet.getCell(-1, 0).formatter('yyyy-mm-dd')
复制代码 通过上述代码创建了五个日期,并定义formatter为'yyyy-mm-dd'。
2、创建filter
接下来,创建filter
- var filter = sheet.rowFilter();
- if (filter) {
- filter.removeFilterItems(0);
- }
- filter.addFilterItem(0, nCondition);
- filter.filter(0);
复制代码 3、定义Condition
接下来,实现上述代码中的nCondition。
我们再看一下要做的功能:“本年度截至到现在” 意思是要筛选出今年的日期,以及在当天之前的日期。
在excel中,可以用Year()来获取日期的年数据。
所以,我们用YEAR(A1)=YEAR(TODAY())来判断是否是今年,然后用A1<=TODAY()来判断是当天之前的日期。
将这两个条件组合一下,就是我们需要的公式了。
- =AND(YEAR(A1)=YEAR(TODAY()), A1<=TODAY())
复制代码 接下来定义nCondition
- var nCondition = new GC.Spread.Sheets.ConditionalFormatting.Condition(
- GC.Spread.Sheets.ConditionalFormatting.ConditionType.formulaCondition,
- {
- formula: "=AND(YEAR(A1)=YEAR(TODAY()), A1<=TODAY())",
- customValueType: GC.Spread.Sheets.ConditionalFormatting.CustomValueType.formula
- }
- );
复制代码 至此,代码部分就完成了。我们来测试下。
原始数据:
筛选后:
发现筛选后的数据,符合预期。
附件:
日期筛选.html
(2.41 KB, 下载次数: 26)
|
|