我无法获得e.values(表单)或e.responses(表单)工作

时间:2015-05-25 21:27:42

标签: google-apps-script

我想在工作现场填写一份谷歌表格,当我提交时,我需要一份包含所提交信息的pdf,以便通过电子邮件发送到我的办公室。

到目前为止我在这里:

 // Get template from Google Docs and name it
var docTemplate = "12vZhIPt1CkWPCCN3jRE1Kpbp0dBW3key-4I_Stz0vNc"; 
var docName = "JobsiteInspectionReport";  

// When Form Gets submitted
function onFormSubmit(e) {
//Get information from form and set as variables

var variablename = "static entry or form value"
var email_address = "mike.onlineconstruction@gmail.com, mwfoshee@gmail.com";


//  Use this section to assign static values  

  var jobsite = "test data";
  var date_time = "test data2";
  var submit_name = "test data3";
  var weather = "test data4";
  var temp = "test data5";
  var super_name = "test data6";
  var job_num = "test data7";

// Use this section when attached to form 

  var jobsite = e.responses[2];
  var date_time = e.responses[3];
  var submit_name = e.responses[4];
  var weather = e.responses[5];
  var temp = e.responses[6];
  var super_name = e.responses[7];
  var job_num = e.responses[8]; 

// Use this section when attached to a sheet

  var jobsite = e.values[2];
  var date_time = e.values[3];
  var submit_name = e.values[4];
  var weather = e.values[5];
  var temp = e.values[6];
  var super_name = e.values[7];
  var job_num = e.values[8]; 


  //General Items 

// Get document template, copy it as a new temp doc, and save the Doc’s id
var copyId = DriveApp.getFileById(docTemplate)

.makeCopy(docName+' for '+jobsite)
.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('keySiteName', jobsite);
copyBody.replaceText('keyDateTime', date_time);
copyBody.replaceText('keySubmitName', submit_name);
copyBody.replaceText('keyWeather', weather);
copyBody.replaceText('keyTemp', temp);
copyBody.replaceText('keySuperName',super_name);
copyBody.replaceText('keyJobNum', job_num);

// Save and close the temporary document
copyDoc.saveAndClose();

// Convert temporary document to PDF
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");

// Attach PDF and send the email
var subject = "Jobsite Inspection Report";
var body = "Here is the Jobsite Inspection Report for " + jobsite + "";
MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf});

// Delete temp file
DriveApp.getFileById(copyId).setTrashed(true);
}

我已经为工作表和表单安装了onFormSubmit触发器,并通过删除e.values成功发送了包含表单和表单脚本附件的电子邮件(在安装脚本时我使用e.response的工作表脚本中)表单)并为变量分配静态值(参见标记为&#34的代码部分;当附加到表单&#34时使用此部分;)。我在正确的模板上收到一封包含正确静态数据的电子邮件。

当我尝试使用e.values或e.responses部分时,什么都没有。我甚至没有收到电子邮件或错误。

几小时后我确实收到了一封电子邮件(实际上有几封),并说明了#34; TypeError:无法读取属性" 2"来自undefined。 (第25行,文件"代码")"我认为e.values [2]是我的问题(或者它的格式,或者更具体的定义)。该脚本似乎在寻找表单?

2 个答案:

答案 0 :(得分:1)

提交事件对象需要进一步的工作才能按照指示的方式访问它。如果要以简单数组的形式访问响应,则需要从FormResponse对象和单独的ItemResponse值进行转换

clickAndDisable

答案 1 :(得分:0)

我终于放弃了,重新开始了,它的确有效!该脚本与上面列出的脚本相同(没有我在排除故障时使用的所有注释部分)。我可以说的唯一不同的是表单本身的设置。对于有同样问题的人,我会检查表单上的设置。在有效的表单上,设置"允许响应者在提交后编辑响应"没有检查我认为这是在我使用的第一个表格上检查的地方。如果不是这样,我仍然不知所措。