Скрипт для автоматического обновления фильтра в ячейке D3 - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу автоматизировать сценарий, который будет автоматически обновлять фильтр в ячейке D3, когда сотрудник меняет смену с листа сотрудника. Если нет лучшего способа отфильтровать столбец «D». Это всего лишь шаблон, на моем реальном листе Google работают около 200 сотрудников и около 150 вкладок в день недели.

Мне удалось создать кнопку действия, но мне пришлось бы обновлять ее вручную, не зная, изменился ли сотрудник. сдвиг в ведомости сотрудников, «смена») Я искал месяцы в Интернете без какого-либо результата.

Заранее спасибо.

https://docs.google.com/spreadsheets/d/1NWncSMxv0FUWrlHC8WU-ELGrfJcSvt0xjI7B7RwFyZQ/edit?usp=sharing

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете использовать триггер onEdit () , чтобы проверить, изменяете ли вы какое-либо значение в D3, а затем изменить фильтр каждого листа. Имейте в виду, что это сработает, только если изменение сделано вручную, а не скриптом или функцией:

function onEdit(e) {

  var sheet = e.source.getActiveSheet();
  var sheet_name = sheet.getName();

  //Run only if the Column C from 1 to x is edited in Sheet Employees
  if (sheet_name == 'Employee' && e.range.getColumn() == 3 && e.range.getRow() > 1){

    var new_value = e.value;
    var sprsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = sprsheet.getSheets();

    for (var i = 1; i < sheets.length; i++){

      var filter = sheets[i].getFilter();
      var values = ['WD','WE','WN']; //Values of the filter

      switch(new_value){

        case values[0]:              
          var filterCriteria = SpreadsheetApp.newFilterCriteria()
          .setVisibleValues([values[0]])
          .setHiddenValues([values[1], values[2]]);
          break;
        case values[1]:
          var filterCriteria = SpreadsheetApp.newFilterCriteria()
          .setVisibleValues([values[1]])
          .setHiddenValues([values[0], values[2]]);
          break;
        case values[2]:
          var filterCriteria = SpreadsheetApp.newFilterCriteria()
            .setVisibleValues([values[2]])
          .setHiddenValues([values[0], values[1]]);
          break;
      }

        filter.setColumnFilterCriteria(4, filterCriteria);

    }
  }
}

Я уверен, что есть более элегантный способ решить эту проблему.

ССЫЛКИ:

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