使用GAS应用用户定义的过滤器(实现表格搜索功能)

问题描述 投票:0回答:1

我正在尝试使用脚本在Google表格中实现搜索功能,但遇到了最后一个障碍。我只想知道是否有人可以看到脚本中出了什么问题?

我使用下面的代码非常接近预期结果(预期结果是表格是根据在单元格B2中输入的用户条件自动过滤的,但是,似乎并未实际应用该过滤器。

这是我从运行当前脚本时看到的:-onEdit正在检测对单元格B2的更改-清除过滤器中的任何现有条件-使用单元格B2中的(用户定义)条件创建了一个新的过滤器(位于单元格B4中的标题上)-未应用过滤器。用户必须手动打开过滤器并点击“应用”

显然,粗体部分不应发生。它需要自动应用。

function onEdit(evt)
{
  var range = evt.range;

  if (range.getRow() == 2 && range.getColumn() == 2)
  {
    ClearFilter();
    Utilities.sleep(200);
    ApplyFilter();
  }
  else
  {
    Logger.log("Edit out of range");
  }
}


function ClearFilter() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B4').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(2);
}


function ApplyFilter() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B4').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .whenTextContains('=INDIRECT("BWLRankings!B2")')
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(spreadsheet.getActiveRange().getColumn(), criteria);
};
search google-apps-script google-sheets filter
1个回答
0
投票

原始代码的问题是您设置了错误的过滤条件类型。如果我们查看FilterCriteriaBuilder的可用方法,则会注意到有一种方法FilterCriteriaBuilder

由于whenFormulaSatisfied公式,而不是纯文本/数字,因此应使用它代替whenFormulaSatisfied。您的原始过滤器实际上正在应用,但是由于该列中没有单元格值包含文字'=INDIRECT("BWLRankings!B2")',因此没有单元格被过滤掉。

© www.soinside.com 2019 - 2024. All rights reserved.