【问题标题】:Google Forms Script send email malfunction谷歌表单脚本发送电子邮件故障
【发布时间】:2019-01-07 10:32:41
【问题描述】:

每次有人填写表格时,我都会尝试让我的谷歌表格通过电子邮件向我发送表格的内容。我正在使用下面的说明,并且完全按照它们进行操作。但是,由于某种原因,当我填写表格时,我收到一条错误消息“TypeError: Cannot call method "getRange" of null. (line 7, file "Code")"

我查看了它正上方的代码行,其中定义了“s”,我认为问题在于 getActiveSpreadsheet 由于某种原因无法正常工作。我认为也许脚本找不到活动表。根据我从谷歌收到的错误电子邮件,以下是导致问题的代码 sn-p。

  var s = SpreadsheetApp.getActiveSheet();
  var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    

我正在使用的整段代码;

function sendFormByEmail(e) 
{    
  // Remember to replace this email address with your own email address
  var email = "support@itjones.com"; 

  var s = SpreadsheetApp.getActiveSheet();
  var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
  var message = "";
  var subject = "Jones IT - New User Form";

  // The variable e holds all the form values in an array.
  // Loop through the array and append values to the body.

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

  // Insert variables from the spreadsheet into the subject.
  // In this case, I wanted the new hire's name and start date as part of the
  // email subject. These are the 3rd and 16th columns in my form.
  // This creates an email subject like "New Hire: Jane Doe - starts 4/23/2013"
  subject += e.namedValues[headers[1]].toString() + " - starts " + e.namedValues[headers[2]].toString();

  // Send the email
  MailApp.sendEmail(email, subject, message); 

}

【问题讨论】:

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


    【解决方案1】:

    好的,谢谢,这是有道理的,但是当我将代码更改为使用该代码 sn-p 时,出现此错误。

    2/12/15 4:56 PM sendFormByEmail TypeError:无法调用方法“getRange” 无效的。 (第 9 行,文件“代码”)表单提交 2/12/15 4:56 PM

    第 9 行是 sheet.getRange() 函数调用的行。

      var s = SpreadsheetApp.openById('1WYhDQct8vF-3rlca9dP6lYC2Z23vLLofwJt_DpQU--c');
      var sheet = s.getSheetByName('Jones IT - New User Form (Responses)');
      var headers = sheet.getRange(1,1,1,s.getLastColumn()).getValues()[0];
    

    您有什么方法建议我更改我的代码以获得所需的结果。我真的不在乎我必须更改什么,我只是希望它在提交时通过电子邮件将表单的内容发送给我。

    【讨论】:

    • 您的变量sheet 为空。 getRange() 是一种方法,试图在对sheet 的引用上使用。您获取sheet 的代码是正确的。所以,我无法判断真正的错误是什么。我能做的就是猜测。也许它不喜欢这个名字:Jones IT - New User Form (Responses)我不知道。也许您的电子表格 ID 有误?它必须是这两件事之一。使用调试器单步执行您的代码。打开此链接:Apps Script Debugger
    【解决方案2】:

    您收到错误的原因是代码是从绑定到表单的脚本项目运行的,而不是电子表格。绑定到表单的脚本与电子表格无关。它找不到活动工作表。没有与表单关联的活动工作表。就提交数据的位置而言,表单与电子表格相关联,但与代码无关。您可以在电子表格中设置触发器以在提交表单时运行,但您可能希望通过 ID 获取电子表格。

    function test() {
    
      var s = SpreadsheetApp.openById('your SS ID');
      var sheet = s.getSheetByName('your sheet name');
      var headers = sheet.getRange(1,1,1,s.getLastColumn()).getValues()[0]; 
    
    };
    

    【讨论】:

    • 哎呀,第一次在这个网站上,我把我的评论作为答案,我的错。如果您愿意回答,我还有一个问题,但它不适合此评论框,因此我将其发布为答案。
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多