Guest User

Untitled

a guest
May 16th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var mainWsName = ["Car", "Dota"];
  2. var optionsWsName = {Car: "Car_L", Dota: "Heroes"};
  3. var firstLevelColumn = 1;
  4. var secondLevelColumn = 2;
  5. var thirdLevelColumn = 3;
  6. var ws;// = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
  7. var wsOptions;// = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
  8. var options;// = wsOptions.getRange(1, 1, wsOptions.getLastRow(),3).getValues();
  9.  
  10. function onEdit(e) {
  11.   var activeCell = e.range;
  12.   var val = activeCell.getValue();
  13.   var r = activeCell.getRow();
  14.   var c = activeCell.getColumn();
  15.   var wsName = activeCell.getSheet().getName();
  16.   ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  17.   wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName[wsName]);
  18.   options = wsOptions.getRange(1, 1, wsOptions.getLastRow(),3).getValues();
  19.   Logger.log(ws.getName(), wsOptions.getName());
  20.   if (mainWsName.indexOf(wsName)>-1 && c === firstLevelColumn && r > 1) {
  21.     applyFirstLevelValidation(val,r );
  22.   } else if (mainWsName.indexOf(wsName)>-1 && c === secondLevelColumn && r > 1) {
  23.         applySecondLevelValidation(val,r );
  24.   }
  25. } //end onEdit
  26.  
  27. function applyFirstLevelValidation(val,r ) {
  28. if (val === "") {
  29.       ws.getRange(r, secondLevelColumn).clearContent();
  30.       ws.getRange(r, secondLevelColumn).clearDataValidations();
  31.       ws.getRange(r, thirdLevelColumn).clearContent();
  32.       ws.getRange(r, thirdLevelColumn).clearDataValidations();
  33.     } else {
  34.     ws.getRange(r, secondLevelColumn).clearContent();
  35.     ws.getRange(r, secondLevelColumn).clearDataValidations();
  36.     ws.getRange(r, thirdLevelColumn).clearContent();
  37.     ws.getRange(r, thirdLevelColumn).clearDataValidations();
  38.     var filteredOptions = options.filter(function(o) { return o[0] === val });
  39.     var listToApply = filteredOptions.map(function(o) { return o[1] });
  40.     var cell = ws.getRange(r, secondLevelColumn);
  41.     applyValidationToCell(listToApply,  cell);
  42. }
  43. } //end FirstLevel
  44.  
  45. function applySecondLevelValidation(val,r ) {
  46. if (val === "") {
  47.       ws.getRange(r, thirdLevelColumn).clearContent();
  48.       ws.getRange(r, thirdLevelColumn).clearDataValidations();
  49.     } else {
  50.     ws.getRange(r, thirdLevelColumn).clearContent();
  51.     var firstLevelColValue = ws.getRange(r, firstLevelColumn).getValue();
  52.     var filteredOptions = options.filter(function(o) { return o[0] === firstLevelColValue && o[1] === val });
  53.     var listToApply = filteredOptions.map(function(o) { return o[2] });
  54.     var cell = ws.getRange(r, thirdLevelColumn);
  55.     applyValidationToCell(listToApply,  cell);
  56. }
  57. } //end SecondLevel
  58.  
  59. function applyValidationToCell(list,  cell) {
  60.   var rule = SpreadsheetApp.newDataValidation().requireValueInList(list).setAllowInvalid(false).build();
  61.   cell.setDataValidation(rule);
  62.  }
Advertisement
Add Comment
Please, Sign In to add comment