Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在onFormSubmit触发器中获取TypeError?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在onFormSubmit触发器中获取TypeError?

Google apps script 在onFormSubmit触发器中获取TypeError?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我使用谷歌表单教程调整表单数据,将其合并成PDF格式,然后发送到电子邮件。尝试运行脚本时,我收到以下错误消息: TypeError:无法从未定义中读取属性“值”。(第11行,文件“代码”) 我不知道如何解决这个问题。我在网上搜索了答案。这是脚本的副本。我标记了脚本出现错误的两行: var docTemplate = "1ZSqmId2BBjtz6PmgQEmusjnkHGsFKD1CBSq0rrQk6Kc"; var docName = "TestCertificate"; //

我使用谷歌表单教程调整表单数据,将其合并成PDF格式,然后发送到电子邮件。尝试运行脚本时,我收到以下错误消息:

TypeError:无法从未定义中读取属性“值”。(第11行,文件“代码”)

我不知道如何解决这个问题。我在网上搜索了答案。这是脚本的副本。我标记了脚本出现错误的两行:

var docTemplate = "1ZSqmId2BBjtz6PmgQEmusjnkHGsFKD1CBSq0rrQk6Kc";  
var docName     = "TestCertificate";

// When Form Gets submitted

function onFormSubmit(e) {

//Get information from form and set our variables 

var email_address = "EMAIL@example.com";

//**(THIS IS WHERE THE ERROR IS OCCURRING ON THESE 2 LINES BELOW!)**

var full_name = e.values[2];
var Activity = e.values[3];

// Get document template, copy it as a new temp doc, and save the Doc’s id

var copyId = DocsList.getFileById(docTemplate)
.makeCopy(docName+' for '+full_name)
.getId();

// Open the temporary document

var copyDoc = DocumentApp.openById(copyId);

// Get the document’s body section

var copyBody = copyDoc.getActiveSection();

// Replace place holder keys,in our google doc template 

copyBody.replaceText('keyFullName', full_name);
copyBody.replaceText('keyActivity', Activity);



// Save and close the temporary document

copyDoc.saveAndClose();

// Convert document to PDF

var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); 

// Attach PDF and send the email

var subject = "Report";
var body    = "Here is the form for " + full_name + "";
MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf}); 

// Delete temp file

DocsList.getFileById(copyId).setTrashed(true);
}
这里是我测试的表格和证书的链接


    • 您看到的错误是因为您正在脚本编辑器中运行触发器函数。执行此操作时,未定义事件参数
      e
      ——这就是错误消息的意思

      有关更多背景信息,请参见

      下面是一个测试函数,它将使用电子表格中已有的数据多次运行
      onFormSubmit()
      函数。它读取工作表的每一行,生成一个对象来模拟提交表单时将获得的事件,然后调用触发器函数。如果在
      onFormSubmit()
      中放置断点,或依赖
      Logger.log()
      ,此技术将允许您测试触发器功能

      function test_onFormSubmit() {
        var dataRange = SpreadsheetApp.getActiveSheet().getDataRange()
        var data = dataRange.getValues();
        var headers = data[0];
        // Start at row 1, skipping headers in row 0
        for (var row=1; row < data.length; row++) {
          var e = {};
          e.values = data[row];
          e.range = dataRange.offset(row,0,1,data[0].length);
          e.namedValues = {};
          // Loop through headers to create namedValues object
          for (var col=0; col<headers.length; col++) {
            e.namedValues[headers[col]] = e.values[col];
          }
          // Pass the simulated event to onFormSubmit
          onFormSubmit(e);
        }
      }
      
      功能测试\u onFormSubmit(){
      var dataRange=SpreadsheetApp.getActiveSheet().getDataRange()
      var data=dataRange.getValues();
      var headers=数据[0];
      //从第1行开始,跳过第0行中的标题
      对于(变量行=1;行对于(var col=0;col我使用下面的代码来测试我的触发器

      //
      //
      function onFormSumbit(e) {
        //Timestamp   1 Status    Remarks 3 Expected Completion Date  4 TRB Number
        var resp = e.source.getActiveSheet().getRange(e.range.rowStart,1, e.range.rowStart,5 ).getValues();
      /*
      function test(){
        var ss=SpreadsheetApp.getActive();
        var respsht=ss.getSheetByName("Form responses 1");
        var resp = respsht.getRange("A119:P119").getValues();
      */
      
      
      
      我将注释掉onformsubmit部分并运行测试部分

      一旦该函数工作,我将注释掉测试函数并激活onformsubmit函数

      function test_onFormSubmit() {
        var dataRange = SpreadsheetApp.getActiveSheet().getDataRange()
        var data = dataRange.getValues();
        var headers = data[0];
        // Start at row 1, skipping headers in row 0
        for (var row=1; row < data.length; row++) {
          var e = {};
          e.values = data[row];
          e.range = dataRange.offset(row,0,1,data[0].length);
          e.namedValues = {};
          // Loop through headers to create namedValues object
          for (var col=0; col<headers.length; col++) {
            e.namedValues[headers[col]] = e.values[col];
          }
          // Pass the simulated event to onFormSubmit
          onFormSubmit(e);
        }
      }
      

      简单的解决方案:)

      您如何“运行脚本”?如果您在调试器中运行它,则不会传入任何参数
      e
      ,这正是错误消息告诉您的。我是一个新手,使用更复杂的脚本。它应该从表单数据电子表格中提取值。我不确定如何修复它。我正在谷歌的脚本编辑器中运行该脚本。