Как мне замедлить гугл скрипт - PullRequest
0 голосов
/ 01 июля 2018

Мой Google Script выдает данные, которые я помещаю в свой «sheet6». Затем листы обрабатывают эти данные, и результат, который я хочу отслеживать для каждой итерации (k). Я получаю свои («передаваемые») данные обратно в мой скрипт, но это занимает много времени на каждую итерацию. Я знаю, что использование getValue - плохая практика. Я думаю, что лучшим способом было бы отслеживать любые «изменения данных» в листах, прежде чем передавать что-либо обратно в мой сценарий. Проблема в том, что скрипт выполняется быстро, но процесс расчета листов Google довольно медленный. Можно ли каким-то образом передать данные из моего сценария на листы, подождать, позволяя листам выполнять свои вычисления, прежде чем сценарии перейдут к следующему сценарию?

function RunScenarios() {
  function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
  var aa = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Run Program");
  var scenarios = aa.getRange('H19').getValue();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet6");
  var range = ss.getRange("b14:av14");
  var m = 0
  var picks = [];
  for(var k = 1; k <= scenarios; k++) {

    if (m = 47) {
      m = 0
    }
  for(var j = 1; j < 48; j++) {
      var array1 = [1+m, 2+m, 3+m, 4+m, 5+m, 6+m, 7+m, 8+m, 9+m, 10+m, 11+m, 12+m, 13+m, 14+m, 15+m, 16+m, 17+m, 18+m, 19+m, 20+m];
  shuffleArray(array1);
  picks = addToPicks(array1,picks);
   m = m + 1
  }
      ss.getRange(6, 2, 1, 47).setValues([picks]);  // passing all the picks to the sheet
   picks = [];
    var passingscenarios = aa.getRange('passing').getValue();  // getting the result from the sheet takes a lot of time
//    Eventually, I want to keep track of how many passingscenarios I've got here before exiting

}
    var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('A1').activate();
      spreadsheet.getSheetByName('Chart4').showSheet()
     .activate();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Chart4'), true);

}

function addToPicks(arr,picks) {
    if (picks.indexOf(arr[0]) === -1) {
        picks.push(arr[0])
        return picks
    }
    arr.shift();
    return addToPicks(arr,picks);
}

1 Ответ

0 голосов
/ 01 июля 2018

Чтобы вставить паузу в скрипте приложений, используйте Utilities.sleep (миллисекунды) , но сначала вы также можете добавить SpreadsheetApp.flush () , чтобы быть уверенным, что изменения сделаны скрипт передан в электронную таблицу.

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