Как изменить раскрывающийся список Google Sheets на следующий вариант? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть вход для проверки данных (выпадающий список) на GSheets с диапазоном значений из другого листа в том же файле (например: Sheet1! A2: A40)

То, что я пытаюсь сделать, - это перебрать все 40 вариантов этого раскрывающегося списка, используя основанный на времени триггер. Допустим, скрипт будет запускаться каждые 5 минут, изменяя раскрывающийся список на следующий параметр, пока он не завершит все 40 вариантов.

Наконец, эта процедура будет выполняться еженедельно, например, в понедельник ...

Прямо сейчас я застрял, пытаясь изменить параметры выпадающего списка ...

Есть предложения?

1 Ответ

0 голосов
/ 12 марта 2019

Увеличение 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]);
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...