首页 > 解决方案 > 如何使用谷歌脚本按日期过滤?

问题描述

我需要根据今天的日期过滤我的电子表格。这是我使用的代码:

function myFunction() {
  var SS = SpreadsheetApp.openById("19nlPw9jF8FCFwY-qYwdBILoGDazrH12c8BgYfhwWSKA");
  var Sheet = SS.getSheetByName("All Joiners");
  var Jun = SS.getSheetByName("01 Jun");
  var data = Sheet.getRange(2, 1,Sheet.getLastRow(),Sheet.getLastColumn()).getValues();

  var criteria = SpreadsheetApp.FilterCriteriaBuilder.whenDateEqualTo(new Date(Jun.getRange("A1")))
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);

}

标签: javascriptgoogle-apps-scriptspreadsheet

解决方案


一些东西 -

  • 您的代码在 Jun 上检索单元格 A1 的范围- 您还需要获取该
  • FilterCriteriaBuilder 不是一个函数,应该是 newFilterCriteria()。
  • spreadsheet.getActiveSheet() 应该是 SS.getActiveSheet,因为您将其声明为 SS

原始代码:

var criteria = SpreadsheetApp.FilterCriteriaBuilder.whenDateEqualTo(new Date(Jun.getRange("A1"))).build(); 
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria); 

应该:

let criteria = SpreadsheetApp.newFilterCriteria().whenDateEqualTo(new Date(Jun.getRange("A1").getValue())).build();    
SS.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);

另外,附注 - 您声明了 Sheet 但没有使用它。如果您打算更新该特定工作表而不是当前活动工作表上的列过滤器,那么应​​该是 SS.getActiveSheet() 而不是:

Sheet.getFilter().setColumnFilterCriteria(4, criteria);

如果您的工作表当前没有过滤器,则必须创建它。为此,请检索Range要应用过滤器的对象,然后调用Range.createFilter()。所以那条线就像(Range是你想要的范围):

Range.createFilter().setColumnFilterCriteria(4, criteria);

此外,如果您的A1单元格是日期new Date()(而不是格式化为日期的字符串),则在设置条件时无需使用:

const criteria = SpreadsheetApp.newFilterCriteria().whenDateEqualTo(Jun.getRange("A1").getValue()).build();

推荐阅读