自动刷新单元格D3中的过滤器的脚本

时间:2019-11-10 13:44:36

标签: google-apps-script

我正在寻找一个自动化脚本,当员工从员工表中更改班次时,该脚本将自动更新单元格D3中的过滤器。除非有更好的方法来过滤列“ D”。 这只是一个模板,我真正的Google工作表大约有200名员工,每个工作日大约有150个标签页功能。

我设法创建了一个操作按钮,但是我必须手动更新它,而又不知道员工在员工表上是否更改了班次,即“班次”) 我一直在网上搜索数月,没有任何结果。

谢谢。

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

1 个答案:

答案 0 :(得分:0)

您可以使用触发器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);

    }
  }
}

我敢肯定有一种更优雅的方法可以解决这个问题。

参考: