Как контролировать цикл для ожидания завершения задачи в каждом цикле - PullRequest
1 голос
/ 21 июня 2019

Я устанавливаю проверку в каждой ячейке в столбце на основе значения в ячейке в столбце ранее. Мой скрипт работает так, как я хочу, если он выполняется для каждой ячейки один за другим (без цикла). Установка валидации в ячейке с помощью скрипта и просмотр эффекта займет секунду или около того (я имею в виду очевидную медлительность). Когда я поместил код в цикл for, он не завершил задачу в некоторых ячейках, я думаю, из-за времени, необходимого для завершения применения параметра проверки для ячейки. Как я могу контролировать цикл for для следующего цикла только после того, как настройка проверки вступит в силу в текущей ячейке?

Я пытаюсь добавить зависимый выпадающий список в каждой ячейке.

Я принял код от / http://www.chicagocomputerclasses.com/google-sheets-apps-script-dynamic-dependent-dropdown-data-validation-lists/

//google scripts for google spreadsheet  

function addDropDown(){
  var tabLists = "Lists";
  var tabValidation = "DATA";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
  var datass0 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabValidation);

  function flatten(arrayOfArrays){
    return [].concat.apply([], arrayOfArrays);
  }

  var dists_in_data = datass0.getRange(5, 2,datass0.getLastRow()).getValues(); //Admin1 in data

  var dists_in_list = datass.getRange(2, 9,datass.getLastRow()).getValues(); //Admin1 in Lists

  dists_in_list = flatten(dists_in_list);
  dists_in_data = flatten(dists_in_data);

  for (var i in dists_in_data){
 //i = 0
    var search_key = dists_in_data[i];   

    var distStart = dists_in_list.indexOf(search_key) + 1;

    dists_in_list.reverse();
    var len = dists_in_list.length;
    var distEnd = len - (dists_in_list.indexOf(search_key) + distStart - 1);
    dists_in_list.reverse();

    //preparing validation list for admin2
    if(distStart != 0){

       var validationRange = datass.getRange(distStart + 1, 10, distEnd );
       var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
       datass0.getRange(i + 5, 3).setDataValidation(validationRule);

     } 

  }

}

Я предполагаю, что все ячейки должны были быть установлены с новым правилом проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...