我有两个脚本。一个链接到 Google 表单,另一个链接到 Google 表格。我需要确保 Google 表单脚本在执行链接到 Google 表单的工作表的 Google 工作表脚本主体之前完成执行。如何才能做到这一点?'
需要等待 Google 表单脚本完成,如下面的代码所示。我无法使用Utilities.sleep
因为它可能会导致竞争条件,具体取决于执行的时间。
//SCRIPT LINKED TO FORM
function onFormSubmit(e) {
//does something
return;
}
//SCRIPT LINKED TO SHEET
function onFormSubmit(e) {
// Need to wait here until SCRIPT LINKED TO FORM finishes execution
return;
}
您指出您有多个链接到通用电子表格的表单,并且每个表单都有其自己的绑定脚本。您描述的问题是,多个脚本可能会同时触发,因此最终可能会竞相更新同一电子表格。该电子表格还具有一个也在表单提交触发器上运行的绑定脚本。
不要试图协调许多不同脚本项目的时间安排,而是在一个处理所有脚本项目中实现所有功能。
Use a 独立脚本项目 https://developers.google.com/apps-script/guides/standalone由许多表单调用可安装的 https://developers.google.com/apps-script/guides/triggers/installable on submit
触发器——每个表单一个触发器。
一个脚本应该更新表单数据和电子表格。使用开锁服务 https://developers.google.com/apps-script/reference/lock确保在任何给定时刻您只运行一个将数据写入电子表格的代码实例。
您可以从绑定到表单的脚本访问电子表格,如下所示:
function onFormSubmit(e) {
const lock = LockService.getScriptLock();
lock.waitLock(60 * 1000);
const form = e.source;
// ...adjust form response data in the form's response store
const spreadsheet = SpreadsheetApp.openById(form.getDestinationId());
// ...adjust form response data in the spreadsheet
lock.releaseLock();
// ...send email
}
此代码假设更新过程始终在一分钟内完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)