Google Apps脚本表单:e.namedValues不记录任何内容

时间:2015-02-25 22:42:28

标签: google-apps-script

我有一个非常基本的Google Apps表单,其中包含两个问题:资源(带有两个选项的单选按钮)和名称(文本字段)。我想在提交时选择表单值,所以我设置了一个触发器(在表单提交上)来调用函数:

function onFormSubmit(e) {
  Logger.log(e.namedValues["Resource"]);
}

知道我做错了吗?

4 个答案:

答案 0 :(得分:3)

我想到了实现这个目标的方法,这里是代码:

function onFormSubmit(e) {
  var frm = FormApp.getActiveForm().getItems();
  var rsc = e.response.getResponseForItem(frm[0]).getResponse();
  var reasonSubmitted = e.response.getResponseForItem(frm[1]).getResponse();
  var dateRequested = e.response.getResponseForItem(frm[2]).getResponse();

   var submitter = Session.getActiveUser().getEmail();

  //Logger.log(e.response);
  Logger.log("resource: " + rsc
  + " reason: " + "resource: " + reasonSubmitted);
  }

这样您就可以访问每个问题的个别回复

答案 1 :(得分:1)

这就是我们如何获得所有之前提交的表单的回复,包括最后一个表单:

var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
//OR get the form by URL
//var form = FormApp.openByUrl( 'https://docs.google.com/forms/d/Uksgii-z-EpjdsIKZE/edit' );
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }

这就是我们仅针对上次提交的表单获得回复的方式:

//change the id or URL with your form's URL
  var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
//OR get the form by URL
//var form = FormApp.openByUrl( 'https://docs.google.com/forms/d/Uksgii-z-EpjdsIKZE/edit' );

  var formResponses = form.getResponses();

  //getting the last form
  var formResponsesLength = formResponses.length - 1;
  var formResponse = formResponses[formResponsesLength];


   var itemResponses = formResponse.getItemResponses();
  //iterate over each field in the last form
   for (var j = 0; j < itemResponses.length; j++) {
   var itemResponse = itemResponses[j];

     if (itemResponse.getItem().getTitle() == 'Field One') {//your field name (heading) in google form
     var FieldOne = itemResponse.getResponse();
     }

     if (itemResponse.getItem().getTitle() == 'Field Two') {//your field name (heading) in google form
     var FieldTwo = itemResponse.getResponse();
     }
   }
Logger.log(FieldOne);
Logger.log(FieldTwo); 

答案 2 :(得分:0)

因为脚本包含在表单本身中(如本答案的注释中所述),e.namedValues不存在,您必须使用Form事件方法。

EG  var responses = e.response.getItemResponses();

请参阅此处的表单事件文档:

https://developers.google.com/apps-script/guides/triggers/events#google_forms_events

如果您在存储答案的目标电子表格中工作(其中将出现e.namedResponses),则显示的日志与查看脚本的会话相关。

由于外部事件触发了OnFormSubmit()触发器,因此您无法在脚本编辑器的打开副本中可靠地看到Logger.log()调用的结果。

因此,触发器可能正常工作,但由于此限制,您没有看到日志结果。

答案 3 :(得分:0)

这是因为您将表单连接到脚本,为了能够使用e.namedValues或e.values,必须将脚本与存储结果的工作表连接。而且不要忘记激活“从工作表中” /“在表单提交中” /“使用您的功能”触发器。