我有这种情况:
工作表“ BQ”使用1
第二张表“ F”包含一个公式,该公式可从“ BQ”中读取数据
触发BigQuery数据重新加载的AppsScript
这是脚本示例:
var spreadsheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
SpreadsheetApp.enableAllDataSourcesExecution();
spreadsheet.getRange("A1").getCell(1,1).getDataSourceTables()[0].refreshData();
此应用脚本执行以下操作:
这是查询运行的时间:
这是工作表根据公式进行更新的时间:
我有问题,我不知道该怎么做“ 等待”部分。起初我以为SpreadsheetApp.flush();
就足够了,但是最后即使查询仍在运行或Spreadsheet仍在更新公式,脚本也开始读取,因此该命令对我来说毫无用处。
此刻,我正在根据操作(查询和工作表更新)所需的时间使用固定的Utilities.sleep(20000);
,但我想知道是否有更高级的方法进行“睡眠”,直到工作表完全更新
答案 0 :(得分:2)
我不是Google表格专家。知道公式何时完成可能有一种实用的方法。但是,即使没有它,您是否可以注入某些“签名”来表示公式结果已更改?天真的,它可能是concat( <original_formula_output>, "|||||", NOW())
。
所以等待循环可以是:
var cell_content_before = FetchingFormulaCellContent();
TriggerFormulaUpdate();
WHILE (cell_content_before == FetchingFormulaCellContent()
AND waiting_timeout_is_not_reached) {
Utilities.sleep(1000)`;
}