我已经设置了Google表单和相关表单以记录表单回复,然后通过提交的数据创建并向受访者发送电子邮件。这已经很好地工作并且开始在同事中非常受欢迎,但是当两个用户同时提交表单时,onFormSubmit现在出现了问题。
本质上,脚本设置为在工作表onTormSubmit的最后一行上运行,但如果同时提交两个响应,它只会在最后一个条目上运行脚本,可能是两次。
我认为可以通过设置一个要标记的列来完成此操作,如果脚本已完成,然后设置一个时间驱动触发器,以便在任何尚未行的行上运行虽然受访者通常会立即要求这封信,但这有点笨拙。
是否有另一种方法来解决问题,以便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()]
});
}
}