Я устанавливаю проверку в каждой ячейке в столбце на основе значения в ячейке в столбце ранее. Мой скрипт работает так, как я хочу, если он выполняется для каждой ячейки один за другим (без цикла). Установка валидации в ячейке с помощью скрипта и просмотр эффекта займет секунду или около того (я имею в виду очевидную медлительность). Когда я поместил код в цикл 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);
}
}
}
Я предполагаю, что все ячейки должны были быть установлены с новым правилом проверки.