为什么方法setColumnFilterCriteria()给出“无法调用方法“ setColumnFilterCriteria”为null”的信息?

时间:2019-08-20 11:32:45

标签: google-apps-script

问题似乎很容易解决,但是我已经花了很多时间来寻找答案,而且我会发疯...

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

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);
*/
}

2 个答案:

答案 0 :(得分:2)

问题在这一行

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);

答案 1 :(得分:1)

因为您的工作表上没有过滤器。问题出在sheet.getFilter()中,但不在您的条件中。 根据文档:

  

getFilter()返回此工作表中的过滤器,如果没有过滤器,则返回null。