【发布时间】:2021-01-27 11:49:58
【问题描述】:
我有一个 Google 工作表 (A) 可以导入到另一个 Google 工作表 (B)。 (B) 然后获取更多数据并将合并的数据导入另一个 Google Sheet (C)
这个 (A) 到 (B) 的过程发生在 40 组配对电子表格中,因此所有 40 组最终都在 (C) 中,作为它们所有状态的综合记录。
然后,我运行一个 Apps 脚本触发器来检查状态,并根据每组的状态,发送电子邮件并提醒要做的事情。
问题在于 (C) 并不总是使用来自 (A) 的最新信息进行更新,因此发送的状态不正确。它时好时坏——有时有效,有时无效——就好像 (C) 正在使用某种定期更新的缓存版本,但在被脚本打开时不会实时收集数据
今天早上又发生了。当我打开 (C) 时,我可以在屏幕上看到不正确的状态,然后当它完成“工作”时,状态会正确更新
似乎也是如此,当在脚本中使用 getActiveSpreadsheet() 中的 getValues() 时,它不会等到工作表完成“工作”才能在继续之前获取所有最新数据。
所以一个简单的问题 - 您能否确保脚本等到通过 2 张工作表链完全计算完工作表后再继续执行脚本?
或其他解决方案?
我想尝试的一件事是在脚本中打开 (C) 然后依次打开每个 (B),以便 (B) 获得最新的 (A),然后 (C) 可能会获得最新的 (B)和 (A),这似乎很艰巨。
所以想检查一下我在这里是否遗漏了一些可以添加到脚本中以强制计算的简单内容。
注意:该脚本是 (C) 的绑定脚本,我已经在代码开头有 SpreadsheetApp.flush() 虽然我刚刚注意到 SpreadsheetApp.flush() 在 getActiveSpreadsheet() 之前所以也许我在我“得到”它之后应该冲洗吗? - 我会试试的
非常感谢
【问题讨论】:
-
Importrange 充其量是不稳定的,您不能强制它以编程方式重新计算。我建议可能每 30 分钟使用
.getDisplayValues()将工作表 C 缓存到另一个工作表中并使用它,但它永远不能保证 100% 是最新的。 -
嗨。谢谢。我不确定 getDisplayValues() 是否会有所帮助,因为在“工作”完成之前,显示的值不是更新的值。或者你是说它不会以某种方式获得显示的值,直到它知道它有新计算的数据要显示?需要注意的是,该脚本仅在每天凌晨 3 点运行一次,因此不需要更新它 - 几个小时前就可以了。
标签: google-apps-script google-sheets