为什么方法setColumnFilterCriteria()给出“无法调用方法"setColumnFilterCriteria""?无效"? [英] Why method setColumnFilterCriteria() gives 'Cannot call method "setColumnFilterCriteria" of null'?

查看:41
本文介绍了为什么方法setColumnFilterCriteria()给出“无法调用方法"setColumnFilterCriteria""?无效"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Problem seems to be very easy to solve, but I've spent a lot of time finding the answer and I'm going crazy...

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

I use very simple code to add the filetering to the sheet and I keep getting the same error:

TypeError:无法调用null的方法"setColumnFilterCriteria".

TypeError: Cannot call method "setColumnFilterCriteria" of null.

范围从第5行开始.在第50列中,我有不同的字母,包括"r".我也尝试过使用数字.

The range starts from row 5. In column 50 I have different letters, including "r". I've also tried with the numbers.

很抱歉,这种情况太简单了,但我想我不会自己解决...

Sorry if the case is too easy, but I think that I won't solve it on my own...

脚本:

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

推荐答案

问题在此行

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

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

If there exists any filter, we clearing them. Then we're doing

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

此处 getFilter()将始终返回 null ,因为我们已在上一步中清除了过滤器.

Here getFilter() will always return null, as we have cleared the filter in previous step.

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

We can fix this by clearing existing filter and creating new filter.

类似这样的东西:

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

这篇关于为什么方法setColumnFilterCriteria()给出“无法调用方法"setColumnFilterCriteria""?无效"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆