更改特定单元格时自动刷新过滤器

时间:2019-06-19 10:51:15

标签: google-apps-script google-sheets

我在A列中有一个简单公式,根据单元格I3的值,该列针对行返回True或False。此刻,每次更改单元格I3的值时,都必须手动转到过滤器,然后选择“确定”以刷新它。可以将其运行为由对单元格I3的任何编辑触发的脚本吗?

https://docs.google.com/spreadsheets/d/1H2lkC-rQKjdL_7A8t0_mNNzk4OJr0iQi0wsja0rQ-7w/edit#gid=893032115

2 个答案:

答案 0 :(得分:1)

是的,如果单元格I3被编辑,则可以使过滤器自动化。我不是过滤器方面的专家(特别是脚本编写者),因此我创建并重新使用了宏。

  1. 创建一个宏,用于选择过滤器并“选择是”。将宏重命名为有意义的名称。
  2. 创建一个onEdit(e)脚本。评估单元格I3是否已编辑;如果是,请运行宏

function onEdit(e){

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheetname = "P&L";
  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 == 3 || ecolumn == 8 ){
    // there is a match so the cell is I3
    // Logger.log("DEBUG: the cell is I3");
    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('V3').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .setHiddenValues(['', 'No'])
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(22, criteria);
};

答案 1 :(得分:0)

您可以从脚本中执行以下操作

function setFilter() {
  var ss = SpreadsheetApp.getActive();
  var tab = ss.getSheetByName("tabName")
  var filter = {};
  filter.range = {
    sheetId: tab.getSheetId()
  };

  filter.criteria = {};
  // Which column to add the filter to
  var columnIndex = 2;
  filter['criteria'][columnIndex] = {
    'hiddenValues': ["No"]
  };
  var request = {
    "setBasicFilter": {
      "filter": filter
    }
  };
  Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}

代码未经测试 添加一个按钮以调用该函数。