Увеличение DataValidations через все возможные варианты.
Эта функция будет увеличивать выбор параметров для каждого DataValidation в электронной таблице (то есть на всех листах), где диапазон ее критериев равен A2: A40.Это будет сделано для высоты диапазона критериев, а затем для свойства ENABLEOPTIONSCHANGE будет установлено значение FALSE, которое будет запрещать любые дальнейшие изменения до тех пор, пока оно не будет возвращено в значение TRUE путем вызова enableAllTheOptionsChange ().Итак, сначала вы должны активировать enableAllTheOptionsChange (), а затем вы можете вызвать changeAllTheOptions () до высоты A2: A40, которая составляет 39.
function enableAllTheOptionsChange() {
var prop=PropertiesService.getScriptProperties();
prop.setProperty('ENABLEOPTIONSCHANGE', 'TRUE')
}
function changeAllTheOptions() {
var prop=PropertiesService.getScriptProperties();
if(prop.getProperty('ENABLEOPTIONSCHANGE')=='TRUE') {
var ss=SpreadsheetApp.openById('id');
var osh=ss.getSheetByName('Sheet1');//validation values
var org=osh.getRange(2,1,39,1);//validaton values
var ovA=org.getValues();
var optionsA=ovA.map(function(r){return r[0]});
Logger.log(optionsA);
var count=Number(prop.getProperty(org.getA1Notation()));
if(count>ovA.length) {
prop.setProperty(org.getA1Notation(), 0);
prop.setProperty('ENABLEOPTIONSCHANGE', 'FALSE')
}else{
prop.setProperty(org.getA1Notation(), Number(count + 1))
}
//Logger.log('%s-%s',org.getA1Notation(),prop.getProperty(org.getA1Notation()));
var allshts=ss.getSheets();
for(var i=0;i<allshts.length;i++) {
var name=allshts[i].getName();
//if(name=="Globals"){continue;}//You can use this approach to skip sheets
var dataRg=allshts[i].getDataRange();
var vA=dataRg.getValues();
var dataRgA1=dataRg.getA1Notation();
var valRules=dataRg.getDataValidations();
for(var j=0;j<valRules.length;j++) {
for(var k=0;k<valRules[j].length;k++) {
var rule=valRules[j][k];
if(rule!=null) {
var type=rule.getCriteriaType();
var args=rule.getCriteriaValues();
if(args[0].getA1Notation()==org.getA1Notation()) {
var cv=allshts[i].getRange(j + 1,k + 1).getValue();
allshts[i].getRange(j + 1,k + 1).setValue(optionsA[(optionsA.indexOf(cv) + 1) % optionsA.length]);
//Logger.log('cv: %s optionsA[%s]: %s -- Length: %s',cv,(optionsA.indexOf(cv) + 1) % optionsA.length,optionsA[(optionsA.indexOf(cv) + 1) % optionsA.length],optionsA.length);
}
//Logger.log('\nSheet:%s\nType: %s\nArgs[0]: %s\nArgs[1]: %s\nValue[%s][%s]:%s',name,type,args[0].getA1Notation(),args[1],j,k,vA[j][k]);
}
}
}
}
}
}