如何通过gas构建包含特定文本的过滤器

问题描述 投票:0回答:2

我有一个运行良好的脚本

function setFilter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var filterSettings = {};
  filterSettings.range = {sheetId: ss.getSheetByName("mySheet").getSheetId()};
  filterSettings.criteria = {};
  filterSettings['criteria'][4] = {
    'hiddenValues': ["FALSE"]
  };
  var request = {
    "setBasicFilter": {
      "filter": filterSettings
    }
  };
  Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}

E 栏内

={"test";arrayformula(if(B2:B="",,not(iserror(find("mike",B2:B)))))}
  • 我想通过当文本在 B 列(1)中包含“某物”时替换 E 列(4)上的隐藏值 FLASE,我尝试过
    'textContains': ['mike']
    但这不起作用
  • 是否可以创建一个过滤器视图而不是基本过滤器
google-apps-script google-sheets google-sheets-api
2个回答
1
投票

问题:

您必须在字段

TEXT_CONTAINS
下定义
condition

解决方案:

替换这个:

filterSettings['criteria'][4] = {
  'hiddenValues': ["FALSE"]
};

有了这个:

filterSettings['criteria'][1] = {
  "condition": {
    "type": "TEXT_CONTAINS",
    "values": [
      {
        "userEnteredValue": "mike"
      }
    ]
  }
};

备注:

  • criteria
    已弃用,请考虑使用 filterSpecs 代替。
  • 我之前没有注意到你的第二个问题。有关创建过滤器视图的信息,请参阅管理过滤器视图

参考:


0
投票

如果电子表格上已有过滤器。 抓住现有的过滤器并使用过滤条件生成器。

https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#whenTextContains(String)

const sheet = activeRange.getSheet();
const filter = sheet.getFilter();
const criteria = SpreadsheetApp.newFilterCriteria()
  .whenTextContains('mike')
  .build();

/* to reset the filter 
const removeCriteria = SpreadsheetApp.newFilterCriteria()
  .whenTextContains('')
  .build();  
*/
// The "3" below says put the filter in the 4th column of the filter. 
filter.setColumnFilterCriteria(3, criteria);
© www.soinside.com 2019 - 2024. All rights reserved.