Разрешить окно для расчета, прежде чем продолжить Javascript (GAS)
Я видел много дубликатов на эту тему, но я не вижу, как на самом деле сделать то, что нужно сделать.
У меня есть список 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 ответ
Для вставки небольшой задержки используйте Utilities.sleep(milliseconds)
со значением в миллисекундах, достаточно большим, чтобы ждать самого медленного времени пересчета (я думаю, что это 30000 мс для одной формулы, потому что это ограничение времени выполнения для пользовательских функций). Если вы хотите оптимизировать это время, возможно, вы захотите использовать технику, как экспоненциальный откат
Примечание. Объект Window недоступен при выполнении кода на стороне сервера скриптов Google Apps, поэтому setTimeout()
не может быть использован.