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

Google apps script 使用Google应用程序脚本插入包含自定义公式的新过滤器视图,google-apps-script,google-sheets,google-sheets-api,google-sheets-filter-view,Google Apps Script,Google Sheets,Google Sheets Api,Google Sheets Filter View,请参见下面的示例图片 我想使用Google Sheets脚本编辑器在单元格B3上添加一个过滤器视图,该视图根据自定义公式=(B4=$B$1)进行过滤 计划添加一个onEdit函数,用于检查单元格B1中的值是否已更改,如果已更改,则重置单元格B3中的过滤器视图 这伤了我的脑筋!当我在B1中的值发生变化时,我似乎找不到自动更新/刷新过滤器的方法 我的代码目前看起来像这样,但这不会重新添加自定义公式。它只是不断地向我显示所有非空行 function onEdit(e){ var ss = Spr

请参见下面的示例图片

我想使用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);
};
  • 当编辑工作表
    哺乳期
    上的单元格“B1”时,您希望修改单元格“B3:B”的基本过滤器。
    
    • 在本例中,您希望使用OnEdit事件触发器
  • 您希望使用自定义公式
    =(B4=$B$1)
    ,作为筛选条件
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

修改点:
  • 您可以利用事件对象作为
    onEdit(e)
    e
  • 要使用基本筛选器的自定义函数,可以在满足公式时使用
修改脚本: 要运行脚本,请编辑工作表上的单元格
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$1)").build();
  var filter = sheet.getFilter();
  if (!filter) {
    filter = sheet.getRange("B3:B").createFilter();
  }
  filter.setColumnFilterCriteria(2, criteria);
};
  • 在该脚本中,当编辑
    哺乳期
    工作表上的单元格“B1”时,OnEdit事件触发器将运行函数
    updatefilter
    。当基本过滤器存在时,它会被更新。如果不存在过滤器,则将过滤器设置为新过滤器。过滤器的范围为“B3:B”。使用
    =(B4=$B$1)
    的自定义函数作为标准
注:
  • 在上面的脚本中,可以使用简单的触发器。但是如果您使用要求授权的方法,当发生错误时,请尝试使用可安装触发器
参考资料:
如果我误解了你的问题,而这不是你想要的方向,我道歉。

  • 当编辑工作表
    哺乳期
    上的单元格“B1”时,您希望修改单元格“B3:B”的基本过滤器。
    
    • 在本例中,您希望使用OnEdit事件触发器
  • 您希望使用自定义公式
    =(B4=$B$1)
    ,作为筛选条件
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

修改点:
  • 您可以利用事件对象作为
    onEdit(e)
    e
  • 要使用基本筛选器的自定义函数,可以在满足公式时使用
修改脚本: 要运行脚本,请编辑工作表上的单元格
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$1)").build();
  var filter = sheet.getFilter();
  if (!filter) {
    filter = sheet.getRange("B3:B").createFilter();
  }
  filter.setColumnFilterCriteria(2, criteria);
};
  • 在该脚本中,当编辑
    哺乳期
    工作表上的单元格“B1”时,OnEdit事件触发器将运行函数
    updatefilter
    。当基本过滤器存在时,它会被更新。如果不存在过滤器,则将过滤器设置为新过滤器。过滤器的范围为“B3:B”。使用
    =(B4=$B$1)
    的自定义函数作为标准
注:
  • 在上面的脚本中,可以使用简单的触发器。但是如果您使用要求授权的方法,当发生错误时,请尝试使用可安装触发器
参考资料:
如果我误解了你的问题,而这不是你想要的方向,我道歉