Google apps script 在应用程序脚本中使用getValues()时,如何确保Google工作表更新importRange()

Google apps script 在应用程序脚本中使用getValues()时,如何确保Google工作表更新importRange(),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个谷歌工作表(a),可以导入到另一个谷歌工作表(B)。(B) 然后获取更多数据,合并后的数据导入到另一个Google工作表(C) (A)到(B)的这一过程发生在40套成对的电子表格中,因此所有40套电子表格最终在(C)中作为所有电子表格状态的合并记录 然后,我运行一个应用程序脚本触发器来检查状态,并根据每组的状态发送电子邮件,提醒人们做一些事情 问题在于(C)并不总是使用(A)中的最新信息进行更新,因此发送的状态不正确。它是一帆风顺的——有时有效,有时无效——就好像(C)是从某种缓存版本开

我有一个谷歌工作表(a),可以导入到另一个谷歌工作表(B)。(B) 然后获取更多数据,合并后的数据导入到另一个Google工作表(C)

(A)到(B)的这一过程发生在40套成对的电子表格中,因此所有40套电子表格最终在(C)中作为所有电子表格状态的合并记录

然后,我运行一个应用程序脚本触发器来检查状态,并根据每组的状态发送电子邮件,提醒人们做一些事情

问题在于(C)并不总是使用(A)中的最新信息进行更新,因此发送的状态不正确。它是一帆风顺的——有时有效,有时无效——就好像(C)是从某种缓存版本开始工作的,该版本会定期更新,但在被脚本打开时不会实时收集数据

今天早上又发生了。当我打开(C)时,我可以在屏幕上看到不正确的状态,然后当它完成“工作”时,状态正确更新

同样,当在脚本中使用getActiveSpreadsheet()中的getValues()时,似乎也不会等到工作表完成“工作”后才能获取所有最新数据,然后再继续

因此,一个简单的问题是,您能否确保脚本在继续执行脚本之前,等待一个工作表通过2个工作表链完全计算出来

还是其他解决办法

我认为可以尝试的一件事是在脚本中打开(C),然后依次打开每个(B),这样(B)就可以得到最新的(A)和(C)就可以得到最新的(B)和(A),这似乎很困难

所以我想检查一下,这里是否缺少一些简单的东西,可以添加到脚本中来强制计算

注意:该脚本是(C)的绑定脚本,虽然我刚刚注意到SpreadsheetApp.flush()在getActiveSpreadsheet()之前,但我在代码的开头已经有了SpreadsheetApp.flush(),所以也许我应该在“得到”它之后进行刷新我试试看

非常感谢您的提问

因此,一个简单的问题是,您能否确保脚本在继续执行脚本之前,等待一个工作表通过2个工作表链完全计算出来

没有。谷歌应用程序脚本没有内置的方式来了解电子表格的重新计算状态

如果电子表格中有一个单元格可以作为重新计算已完成的明确指示,则可以使用
getDisplayValue()
轮询该单元格显示的值,并将其与存储在属性服务属性中的以前显示的值或类似值进行比较


如果您真的需要确保获得的是最新的计算值,而不是使用公式,请使用Google Apps脚本/JavaScript。

Related:Importrange充其量是不稳定的,您不能强制它以编程方式重新计算。我建议每30分钟使用
.getDisplayValues()
将工作表C缓存到另一个工作表中,并使用它,但它永远不能保证100%最新。嗨。谢谢我不确定getDisplayValues()是否有用,因为在“工作”完成之前,显示的值不是更新的值。或者,您是说,在知道有新计算的数据要显示之前,它不会以某种方式获得显示的值?要注意的是,脚本每天只在凌晨3点运行一次,所以没有必要更新它-几个小时就可以了。是的,我不确定我能得到那个单元格。我已经决定,由于脚本每天只在凌晨3点运行一次,没有活跃的用户,我将添加一个Utilities.sleep(60000),看看是否有足够的时间来计算,然后继续,这有点不对劲