Ваша строка
if(wsName === mainWsName && c === firstLevelColumn && r > 4){
содержит оператор if
, который запускает функцию applyFirstLevelValidation(val,r)
только при условии, что имя редактируемого листа равно mainWsName
, при этом
var mainWsName = "One";
Теперь, если вы хотите запустить функцию для более чем одного листа:
Вам необходимо создать дополнительные переменные для всех интересующих названий листов и сравнить имя отредактированного листа с все эти переменные с оператором ||
.
Необходимо передать отредактированное имя листа wsName
в функцию applyFirstLevelValidation
, чтобы убедиться, что код применяется к правильному листу.
Образец:
var mainWsName1 = "One";
var mainWsName2 = "Two";
var optionsWsName = "STOK";
var firstLevelColumn = 5;
var secondLevelColumn = 6;
var thirdLevelColumn = 7;
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
// compare the edited sheet name against multiple allowed sheet anmes with ||
if(wsName == mainWsName1 || wsName == mainWsName2 && r > 4){
if(c == firstLevelColumn){
applyFirstLevelValidation(val,r, wsName);
} else if(c == secondLevelColumn){
applySecondLevelValidation(val,r, wsName);
}
}
}
function applyFirstLevelValidation(val,r,wsName){
// obtain the sheet name dynamically from the onEdit() function
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(wsName);
if(val == ""){
ws.getRange(r, secondLevelColumn).clearContent();
ws.getRange(r, secondLevelColumn).clearDataValidations();
ws.getRange(r, thirdLevelColumn).clearContent();
ws.getRange(r, thirdLevelColumn).clearDataValidations();
} else {
ws.getRange(r, secondLevelColumn).clearContent();
ws.getRange(r, secondLevelColumn).clearDataValidations();
ws.getRange(r, thirdLevelColumn).clearContent();
ws.getRange(r, thirdLevelColumn).clearDataValidations();
var filteredOptions = wsOptions.getDataRange().getValues().filter(function(o){ return o[0] ==
val }); // <--- Modified
var listToApply = filteredOptions.map(function(o){ return o[1] });
var cell = ws.getRange(r, secondLevelColumn);
applyValidationToCell(listToApply,cell);
}
}
function applySecondLevelValidation(val,r, wsName){
//change in the same way as function applyFirstLevelValidation
}