Google apps script 谷歌表单提交触发器和电子表格填充之间的竞争条件?

Google apps script 谷歌表单提交触发器和电子表格填充之间的竞争条件?,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我有一个谷歌表单,记录对电子表格的响应。我编写了一个应用程序脚本,该脚本在提交表单时触发,根据响应填充电子表格中的其他列 我假设电子表格的最后一行包含正在记录的响应: 函数onFormSubmit(事件){ const form=FormApp.getActiveForm(); const spreadsheet=SpreadsheetApp.openById(form.getDestinationId()); const sheet=电子表格.getSheetByName(“零件列表”); 常

我有一个谷歌表单,记录对电子表格的响应。我编写了一个应用程序脚本,该脚本在提交表单时触发,根据响应填充电子表格中的其他列

我假设电子表格的最后一行包含正在记录的响应:

函数onFormSubmit(事件){
const form=FormApp.getActiveForm();
const spreadsheet=SpreadsheetApp.openById(form.getDestinationId());
const sheet=电子表格.getSheetByName(“零件列表”);
常量行=sheet.getLastRow();
...
这在测试中效果很好,但今天我看到了一个实例,其中发生了提交,脚本在上一次提交的行上运行,就好像在电子表格中记录新响应之前执行了触发器一样

有没有办法保证我的脚本只在电子表格更新后执行

作为一种解决方法,我可以自己记录对电子表格的回答,而不是使用表单的功能。

来自问题

有没有办法保证我的脚本只在电子表格更新后执行

对电子表格使用表单提交可安装触发器,而不是对表单使用触发器。电子表格应是链接到表单的电子表格

我假设电子表格的最后一行包含正在记录的响应:

这可能并不总是正确的。如果需要获取响应行,请使用问题中的
event.range.getRow()
(其中
event
是电子表格可安装触发器中的表单提交事件)

有没有办法保证我的脚本只在电子表格更新后执行

对电子表格使用表单提交可安装触发器,而不是对表单使用触发器。电子表格应是链接到表单的电子表格

我假设电子表格的最后一行包含正在记录的响应:


这可能并不总是正确的。如果需要获取响应行,请使用
event.range.getRow()
(其中
event
是电子表格可安装触发器中的表单提交事件)

如果同时进行表单提交,则不必使用“表单提交”触发器可以安装到绑定到电子表格的应用程序脚本项目中,而不是表单。然后触发器可以使用事件对象来确保刚才提交的响应与代码所做的任何处理相匹配。代码可以从事件对象中获取行编号。g如果同时发生多个提交,则锁定服务。如果同时提交表单,则不必锁定服务“在表单提交时”触发器可以安装到绑定到电子表格的应用程序脚本项目中,而不是表单。然后触发器可以使用事件对象来确保刚才提交的响应与代码所做的任何处理相匹配。代码可以从事件对象中获取行编号。如果同时发生多个提交,则锁定服务。