有没有办法找出Google表格的当前回复(以编程方式)?
在onSubmit
函数中。
查看their documentation,但我必须提供respondId
。
如何找到respondId
?
他们的一个剪切代码是:
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
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());
}
}
更新:
function onSubmit(e) {
/* Get values entered by filling the form */
var itemResponses = e.response.getItemResponses();
var myWantedValue = itemResponses[COLUMN_NUMBER].getResponse();
}
注意:通过传递e(vent)作为参数,可以通过提交实时表单来访问值,而不是通过脚本编辑器访问!
答案 0 :(得分:11)
此代码为您提供上次表单回复的值,是您要查找的内容吗?
function myFunction() {
var formResponses = FormApp.getActiveForm().getResponses();
Logger.log(formResponses.length);
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
Logger.log('Last response to the question "%s" was "%s"',
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
答案 1 :(得分:0)
@Serge我使用你的代码在使用form.setConfirmationMessage()后跟form.getConfirmationMessage()提交表单时显示答复者的答案。我使用了表单onsubmit触发器。然而,它总是返回前一个受访者的答案。我也尝试使用e.response,但我再次得到了前一位受访者的回复。我还做了一个Logger.log(form.getConfirmationMessage())来检查并发现它显示当前响应者的响应。然而,受访者提交的实际页面是先前的受访者。有线索吗?
更新:我注意到其他人也发布了这个问题:看到这个 https://productforums.google.com/forum/#!topic/docs/cygTFXtyy5I和此 http://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3507
答案 2 :(得分:0)
好像我们无法为每个用户设置自定义确认消息。 我发现了这个:https://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3507#makechanges
答案 3 :(得分:0)
您正在尝试阅读触发执行onSubmit()的确切响应,以便对特定数据运行其他进程,例如发送确认电子邮件。
如果以上是正确的:
请尝试阅读存储回复的Google表格,而不是将表单用作后续处理的数据源。看起来问题可能是相同的:读取数据源(表单本身或存储数据的表单)并不会指向触发onSubmit()事件的确切条目。
不同之处在于,您可以在工作表中创建“reply_sent”列,为每个表单响应进行后处理的时刻添加时间戳,例如,根据其内容发送自动回复。
然后,当运行onSubmit()时,它会遍历所有响应和进程,不仅是最后一个响应,还是触发onSubmit()函数的响应,还包括任何其他可能未被撤消的响应reason(“reply_sent”字段为空)。此方法的最后一个好处是您的脚本正在记录它的行为方式,因为日期与每个响应一起记录,因为它触发了obSubmit()。