【问题标题】:Google Script for Sheets: Set multiple filtersGoogle Script for Sheets:设置多个过滤器
【发布时间】:2018-07-20 18:35:00
【问题描述】:

我有一个关于将过滤器应用于多个值以使用 Google 脚本隐藏它们的问题。我有一个项目跟踪器,它具有多种状态,例如目标、已完成、已取消、已延迟等。我想编写一个脚本来设置状态列的过滤器值,以便标记为“已完成”或“已取消”被隐藏。我已经编写了下面的代码 sn-p 用于隐藏已完成状态,如何添加已取消?感谢您的帮助。

//Below code has been written to hide rows with status = Completed. 
//I'd like to modify it to hide rows with status = Completed AND rows with status = Canceled.

function SetFilters() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var ssId = spreadsheet.getId();
var sheet = spreadsheet.getSheetByName("Project Tracker");

var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var sheetId = sheet.getSheetId();

var filterSettings = {
  "range": {
    "sheetId": sheetId,
    "startRowIndex": 0,
    "endRowIndex": lastRow,
    "startColumnIndex": 0,
    "endColumnIndex": lastColumn
  }
};

filterSettings.criteria = {};
var columnIndex = 2;
filterSettings['criteria'][columnIndex] = {
  'hiddenValues': ["Completed"]
};

var requests = [{
  "setBasicFilter": {
    "filter": filterSettings
  }
}];
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);

}

【问题讨论】:

  • 您查看过FilterCriteria 的文档吗?快速阅读它可以很好地了解要尝试什么,所以......你尝试了什么?
  • @tehhowch。作为脚本的新手,如何修改现有的隐藏值字符串以包含“已取消”状态?我确实检查了过滤条件,但无法弄清楚。我尝试使用 "hiddenValues": ["Completed", "Canceled"] 但这似乎不起作用。另外,在否决问题之前先问一下尝试过的问题不是更好吗?
  • 您总是可以从另一端处理这个“我该怎么做”——在 UI 中设置过滤器,然后使用 API 请求现有的过滤器数据。然后,您可以轻松地将输入语法与应有的语法进行比较。
  • 请记住,我对 Google Apps 脚本非常陌生。我在业务项目管理团队工作,并创建了这个跟踪器来帮助我们的产品经理报告他们的状态。我很感激直接回答我的问题,否则我会等待其他人回答这个问题。我不知道如何做你推荐的任何事情。
  • 使用 Google APIs Explorer。例如,您使用 spreadsheets.get 查询电子表格元数据(例如 basicFilter),其中包含此 API Explorer 页面。它有一个交互式部分响应编辑器、悬停文本等。hiddenValues: [ "A", "B", "C", ... "stuff" ] 是对多个隐藏值的FilterCriteria 的正确初始化。 PS:“它不起作用”不是有效的问题描述。

标签: google-apps-script filtering google-sheets-api


【解决方案1】:

无需使用高级表格服务。我们可以使用Filter class 可用。

function setFilters() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("Project Tracker");
  var rang = sh.getDataRange();
  var filtercriteria = SpreadsheetApp.newFilterCriteria().setHiddenValues(["Completed","Cancelled"]).build();//used Cancelled NOT Canceled; Create criteria with two hidden values
  var filter = rang.getFilter() || rang.createFilter();// getFilter already available or create  a new one
  filter.setColumnFilterCriteria(2, filtercriteria);//set the criteria against Col2 (B column)
}

【讨论】:

  • OP 的工作表文本可能是 Canceled 而不是 Cancelled
  • 非常感谢。感谢您花时间解释解决方案。帮助像我这样的新手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多