在执行脚本之前等待公式完成
Posted
技术标签:
【中文标题】在执行脚本之前等待公式完成【英文标题】:Wait for formula to be completed before executing script 【发布时间】:2019-07-10 07:00:52 【问题描述】:我有这种情况:
使用 1 将工作表“BQ”与 BigQuery 连接
第二张表“F”包含一个从“BQ”读取数据的公式
触发 BigQuery 数据重新加载的 AppsScript
这是脚本示例:
var spreadsheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
SpreadsheetApp.enableAllDataSourcesExecution();
spreadsheet.getRange("A1").getCell(1,1).getDataSourceTables()[0].refreshData();
此应用脚本执行以下操作:
触发 BigQuery 数据重新加载,如前所述 “等待”查询完成 “等待”公式处理新数据并更新第二张工作表 解析第二张表中的数据并做它必须做的事情......这是查询运行的时间:
这是根据公式更新工作表的时间:
我有一个问题,我不知道如何做“等待”部分。起初我认为只有SpreadsheetApp.flush();
就足够了,但最后脚本开始读取,即使查询仍在运行或电子表格仍在更新公式,所以这个命令对我的需要没有用。
目前我正在使用固定的Utilities.sleep(20000);
,基于我看到的两个操作(查询和工作表更新)所需的时间,但我想知道是否有更高级的方法来执行在工作表完全更新之前“休眠”
【问题讨论】:
尝试使用waitForCompletion()? 这对于DataSource(操作的第一部分)听起来不错,您对基于公式的更新有什么建议吗?谢谢 【参考方案1】:我不是 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)`;
【讨论】:
以上是关于在执行脚本之前等待公式完成的主要内容,如果未能解决你的问题,请参考以下文章