找回密码
 立即注册

QQ登录

只需一步,快速开始

Ellia.Duan SpreadJS 开发认证
超级版主   /  发表于:2024-9-2 13:50  /   查看:510  /  回复:0
本帖最后由 Ellia.Duan 于 2024-9-2 13:52 编辑

在上一篇文章中,我们介绍了使用formulaCondition实现了类似Excel中高级筛选的功能,
在SpreadJS中封装了筛选器中“本年度截至到现在”的功能,如下图所示:
image.png889996642.png


所以今天我们介绍下,如何使用formulaCondition实现筛选器中“本年度截至到现在”的功能。

首先,我们创建一点数据
1、创建数据
  1.         sheet.setValue(0, 0, '日期', GC.Spread.Sheets.SheetArea.colHeader);
  2.         sheet.setValue(0, 0, new Date('2023-1-1'));
  3.         sheet.setValue(1, 0, new Date('2025-1-1'));
  4.         sheet.setValue(2, 0, new Date('2024-1-1'));
  5.         sheet.setValue(3, 0, new Date('2024-8-1'));
  6.         sheet.setValue(4, 0, new Date('2024-12-1'));

  7.         sheet.setColumnWidth(0, 200)

  8.         sheet.getCell(-1, 0).formatter('yyyy-mm-dd')
复制代码
通过上述代码创建了五个日期,并定义formatter为'yyyy-mm-dd'。
2、创建filter
接下来,创建filter
  1. var filter = sheet.rowFilter();
  2.             if (filter) {
  3.                 filter.removeFilterItems(0);
  4.             }

  5. filter.addFilterItem(0, nCondition);
  6.             filter.filter(0);
复制代码
3、定义Condition
接下来,实现上述代码中的nCondition。
我们再看一下要做的功能:“本年度截至到现在” 意思是要筛选出今年的日期,以及在当天之前的日期。
在excel中,可以用Year()来获取日期的年数据。
所以,我们用YEAR(A1)=YEAR(TODAY())来判断是否是今年,然后用A1<=TODAY()来判断当天之前的日期。
将这两个条件组合一下,就是我们需要的公式了。
  1. =AND(YEAR(A1)=YEAR(TODAY()), A1<=TODAY())
复制代码
接下来定义nCondition
  1.      var nCondition = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  2.                 GC.Spread.Sheets.ConditionalFormatting.ConditionType.formulaCondition,
  3.                 {
  4.                     formula: "=AND(YEAR(A1)=YEAR(TODAY()), A1<=TODAY())",
  5.                     customValueType: GC.Spread.Sheets.ConditionalFormatting.CustomValueType.formula
  6.                 }
  7.             );
复制代码
至此,代码部分就完成了。我们来测试下。
原始数据:
image.png939273071.png
筛选后:
image.png398773192.png
发现筛选后的数据,符合预期。
附件: 日期筛选.html (2.41 KB, 下载次数: 26)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部