Я обновляю Google лист (вот копия) на основании некоторой помощи, которую я получил на stackexchange в прошлом году . Сценарий работает нормально, поскольку значения в столбце D заполнены, если изменен какой-либо параметр в столбцах B или C, но вместо очистки всего столбца мне интересно, возможно ли очистить указанный диапазон c ячейки в столбце, например, ячейки D6: D11, D13: D18, D20: D25 и т. д. c, так что у меня может быть заголовок, который не очищается в ячейке непосредственно над этими диапазонами (D5, D12, D19). Любая помощь будет принята с благодарностью.
Редактировать: сценарий ниже
var mainWsName = "master";
var optionsWsName = "e154simple";
var firstLevelColumn = 2;
var secondLevelColumn = 3;
var thirdLevelColumn = 4;
var ws = SpreadsheetApp.getActive().getSheetByName(mainWsName);
var wsOptions = SpreadsheetApp.getActive().getSheetByName(optionsWsName);
var options = wsOptions.getRange(2,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){
ws.getRange(3, 4, ws.getLastRow() - 1, 1).clearContent(); // Added
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){
ws.getRange(3, 4, ws.getLastRow() - 1, 1).clearContent(); // Added
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]]}); // Modified
ws.getRange(r,thirdLevelColumn,listToApply.length, 1).setValues(listToApply); // Modified
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}