У меня есть такой сценарий:
Лист "BQ" связан с BigQuery с использованием 1
AВторой лист «F» содержит формулу, которая считывает данные из «BQ»
AppsScript, который запускает перезагрузку данных BigQuery
Вот скриптпример:
var spreadsheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
SpreadsheetApp.enableAllDataSourcesExecution();
spreadsheet.getRange("A1").getCell(1,1).getDataSourceTables()[0].refreshData();
Этот программный скрипт выполняет следующие действия:
- запускает перезагрузку данных BigQuery, как уже упоминалось
- "ждет" запрос, который будет завершен
- "подождать" формулу для обработки новых данных и обновления второго листа
- проанализировать данные на втором листе и сделать то, что нужно ...
Вот когдазапрос выполняется:
Вот когда лист обновляется по формуле:
У меня проблема, я не знаю, как выполнить часть " wait ".Сначала я думал, что достаточно только SpreadsheetApp.flush();
, но в конце сценарий начинает читать, даже если запрос все еще выполняется или Spreadsheet все еще обновляет формулу, поэтому эта команда для меня бесполезна.
Atв тот момент, когда я использую фиксированный Utilities.sleep(20000);
, основываясь на времени, которое я видел, что необходимо для обеих операций (запрос и обновление листа), но мне интересно, есть ли более высокоуровневый подход для выполнения «сна»пока Лист полностью не обновится