google-apps-script - 为什么方法 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);
*/
}
解决方案
问题在这一行
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);
推荐阅读
- php - Select2 从数据库中获取已经输入的信息并进行编辑
- email - Azure DevOps Multi Repo 电子邮件通知缺少来自第二个 repo 的提交
- google-bigquery - 为什么在 BigQuery GCP Console 中使用“所有者”帐户创建表时出现权限被拒绝错误?
- r - 循环中的反应评估
- c# - 仅使用 SMO 复制数据
- reactjs - 你如何为宽数据类型编写 redux reducer?
- laravel - Laravel 中的 Json 格式
- css - Quill 编辑器 html 类无法在电子邮件正文中设置样式
- javascript - 使用 javscript 测试特定形状的输入字段
- r - R 空“”行无法删除