使用 Google 应用脚本插入包含自定义公式的新过滤器视图

Use Google App Script to insert new Filter View containing Custom Formula

请参阅下面的示例图片。

我想使用 Google 表格脚本编辑器在单元格 B3 上添加 过滤视图 ,过滤自定义公式 =(B4=$B).

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

这让我的大脑崩溃了!一旦 B1 中的值发生变化,我似乎找不到自动 update/refresh 过滤器的方法。

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

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);
};
  • 您想在编辑 sheet Lactation 上的单元格 "B1" 时修改单元格 "B3:B" 的基本过滤器。
    • 在这种情况下,您想使用 OnEdit 事件触发器。
  • 您想使用自定义公式=(B4=$B)作为过滤条件

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

修改点:

  • 您可以利用事件对象作为 onEdit(e)e
  • 为了使用基本过滤器的自定义功能,您可以使用whenFormulaSatisfied

修改后的脚本:

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

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)").build();
  var filter = sheet.getFilter();
  if (!filter) {
    filter = sheet.getRange("B3:B").createFilter();
  }
  filter.setColumnFilterCriteria(2, criteria);
};
  • 在此脚本中,当 Lactation 的 sheet 上的单元格 "B1" 被编辑时,函数 updatefilter 被 OnEdit 事件 运行扳机。当基本过滤器存在时,它会被更新。当不存在过滤器时,过滤器被设置为新过滤器。过滤器的范围是"B3:B"。 =(B4=$B)的自定义函数作为判断条件

注:

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

参考文献:

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