首页 > 解决方案 > 使用 Google App Script 插入包含自定义公式的新过滤器视图

问题描述

请参阅下面的示例图片。

在此处输入图像描述

我想使用 Google Sheets 脚本编辑器在单元格上添加一个过滤器视图B3,该过滤器对自定义公式进行过滤=(B4=$B$1)

计划是添加一个onEdit函数来检查单元格中的值是否B1已更改,如果是,则重置单元格中的过滤器视图B3

这让我的大脑崩溃了!一旦我的值发生变化,我似乎无法找到自动更新/刷新过滤器的方法B1

我的代码目前看起来像这样,但这不会重新添加自定义公式。它只是不断地向我展示所有非空行。

function onEdit(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheetname = "Lactation";
  var sheet = ss.getSheetByName(sheetname);
  var erow = e.range.getRow();
  //Logger.log("DEBUG: row = "+erow);
  var ecolumn = e.range.getColumn();
  //Logger.log("DEBUG: column = "+ecolumn);
  if (erow == 1 & ecolumn == 2 ){
    // there is a match so the cell is B2
    //Logger.log("DEBUG: the cell is B2");
    updatefilter();
  }
  else
  {
    // there is no match so the cell is NOT I3
    //Logger.log("DEBUG: the cell is not I3");
  }

}

function updatefilter() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B3').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .setHiddenValues(['', 'No'])
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(2, criteria);
};

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-apigoogle-sheets-filter-view

解决方案


  • 您想在Lactation编辑工作表上的单元格“B1”时修改单元格“B3:B”的基本过滤器。
    • 在这种情况下,您要使用 OnEdit 事件触发器。
  • 您想使用=(B4=$B$1)自定义公式作为过滤条件。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

  • 您可以eonEdit(e).
  • 为了使用基本过滤器的自定义功能,您可以使用whenFormulaSatisfied.

修改后的脚本:

为了运行脚本,请编辑B1工作表上的单元格Lactation

function onEdit(e){
  var sheetName = "Lactation";
  var editCell = "B1";

  var range = e.range;
  var sheet = range.getSheet();
  if (range.getA1Notation() == editCell && sheet.getSheetName() == sheetName) {
    updatefilter(sheet);
  } else {
    // do something
  }
}

function updatefilter(sheet) {
  sheet.getRange('B3').activate();
  var criteria = SpreadsheetApp.newFilterCriteria().whenFormulaSatisfied("=(B4=$B$1)").build();
  var filter = sheet.getFilter();
  if (!filter) {
    filter = sheet.getRange("B3:B").createFilter();
  }
  filter.setColumnFilterCriteria(2, criteria);
};
  • 在此脚本中,当编辑工作表上的单元格“B1”时Lactation,该函数updatefilter由 OnEdit 事件触发器运行。当基本过滤器存在时,它会被更新。当不存在过滤器时,将过滤器设置为新过滤器。过滤器的范围是“B3:B”。的自定义函数=(B4=$B$1)用作标准。

笔记:

  • 在上面的脚本中,可以使用简单的触发器。但是如果你使用要求授权的方法,当出现错误时,请尝试使用Installable Triggers。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。


推荐阅读