首页 > 解决方案 > 如何延迟 Google 表单对 Google 表格的响应

问题描述

我有一个链接到电子表格的谷歌表单。在表单方面,我添加了一个 onFormSubmit From 表单触发器。

问题是在电子表格端触发了其他几个触发器,从 onSubmit 将数据发送到 webhook,然后信息被中继到最后一行数据..(触发器 Zapier、webhook 等)

当所有数据被完全计算并中继回最后一行时,在此过程中可能会出现来自表单的另一个提交,导致函数将中继数据输入到表单提交的最后一行。

我需要将表单响应延迟 X 时间,以允许数据从之前的表单提交中完成计算。

我曾尝试使用 LockService 和 Utilities.sleep(20000),但它似乎并没有阻止在定义的 waitLock 时间范围内提交表单。

function onFormSubmit(e)
{
  try
  {
    var lock = LockService.getPublicLock();
    // Wait for up to 30 seconds for other processes to finish.
    lock.waitLock(30000);
    Utilities.sleep(20000); // 20 second
    var formResponses = e.response.getItemResponses();
    var testInput = formResponses[0].getResponse();
    //append NEW FORM URL to MAIN SPREADSHEET
    var sh = SpreadsheetApp.openById("1jkvSWC1ew4mt1sEy6XX2vsc_5norWHrbOYQt5hLhwGA");
    var lastRow = sh.getLastRow();//gets the last row of entered data
    lastRow += 1;
    sh.getRange('D'+lastRow).setValue(testInput);
    // Release the lock so that other processes can continue.
    lock.releaseLock();
  }
  catch (error)
  {
// If there's an error, show the error message
    return error.toString();
  }
}

预期结果:将表单响应添加/提交到链接的电子表格中延迟 X 时间。

实际结果:表单接收到一个提交并且响应被添加到工作表上的一个新行,而不管正在使用的锁。延迟是添加到 lastRow 的附加信息。但是,我正在寻找的是从表单中排队/延迟提交。

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


推荐阅读