如何在链接到表单的工作表中执行 Google 工作表脚本之前等待 Google 表单脚本完成执行

2024-05-07

我有两个脚本。一个链接到 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(使用前将#替换为@)

如何在链接到表单的工作表中执行 Google 工作表脚本之前等待 Google 表单脚本完成执行 的相关文章

随机推荐