我有一个非常基本的Google Apps表单,其中包含两个问题:资源(带有两个选项的单选按钮)和名称(文本字段)。我想在提交时选择表单值,所以我设置了一个触发器(在表单提交上)来调用函数:
function onFormSubmit(e) {
Logger.log(e.namedValues["Resource"]);
}
知道我做错了吗?
答案 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,必须将脚本与存储结果的工作表连接。而且不要忘记激活“从工作表中” /“在表单提交中” /“使用您的功能”触发器。