问题似乎很容易解决,但是我已经花了很多时间来寻找答案,而且我会发疯...
我使用非常简单的代码将过滤器添加到工作表中,并且不断出现相同的错误:
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);
*/
}
答案 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。