Google Forms Script发送电子邮件故障

时间:2015-02-09 21:19:49

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

我正在尝试制作一个谷歌表格,每当有人填写表格时,我会通过电子邮件将表格内容发送给我。我正在使用下面的说明,我完全按照它们。但是,出于某种原因,当我填写表单时,我收到一条错误,说“TypeError:不能调用方法”getRange“为null。(第7行,文件”代码“)”

我查看它上面的代码行,其中定义了“s”,我认为问题是getActiveSpreadsheet由于某种原因不起作用。我想也许脚本找不到活动表。根据我从谷歌获得的错误电子邮件,下面是导致问题的代码段。

  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); 

}

2 个答案:

答案 0 :(得分:1)

好的,谢谢,这很有道理,但当我更改代码以使用该代码段时,我收到此错误。

2/12/15 4:56 PM sendFormByEmail TypeError:无法调用方法" getRange"的 空值。 (第9行,文件"代码")formSubmit 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];

您是否有任何方式建议我更改我的代码以获得所需的结果。我并不十分关心我需要改变的内容,我只是希望它在提交时通过电子邮件发送给我的表格内容。

答案 1 :(得分:0)

您收到错误的原因是因为代码是从绑定到表单的脚本项目运行的,而不是电子表格。绑定到表单的脚本与电子表格没有任何关联。它无法找到活动表。没有与表单关联的活动工作表。表格与电子表格相关联,只要提交数据的位置,而不是代码。您可以在电子表格中设置触发器,以便在提交表单时运行,但您可能希望按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]; 

};