google-apps-script - Google Apps 脚本在 onFormSubmit 上失败并有并发响应
问题描述
我已经设置了一个 Google 表单和链接的工作表来记录表单响应,然后创建并通过电子邮件向受访者发送来自提交数据的信函。这一直运行良好,并开始在同事中颇受欢迎,但现在当两个用户同时提交表单时,onFormSubmit 出现了问题。
本质上,脚本设置为在表单提交的最后一行运行,但如果同时提交两个响应,它只会在最后一个条目上运行脚本,可能两次。
我认为如果脚本完成设置一个要标记的列,然后设置一个时间驱动触发器以在任何尚未标记的行上运行,这可能会解决这个问题,但这感觉有点笨拙因为受访者通常会立即要求这封信。
是否有另一种解决问题的方法,以便 onFormSubmit 确保脚本实际上在原始表单提交创建的行上运行,而不仅仅是最后一行?任何帮助将不胜感激,这是我的代码示例:
function createLetterFromForm(){
// Get data from sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Define range and data in each column
var data = sheet.getRange(sheet.getLastRow(), 1, 1,
sheet.getLastColumn()).getValues(); // Range (last entry submitted)
for (var i in data){
var row = data[i];
// Pick the right template
if (row[9]=="A"){
var templateid = "xxxxxxxxxxxx";} // Template 1
if (row[9]=="B"){
var templateid = "xxxxxxxxxxxy";} // Template 2
// Make copy and set active
var folder = DriveApp.getFolderById("zzzzzzzzzzzzzz") // Folder for generated letters
var docid = DriveApp.getFileById(templateid).makeCopy(row[7]+" - Letter",folder).getId();
var doc = DocumentApp.openById(docid);
var docBody = doc.getActiveSection();
// Copy data to template
// address
docBody.replaceText("%FNAME%", row[2]);
docBody.replaceText("%SNAME%", row[3]);
docBody.replaceText("%ADDL1%", row[4]);
docBody.replaceText("%ADDL2%", row[5]);
docBody.replaceText("%ADDL3%", row[6]);
docBody.replaceText("%PCODE%", row[7]);
// other data
docBody.replaceText("%DATA1%, row[8]);
// etc.
// Share and Save doc
doc.addEditor(row[1]);
doc.saveAndClose();
// Email PDF to Respondee
var sendFile = DriveApp.getFilesByName(row[7]+' - Letter');
var recipient = row[1]
MailApp.sendEmail({
to:recipient,
subject: "Your Letter",
body:"Hello, \n\nHere's a PDF copy of the letter you created.",
attachments: [sendFile.next()]
});
}
}
解决方案
推荐阅读
- python - 在 docker 中安装 requirements.txt - 网络问题
- nopcommerce - NopCommerce 缺少参考插件
- json - 邮递员测试 Web API 以获取 oauth 令牌。但总是得到 400 BAD REQUEST 响应
- postgresql - Postgres 复制槽显示不活动
- c++ - Qt 和 Qwt 在 ubuntu 18.04 下部署
- f# - 负载平衡请求/农场请求(并发和状态 - 尴尬)
- python - 如何真正过滤 pandas 数据集而不让 Nans 无处不在
- python - 如何使用 Selenium 和 Python 查找从 covid 中恢复的人数的类路径
- python - 如何获取日志模块中日志记录的列号?
- flutter - 使用 dart 的非对称 zip 文件加密