Автоматически обновить фильтр при изменении определенной ячейки - PullRequest
0 голосов
/ 19 июня 2019

У меня есть простая формула в столбце A, которая возвращает True или False для строк в зависимости от значения ячейки I3.На данный момент, каждый раз, когда я меняю значение ячейки I3, мне нужно вручную переходить к фильтру и выбирать «ОК», чтобы обновить его.Может ли это быть запуск сценария, который запускается при любом изменении ячейки I3?

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

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Да, вы можете автоматизировать фильтр, если ячейка 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);
};
0 голосов
/ 19 июня 2019

Вы можете сделать это из скрипта примерно так:

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());
}

Код не проверен Добавьте кнопку для вызова функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...