Search code examples
validationgoogle-sheetsgoogle-apps-scripttriggers

Can I do Data Validation in code (Google Sheets)?


I have the following script that runs on the 'onEdit' trigger (that part is working just fine)

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var myRange = SpreadsheetApp.getActiveRange();

  if(sheet.getName() == "Plan" && myRange.getColumn() == 2 && myRange.getRow() > 3){
    var option = new Array();
    option[0]="0";
    option[1]="1";
    option[2]="2";
    var dv = sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).getValidation();
    dv.setAllowInvalidData(false);
    dv.setHelpText("Some help text here");
    dv.setCriteria(SpreadsheetApp.DataValidationCriteria.ITEM_IN_LIST,true,option );
    sheet.getRange(myRange.getRow(),myRange.getColumn() + 1) .setValidation(dv); 
  }
}

That most of the code came from the answer on this question. Problem is that the

dv.setCriteria(SpreadsheetApp.DataValidationCriteria.ITEM_IN_LIST,true,option );

line of code doesn't work, the compiler won't even let me save it. In my looking around as to why, it seems Google has changed how it is handled, and taken their docs about it offline.


Solution

  • yep it seems something changed...

    try that:

    function onEdit() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = SpreadsheetApp.getActiveSheet();
      var myRange = SpreadsheetApp.getActiveRange();
    
      if(sheet.getName() == "Plan" && myRange.getColumn() == 2 && myRange.getRow() > 3){
        var option = new Array();
        option[0]="0";
        option[1]="1";
        option[2]="2";
        //    var dv = sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).getValidation();
        var dv = sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).getDataValidation();
        var dv = SpreadsheetApp.newDataValidation();
        //    dv.setAllowInvalidData(false);
        dv.setAllowInvalid(false);  
        dv.setHelpText("Some help text here");
        dv.requireValueInList(option, true);
    //    dv.setCriteria(SpreadsheetApp.DataValidationCriteria.ITEM_IN_LIST,true,option );
    //    sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).setValidation(dv); 
        sheet.getRange(myRange.getRow(),myRange.getColumn() + 1).setDataValidation(dv.build()); 
      }
    }