Monday, 1 March 2021

Google Sheets - Dependent Drop Down List for Entire Column, Multiple Levels

 

  var mainWsName = "Master";
  var sourceWsName = "Slave";

    var firstLevelColumn = 1;
   var secondLevelColumn = 2;
   var thirdLevelColumn = 3;
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
  var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sourceWsName);

  var optionswsOptions.getRange(2,1,wsOptions.getLastRow()-1,3).getValues();
 

/*function myFunction() {

  var list = ["a","b","c"];
  var cell = ws.getRange("C2");
  applyValidationToCell(list,cell);
}*/


function onEdit(e){
  var activeCell=e.range;

  var valactiveCell.getValue();
  var r=activeCell.getRow();
  var c =activeCell.getColumn();
  var wsNameactiveCell.getSheet().getName();
  if (wsName === mainWsName && c === firstLevelColumn && r > 1){
applyFirstLevelValidation(val,r);
else if(wsName === mainWsName && c === secondLevelColumn && r > 1){}
applySecondLevelValidation(val,r);

}

function applyFirstLevelValidation(val,r){
  
  if (val === ""){
  ws.getRange(r,secondLevelColumn).clearContent();
  ws.getRange(r,secondLevelColumn).clearDataValidations();
 
}else{
ws.getRange(r,secondLevelColumn).clearContent();
  var filterOptions=  options.filter(function(o){return o[0]=== val});
  var listToApply = filterOptions.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 firstLevelColValuews.getRanger,firstLevelColumn).getValue();
  var filterOptions=  options.filter(function(o){return o[0]=== firstLevelColValue && o[1] === val});
  var listToApply = filterOptions.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);
}

No comments:

Post a Comment