Google Script: How to apply Data Validation Rule for Specific Sheet when somone add New Rows -


situation:

i have following script, runs when add new rows. script should detect sheet , apply datavalidation or action when specific sheet have new rows.

problem:

this script run apply datavalidation sheet called "isp1", when add new rows in sheet "isp2" re apply datavalidation in sheet "isp1".

some part of script should run every sheets somes part when specific sheet have new rows.

function addnew rows: a link

script:

function initializetrigger(){ // run once create trigger if necessary   var sheet = spreadsheetapp.getactive();  scriptapp.newtrigger("datavalidation")    .forspreadsheet(sheet)    .onchange()    .create(); }  function datavalidation(e){   logger.log(e.changetype);   if(e.changetype=='insert_row'){     //      //datavalidation - in column b     var cell1 = spreadsheetapp.getactivesheet().getrange('b3:b');     var rule1 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['open', 'closed']).build();       cell1.setdatavalidation(rule1);                //datavalidation - in column c     var cell2 = spreadsheetapp.getactivesheet().getrange('c3:c');     var rule2 = spreadsheetapp.newdatavalidation()     .setallowinvalid(true).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['y','n']).build();       cell2.setdatavalidation(rule2);         //datavalidation - in column d & isp1     var ss = spreadsheetapp.getactivesheet();     if(ss.getname() == "isp1"){     var cell3 = ss.getrange('d3:d');     var rule3 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['datco', 'xfr mda2', 'sch call']).build();       cell3.setdatavalidation(rule3);      var cell4 = ss.getrange('i3:i');     var rule4 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['1:00:00', '2:00:00', '12:00:00', '24:00:00']).build();       cell4.setdatavalidation(rule4);        }        //datavalidation - in column d & isp2     var ss = spreadsheetapp.getactivesheet();     if(ss.getname() == "isp2"){     var cell5 = ss.getrange('d3:d');     var rule5 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['noc', 'cus', 'datco', 'comer']).build();       cell5.setdatavalidation(rule5);      var cell6 = ss.getrange('i3:i');     var rule6 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['0:15:00', '0:20:00', '1:00:00']).build();       cell6.setdatavalidation(rule6);       }      browser.msgbox('new row(s) added, data validation completed');   } } 

this script should run , apply datavalidation when add new rows specif sheets.
-column b&c should run active sheet.
-column d&i should run when add new rows specif sheet isp1 or isp2


other script tested:

both script run onchange.

function data_v(){    var s = spreadsheetapp.getactivespreadsheet().getactivesheet();   //var ss = event.source.getactivesheet();   if (s.getname() == "isp1") {   var numrows = s.getmaxrows();   if(scriptproperties.getproperty('numberofrows')){     var nrows = number(scriptproperties.getproperty('numberofrows'));     if(nrows<numrows){        //datavalidation - in column b     var cell1 = s.getrange('b3:b');     var rule1 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['open', 'closed']).build();       cell1.setdatavalidation(rule1);              //datavalidation - in column c     var cell2 = s.getrange('c3:c');     var rule2 = spreadsheetapp.newdatavalidation()     .setallowinvalid(true).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['y','n']).build();       cell2.setdatavalidation(rule2);         //datavalidation - in column d     var cell3 = s.getrange('d3:d');     var rule3 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['datco', 'xfr mda2', 'sch call']).build();       cell3.setdatavalidation(rule3);        //datavalidation - in column     var cell4 = s.getrange('i3:i');     var rule4 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['1:00:00', '2:00:00', '12:00:00', '24:00:00']).build();       cell4.setdatavalidation(rule4);        scriptproperties.setproperty('numberofrows',numrows);// update value current value     }     browser.msgbox('new row(s) added, data validation completed isp1');   }   scriptproperties.setproperty('numberofrows',numrows);// create start value current value of update if trigger called reason  } } 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function data_v2(){    var s = spreadsheetapp.getactivespreadsheet().getactivesheet();   //var ss = event.source.getactivesheet();   if (s.getname() == "isp2") {   var numrows = s.getmaxrows();   if(scriptproperties.getproperty('numberofrows')){     var nrows = number(scriptproperties.getproperty('numberofrows'));     if(nrows<numrows){        //datavalidation - in column b     var cell5 = s.getrange('b3:b');     var rule5 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['open', 'closed']).build();       cell5.setdatavalidation(rule5);              //datavalidation - in column c     var cell6 = s.getrange('c3:c');     var rule6 = spreadsheetapp.newdatavalidation()     .setallowinvalid(true).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['y','n']).build();       cell6.setdatavalidation(rule6);         //datavalidation - in column d     var cell7 = s.getrange('d3:d');     var rule7 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     .requirevalueinlist(['noc', 'cus', 'datco', 'comer']).build();       cell7.setdatavalidation(rule7);        //datavalidation - in column     var cell8 = s.getrange('i3:i');     var rule8 = spreadsheetapp.newdatavalidation()     .setallowinvalid(false).sethelptext("seleccione solo los valores indicados")     ..requirevalueinlist(['0:15:00', '0:20:00', '1:00:00']).build();       cell8.setdatavalidation(rule8);        //copyformat - in column h     //var source = s.getrange('h1');     //var destination = s.getrange('h3:h');     //source.copyto(destination, {formatonly:true});        scriptproperties.setproperty('numberofrows',numrows);// update value current value     }     browser.msgbox('new row(s) added, data validation completed isp2');   }   scriptproperties.setproperty('numberofrows',numrows);// create start value current value of update if trigger called reason  } } 

both script run onchange. when add rows in isp1 script executed data_v isp1 when add news rows in isp2 script data_v2 didn't run data_v run again. think maybe can have 1 script on change, when try merge both script in 1 run 1 script , detect sheet edited didn't work.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -