我正在寻找一个自动化脚本,当员工从员工表中更改班次时,该脚本将自动更新单元格D3中的过滤器。除非有更好的方法来过滤列“ D”。 这只是一个模板,我真正的Google工作表大约有200名员工,每个工作日大约有150个标签页功能。
我设法创建了一个操作按钮,但是我必须手动更新它,而又不知道员工在员工表上是否更改了班次,即“班次”) 我一直在网上搜索数月,没有任何结果。
谢谢。
https://docs.google.com/spreadsheets/d/1NWncSMxv0FUWrlHC8WU-ELGrfJcSvt0xjI7B7RwFyZQ/edit?usp=sharing
答案 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);
}
}
}
我敢肯定有一种更优雅的方法可以解决这个问题。
参考: