Попытка заставить трехуровневый зависимый раскрывающийся список работать на нескольких листах, используя appscript - PullRequest
1 голос
/ 09 октября 2019

Я смог заставить свой лист работать без проблем на одном листе, но мне нужна возможность использовать сценарий на нескольких листах одной и той же книги, проблема, с которой я сталкиваюсь, - это отсутствие изоляции, которая назначена в настоящее время. он будет редактировать каждую страницу с любыми изменениями. У кого-нибудь есть какие-либо идеи? Вот код, который я использую для сценария:

var mainWSName = "Tracker";
var optionsWsName = "Reference";
var firstLevelColumn = 1;
var secondLevelColumn = 2;
var thirdLevelColumn = 3;

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWSName);
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
var options = wsOptions.getRange(12, 1,wsOptions.getLastRow()-1,3).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
if (wsName === mainWSName && c === firstLevelColumn && r > 1){
applyFirstLevelValidation(val,r);
} else if(wsName === mainWSName && c === secondLevelColumn && r > 1){
applySecondLevelValidation(val,r)
}


}//end onEdit

function applyFirstLevelValidation(val,r){

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 = options.filter(function(o){return o[0] === val });
var listToApply = filteredOptions.map(function(o){ return o[1]});
var cell = ws.getRange(r,secondLevelColumn);
 applyValidationToCell(listToApply,cell);
}

}



function applySecondLevelValidation(val,r){

if(val === ""){
ws.getRange(r, thirdLevelColumn).clearContent();
ws.getRange(r, thirdLevelColumn).clearDataValidations();
} else {
ws.getRange(r, thirdLevelColumn).clearContent();
var firstLevelColValue = ws.getRange(r, firstLevelColumn).getValue();
var filteredOptions = options.filter(function(o){return o[0] === firstLevelColValue && o[1] === val });
var listToApply = filteredOptions.map(function(o){ return o[2] });
var cell = ws.getRange(r,thirdLevelColumn);
 applyValidationToCell(listToApply,cell);
}

}

function applyValidationToCell(list,cell) {

 var rule = SpreadsheetApp
 .newDataValidation()
 .requireValueInList(list)
 .setAllowInvalid(false)
 .build();

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