首页 > 解决方案 > 为什么方法 setColumnFilterCriteria() 给出“不能调用 null 的方法“setColumnFilterCriteria”?

问题描述

问题似乎很容易解决,但我花了很多时间寻找答案,我快疯了......

我使用非常简单的代码将过滤器添加到工作表中,但我不断收到相同的错误:

TypeError:无法调用 null 的方法“setColumnFilterCriteria”。

范围从第 5 行开始。在第 50 列中,我有不同的字母,包括“r”。我也试过数字。

对不起,如果案件太容易了,但我认为我不会自己解决它......

脚本:

function filtering() {

var sheet = SpreadsheetApp.getActiveSheet();

//remove filter and flush
if(sheet.getFilter() != null){sheet.getFilter().remove();}
SpreadsheetApp.flush();

var criteria = SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(10).build();  
// I've also tried commented lines
// var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains("r").build();  
// var criteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('r').build();  
// var criteria = SpreadsheetApp.newFilterCriteria().setHiddenValues(["r"]).build();  
// var criteria = SpreadsheetApp.newFilterCriteria().setVisibleValues(["r"]).build();

sheet.getFilter().setColumnFilterCriteria(50, criteria);

//also I've tried with the range
/*
var range = sheet.getRange(5, 1, 100, 50);
range.getFilter().setColumnFilterCriteria(50, criteria);
*/
}

标签: google-apps-script

解决方案


问题在这一行

if(sheet.getFilter() != null) {
     sheet.getFilter().remove();
}

如果存在任何过滤器,我们将清除它们。然后我们在做

sheet.getFilter().setColumnFilterCriteria(50, criteria);

这里getFilter()将始终返回null,因为我们在上一步中清除了过滤器。

我们可以通过清除现有过滤器并创建新过滤器来解决此问题。

像这样的东西:

if(sheet.getFilter() != null) {
     sheet.getFilter().remove();
}
sheet.getDataRange().createFilter().setColumnFilterCriteria(50, criteria);

推荐阅读