Ellia.Duan 发表于 2024-9-2 13:50:35

formulaCondition用法(二)

本帖最后由 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
                }
            );至此,代码部分就完成了。我们来测试下。
原始数据:

筛选后:

发现筛选后的数据,符合预期。
附件:

页: [1]
查看完整版本: formulaCondition用法(二)