首页 > 解决方案 > 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()]
      });
 }
}

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

解决方案


推荐阅读