Google表单在回复提交后向所有者发送电子邮件

时间:2016-09-09 15:30:07

标签: google-apps-script google-form

我刚刚开始使用Google表单。我需要在用户提交数据后立即通过电子邮件向表单所有者(我自己和其他人)发送回复。我需要电子邮件中的数据,其中包括用户提交表单后立即提交的字段及其值。

我无法通过我的雇主使用我的Google帐户设置添加加载项,其中加载项被阻止。

我正在探索应用程序脚本,但由于我很新,但收效甚微。有一些示例代码可以帮助我开始创建一个发送电子邮件的基本脚本。

我有以下代码:

function sendFormByEmail(e) 
{    

  var email = "ownersemail@host.ca"; 

  var s = SpreadsheetApp.getActiveSheet();
  var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
  var message = "";
  var subject = "New Hire: ";


  for(var i in headers) 
    message += headers[i] + ': '+ e.namedValues[headers[i]].toString() + "\n\n";     


  subject += e.namedValues[headers[2]].toString() + " - starts " + e.namedValues[headers[15]].toString();


  MailApp.sendEmail(email, subject, message); 

}

然后我在表单触发器中添加了这个脚本,如下所示:

enter image description here

我尝试提交表单,但没有提交。我怎么知道脚本运行或出现问题?

如果我尝试在脚本编辑器中运行它:

enter image description here

它给了我一个错误: TypeError:无法调用方法" getRange"为null。 (第7行,文件"代码")

enter image description here

更新

我测试了电子邮件功能,但它确实有效。所以问题必须在Spread Sheet价值检索中。

function sendFormByEmail(e) 
{    

  var email = "ownersemail@host.ca"; 
  MailApp.sendEmail(email, "Test", "Test"); 
}

我还在google驱动器上创建了一个excel文件,该文件包含来自Google表单的回复

最终解决方案

function testExcel() {

  var email = "ownersemail@host.ca"; 
  var s = SpreadsheetApp.openById("GoogleDocsID");
  var sheet = s.getSheets()[0];
  var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0]; 
  var datarow = sheet.getRange(sheet.getLastRow(),1,1,sheet.getLastColumn()).getValues()[0];
  var message = "";

  for(var i in headers)
  {
    message += "" + headers[i] + " : " + datarow[i] + "\n\n";
    //Logger.log(message);
  }

  MailApp.sendEmail(email, "Submitted Data Test", message); 
}

1 个答案:

答案 0 :(得分:1)

这是一个开始的shell。我使用此代码的原因非常相似。此shell包括从模板创建Google Doc并将工作表中的数据添加到该Doc。您可以使用类似的方法设置变量并将其添加到电子邮件中。我使用html模板文件来管理每次发送的内容。

合并部分检查Doc(您可以将其设置为查看html文件)并使用RegEx查找我的标签;结构如下:<<columnHeader>>。通过这种方式,您可以使用一致的模板将那些标记替换为该列中该行的数据。根据您的需要修改您的需求。

这也显示合并的进度。这样,它就不会重复您的电子邮件/合并。

注意:删除个人信息后,有几个数据点丢失;它不会直接从这个样本中运行。您必须添加文档ID,更正变量位置等。

function mergeApplication() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("");
  var formSheet = ss.getSheetByName("");
  var lastRow = formSheet.getLastRow();
  var lastColumn = sheet.getMaxColumns();
  function checkAndComplete() {
    var urlColumn = lastColumn;
    var checkColumn = (urlColumn - 1);
    var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
    var check = checkRange.getBackgrounds();
    var red = "#ff0404";
    var yellow = "#ffec0a";
    var green = "#3bec3b";
    for (var i = 0; i < check.length; i++) {
      if (check[i] == green) {
        continue;
      } else {
        var statusCell = sheet.getRange((i+2), checkColumn, 1, 1);
        var urlCell = sheet.getRange((i+2), urlColumn, 1, 1);
        var dataRow = sheet.getRange((i+2), 1, 1, (lastColumn - 2));
        function mergeTasks() {    
          function docCreator() {
            var docTemplate1 = DriveApp.getFileById("");
            var docTemplate2 = DriveApp.getFileById("");
            var folderDestination = DriveApp.getFolderById("");
            var clientName = sheet.getRange((i+2), 2, 1, 1).getValue();
            var rawSubmitDate = sheet.getRange((i+2), 1, 1, 1).getValue();
            var submitDate = Utilities.formatDate(rawSubmitDate, "PST", "MM/dd/yy");
            var typeCheck = sheet.getRange((i+2), (checkColumn - 1), 1, 1).getValue();
            if (typeCheck == "Type 1") {
              var docToUse = docTemplate1;
              var emailBody = HtmlService.createHtmlOutputFromFile("").getContent();
            } else {
              var docToUse = docTemplate2;
              var emailBody = HtmlService.createHtmlOutputFromFile("").getContent();
            } 
            var docName = "" + clientName + " - " + submitDate;
            var docCopy = docToUse.makeCopy(docName, folderDestination);
            var docId = docCopy.getId();
            var docURL = DriveApp.getFileById(docId).getUrl();
            var docToSend = DriveApp.getFileById(docId);
            var docInUse = DocumentApp.openById(docId);
            var docBody = docInUse.getBody();
            var docText = docBody.getText(); 
            function tagReplace() {
                var DOBCell = sheet.getRange((i+2), 3, 1, 1);
                var rawDOB = DOBCell.getValue();
                if (rawDOB !== "") {
                  var DOB = Utilities.formatDate(rawDOB, "PST", "MM/dd/yy");
                } else {
                  var DOB = ""
                  }
              var taggedArray = docText.match(/\<{2}[\w\d\S]+\>{2}/g);
              var headerArray = sheet.getRange(1, 1, 1, (lastColumn - 2)).getValues();
              var dataArray = dataRow.getValues();
              dataArray[0][2] = DOB;
              var strippedArray = [];
              function tagStrip() {
                for (var t = 0; t < taggedArray.length; t++) {
                  strippedArray.push(taggedArray[t].toString().slice(2, -2));
                }
              }
              function dataMatch() {
                for (var s = 0; s < strippedArray.length; s++) {
                  for (var h = 0; h < headerArray[0].length; h++) {
                    if (strippedArray[s] == headerArray[0][h]) {
                      docBody.replaceText(taggedArray[s], dataArray[0][h]);
                    }
                  }
                }
                docInUse.saveAndClose();
              }
              tagStrip(); 
              dataMatch();
            }           
            function emailCreator() {
              var emailTag = sheet.getRange((i+2), (checkColumn - 9)).getValue();
              var emailSubject = "" + clientName;
              MailApp.sendEmail({
                to: emailTag,
                subject: emailSubject,
                htmlBody: emailBody,
                attachments: [docToSend.getAs(MimeType.PDF)],
                replyTo: "",
              });
            }
            tagReplace();
            statusCell.setBackground(yellow);
            emailCreator();
            urlCell.setValue(docURL);
          }
          statusCell.setBackground(red);
          docCreator();
          statusCell.setBackground(green);
        }
        mergeTasks();
      }
    }
  }
  checkAndComplete();
}