Три часа назад я вообще не знал, как сделать зависимый выпадающий список. Теперь у меня есть столбец с проверенными данными, который при выборе данных даст раскрывающийся список для следующей ячейки. Тем не менее, я хотел бы сделать это дважды. Проблема в том, что я не знаю, как дублировать это в сценарии. Вот как я дошел до этого
Это ссылка на мой Google Sheet
Вот код, который у меня был до того, как я начал работатьна ОБРАТНОЙ СВЯЗИ столбцы. Столбцы ТЕХНИЧЕСКИЕ работают по назначению:
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw Data");
var wsTechnical = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Technical");
var technical = wsTechnical.getRange(2, 1,wsTechnical.getLastRow()-1,2).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 == "Raw Data" && c === 6 && r > 2){
if(val === ""){
ws.getRange(r, 7).clearContent();
ws.getRange(r, 7).clearDataValidations();
} else {
ws.getRange(r, 7).clearContent();
var filteredTechnical = technical.filter(function(t){ return t[0] === val });
var listToApply = filteredTechnical.map(function(t){ return t[1] });
var cell = ws.getRange(r, 7);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
Так я изменил его в надежде, что он создаст тот же поток для столбцов ОБРАТНОЙ СВЯЗИ, но он абсолютно ничего не изменил;ТЕХНИЧЕСКИЕ столбцы по-прежнему работают должным образом, но ОБРАТНЫЕ СВЯЗИ столбцы не:
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw Data");
var wsFeedback = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Feedback");
var feedback = wsFeedback.getRange(2, 1,wsFeedback.getLastRow()-1,2).getValues();
var wsTechnical = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Drop Downs - Technical");
var technical = wsTechnical.getRange(2, 1,wsTechnical.getLastRow()-1,2).getValues();
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCel1.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == "Raw Data" && c === 4 && r > 2){
if(val === ""){
ws.getRange(r, 5).clearContent();
ws.getRange(r, 5).clearDataValidations();
} else {
ws.getRange(r, 5).clearContent();
var filteredFeedback = feedback.filter(function(f){ return f[0] === val });
var listToApply = filteredFeedback.map(function(f){ return f[1] });
var cell = ws.getRange(r, 5);
applyValidationToCell(listToApply,cell);
}
}
}
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 == "Raw Data" && c === 6 && r > 2){
if(val === ""){
ws.getRange(r, 7).clearContent();
ws.getRange(r, 7).clearDataValidations();
} else {
ws.getRange(r, 7).clearContent();
var filteredTechnical = technical.filter(function(t){ return t[0] === val });
var listToApply = filteredTechnical.map(function(t){ return t[1] });
var cell = ws.getRange(r, 7);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule)
}
Любая помощь будет приветствоваться!
Редактировать: Опять же, я почти ничего не знаю о сценариях и хорошо .. . все это. Если хотите, пожалуйста, дайте мне ответ. Спасибо!