Google Apps脚本失败onFormSubmit并发响应

时间:2018-05-17 15:15:04

标签: google-apps-script google-sheets google-form

我已经设置了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()]
      });
 }
}

0 个答案:

没有答案