use*_*107 7 google-sheets google-apps-script
由于谷歌电子表格不支持迭代,我编写了自己的简单应用程序脚本,根据电子表格输出的计算调整输入.但是,在我更改输入变量后,电子表格会重新计算,但应用程序脚本似乎不会等待重新计算,因此我最终会检索诸如"Thinking ..."或"#NA"之类的值.有没有办法暂停脚本并等待计算完成后再移动到脚本中的下一行?
目前,我只是使用循环来观察单元格,但我想知道是否有一种更优雅的方式暂停执行,直到完成工作表计算.
我编写了很多Excel宏,Excel VBA始终等待计算完成,然后再转到代码中的下一行.Apps脚本似乎没有这样做,所以我希望有一个简单的方法来做到这一点.
第二个问题:因为这个迭代可能需要一些时间,如何中断并终止脚本运行?我似乎找不到办法做到这一点.
这是一种非常简单的方法,可以防止下一个脚本启动,直到当前脚本在 google 应用程序脚本中完成。只需在您连续处理的每个脚本之后添加对 testWait() 的调用。SpreadsheetApp.flush() 似乎还将电子表格上的超时计时器重置为默认的 5 分钟,因此您有更多时间一次性处理多个脚本。
//holds processing of next script till last one has completed
function testWait(){
var lock = LockService.getScriptLock(); lock.waitLock(300000);
SpreadsheetApp.flush(); lock.releaseLock();
}
Run Code Online (Sandbox Code Playgroud)
脚本在大约6分钟后超时,以防止无限循环和不断运行程序.我不认为有一种手动方式来停止脚本.
编辑:哎呀,忘了回答你的第一个问题:我认为onEdit运行后重新计算了值,但显然我没有使用足够的公式来看到这一点.如果它没有等待,那么最好的方法是做这样的事情:
while(value === "Thinking..." || value === "#NA") {
Utilities.sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)
它会暂停脚本几秒钟,然后再次检查.
| 归档时间: |
|
| 查看次数: |
16400 次 |
| 最近记录: |