2

这是一个两部分的问题:

  1. 我有带有链接表格的谷歌表格。提交表单后,我希望将表单中的响应复制到另一个谷歌表格,我打算在其中更改和重新格式化,然后通过电子邮件发送。下面的脚本是我目前编写的,它在FormSubmit 上设置了一个触发器。但是,我不断收到以下错误:

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

下面的代码:

function formSubmitReply(e)
{    
var t = "1g-wIs6nGxu3mJYA1vKtPCxBLCsvh1upeVGbCokOOTIw"; 
var tName = "AggregationOutput";

//Get information from form and set as variables
  var email = e.Values[2];
  var name = e.Values[3];

// Get template, copy it as a new temp, and save the Doc’s id
var tcopyId = SpreadsheetApp.openById(t).copy(tName+' for '+name).getId();

// Open the temporary document & copy form responses into template copy response sheet
var copyt = SpreadsheetApp.openById (tcopyId);
var copyts = copyt.getSheetByName('Resp');  

// Transfers Data from Form Responses to Temporary file
copyts.getRange('A3').setValue(name);

//Sends copy of template in an email as an excel file
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + copyt.getId();  
var subject = 'Aggregaton Output for' + name;
var body = url   
MailApp.sendEmail(email, subject, body);

// Deletes temp file
DriveApp.getFileById(tcopyId).setTrashed(true);
}
  1. 我的问题的第二部分,即使我可以让代码工作,当在表单中跳过问题时,你会推荐什么 - 这不会改变 e.values 中的数组。使用最后一行作为问题的问题是我希望人们返回并编辑表单上的回复,然后重新提交,这意味着最后一行并不总是使用的行。

任何和所有的帮助表示赞赏。

4

2 回答 2

1

对于第 1 部分,试试这个:

function formSubmitReply(e)
{    
var t = "1g-wIs6nGxu3mJYA1vKtPCxBLCsvh1upeVGbCokOOTIw"; 
var tName = "AggregationOutput";

//Get information from form and set as variables
var itemResponses = e.response.getItemResponses();

  var email = itemResponses[2].getResponse();
  var name = itemResponses[3].getResponse();

// Get template, copy it as a new temp, and save the Doc’s id
var tcopyId = SpreadsheetApp.openById(t).copy(tName+' for '+name).getId();

// Open the temporary document & copy form responses into template copy response sheet
var copyt = SpreadsheetApp.openById (tcopyId);
var copyts = copyt.getSheetByName('Resp');  

// Transfers Data from Form Responses to Temporary file
copyts.getRange('A3').setValue(name);

//Sends copy of template in an email as an excel file
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + copyt.getId();  
var subject = 'Aggregaton Output for' + name;
var body = url   
MailApp.sendEmail(email, subject, body);

// Deletes temp file
DriveApp.getFileById(tcopyId).setTrashed(true);
}
于 2017-02-07T07:26:58.420 回答
0

问题1:您得到的错误是由于错误的语法,值(All small,not Values)

  var email = e.values[2];
  var name = e.values[3];

问题 2:当问题被跳过时,响应的值为空白。因此,如果电子邮件留空,e.values[2] 仍将引用表单中的电子邮件字段,但其中没有任何价值。

如果您在表单上激活了稍后编辑选项,则编辑后的响应将仅出现在 e.values 数组中。因此,如果他们仅更新其电子邮件 ID,则 e.values[2] = "updated Email ID" 和 e.value[0-1,3-end] = Empty/blank。

要确定提交是新条目还是已编辑条目,您可以使用 e.range 来确定将在“表单响应”表中添加响应的位置。您可以在“resp”表中镜像该范围,以使其更新方式与表单响应表相同。

于 2017-02-07T22:51:25.470 回答