Лист предложений в конечном итоге должен позволять пользователю вводить различные параметры, и он предоставит им список элементов с этими параметрами. Я подозреваю, что моей попытки использовать тот же сценарий, что и для одного варианта проверки, недостаточно для обработки нескольких вариантов, но я слишком неопытен, чтобы узнать лучший путь.
Все работает, кроме этой части. Который возвращает «undefined».
var cell = ws.getRange(r,OptionDesc);
var FullOptions = ws.getRange(r, 2, 1, 7).getValues();
var listToApplyDesc = FullOptions.map(function (o) { return o[7] });
applyValidationtoCell(listToApplyDesc,cell);
Я включил полный сценарий и ссылку на копию листа, так как не уверен в себе, чтобы упростить до «минимального воспроизводимого примера».
https://drive.google.com/open?id=1Y0VT3KYD1wbj6QR1gTLepn7KtxU91rQoqRLL2Zg9-FI
var mainWsName = "Bid Sheet";
var nameData = "Data";
var Category = 2;
var ManualAutomatic = 3;
var OptionA = 4;
var OptionB = 5;
var OptionC = 6;
var OptionD = 7;
var OptionE = 8;
var OptionDesc = 9;
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
var wsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nameData);
var manAutoOption = wsData.getRange(2, 1,wsData.getLastRow()-1,9).getValues();
//Must change getLastRow Column count to include any added Options
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var designator = ws.getRange(r, 1);
var designatorValue = designator.getValue();
if (designatorValue != "x") return;//designator IF only allows the script to run on rows with x.
var wsName = activeCell.getSheet().getName();
if (wsName === mainWsName && c === Category && r > 10){
OptionsValidation (val,r);
}
}//end onEdit
//OptionsValidation required to clear Option cells on Category change
function OptionsValidation (val,r){
if(val === ""){
ws.getRange(r,ManualAutomatic, 1, 7).clearContent();
ws.getRange(r,ManualAutomatic, 1, 7).clearDataValidations();
} else {
ws.getRange(r,ManualAutomatic, 1, 7).clearContent();
//Sets a Data Validation Dropdown based off of input from Category
var filterOptions = manAutoOption.filter(function(o){ return o[0] === val });
var firstLevelColValue = ws.getRange(r, Category).getValue();
var filterOptions = manAutoOption.filter(function(o){ return o[0] === firstLevelColValue});
var listToApplyMA = filterOptions.map(function (o) { return o[1] });
var cell = ws.getRange(r,ManualAutomatic);
applyValidationtoCell(listToApplyMA,cell);
var listToApplyA = filterOptions.map(function (o) { return o[2] });
var cell = ws.getRange(r,OptionA);
applyValidationtoCell(listToApplyA,cell);
var listToApplyB = filterOptions.map(function (o) { return o[3] });
var cell = ws.getRange(r,OptionB);
applyValidationtoCell(listToApplyB,cell);
var listToApplyC = filterOptions.map(function (o) { return o[4] });
var cell = ws.getRange(r,OptionC);
applyValidationtoCell(listToApplyC,cell);
var listToApplyD = filterOptions.map(function (o) { return o[5] });
var cell = ws.getRange(r,OptionD);
applyValidationtoCell(listToApplyD,cell);
var listToApplyE = filterOptions.map(function (o) { return o[6] });
var cell = ws.getRange(r,OptionE);
applyValidationtoCell(listToApplyE,cell);
var cell = ws.getRange(r,OptionDesc);
var FullOptions = ws.getRange(r, 2, 1, 7).getValues();
var listToApplyDesc = FullOptions.map(function (o) { return o[7] });
applyValidationtoCell(listToApplyDesc,cell);
}
}
function applyValidationtoCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule);
}