Bruke 2 stk datavalideringslister i Google Sheets, der liste nr 2 velges ut ifra hva som blir valgt i liste nr 1
function onEdit(e) {
//SpreadsheetApp.getActive()
var sh = e.source.getActiveSheet(),
allValues, list,
/* easy to change' variables */
sheet = 'NavnPåArk',
sheetWithLists = 'NavnPåArkMedLister',
rangeWithLists = 'C1:G10', //Område med lister, der første rad er overskriftene (liste 1)
colValidation = 2, //1=A, 2=B... Kolonnen med første liste
secondValidationOffset = 1; //forskyvningskolonner mot høyre til neste kolonne med lste
/*check conditions*/
if (sh.getName() !== sheet || e.range.columnStart !== colValidation || e.range.rowStart < 2 || typeof e.value == 'object') return;
/*get all values from the sheet with the lists (cached after the first run)*/
allValues = getFromCache_(sheetWithLists, rangeWithLists)
/*get the correct list(column) and remove the header*/
list = allValues.map(function (v, i) {
return v[allValues[0].indexOf(e.value)]
}).splice(1);
/*set the validation in offset column*/
e.range.offset(0, secondValidationOffset)
.setDataValidation(SpreadsheetApp.newDataValidation()
.requireValueInList(list)
.build());
}
function getFromCache_(sheetName, range) {
var key = 'DE_' + sheetName,
c = CacheService.getPublicCache(),
d,
t = c.get(key);
if (t) {
d = JSON.parse(t);
} else {
d = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName(sheetName)
.getDataRange()
.getValues();
c.put(key, JSON.stringify(d));
}
return d;
}