Разрешить окно для расчета, прежде чем продолжить Javascript (GAS) - PullRequest
0 голосов
/ 16 января 2019

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

У меня есть список URL-адресов на одной вкладке листа и функция IMPORTXML () на другой. Я пишу сценарий, чтобы скопировать каждый URL на вторую вкладку, а затем выполнить действие, основанное на выводе IMPORTXML (). Чтобы это работало, мне нужна небольшая задержка в скрипте, чтобы убедиться, что IMPORTXML () вычислен перед продолжением. setTimeout () здесь не кажется подходящим, потому что мне нужно рассчитать другие параметры скрипта (какую строку он проверяет и т. д.), основываясь на результатах. Помогите!

function test(){
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var list = sh.getSheetByName("Dec 2018").getRange(row,3,sh.getSheetByName("Dec 2018").getLastRow()-row).getValues();
  var check = sh.getSheetByName("Check");
  for(var row = 2;row<500;row++){
  check.getRange(1,1).setValue(list[row-2][0]);
  //wait right here
  //other code to run based on the output of the =IMPORTXML() formula on the Check sheet
  }
}

1 Ответ

0 голосов
/ 16 января 2019

Чтобы вставить небольшую задержку, используйте Utilities.sleep(milliseconds) с достаточно большим значением в миллисекундах, чтобы дождаться самого медленного времени пересчета (я думаю, что для одной формулы это 30000 мс, потому что это ограничение времени выполнения для пользовательских функций). Если вы хотите оптимизировать это время, возможно, вы захотите использовать метод, такой как экспоненциальный откат

Примечание. Объект Window недоступен при выполнении кода на стороне сервера скриптов Google Apps, поэтому setTimeout() использовать нельзя.

...