我正在尝试使用脚本在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);
};
原始代码的问题是您设置了错误的过滤条件类型。如果我们查看FilterCriteriaBuilder
的可用方法,则会注意到有一种方法FilterCriteriaBuilder
。
由于whenFormulaSatisfied
是公式,而不是纯文本/数字值,因此应使用它代替whenFormulaSatisfied
。您的原始过滤器实际上正在应用,但是由于该列中没有单元格值包含文字'=INDIRECT("BWLRankings!B2")'
,因此没有单元格被过滤掉。