Google apps script 获取提交时的当前响应

Google apps script 获取提交时的当前响应,google-apps-script,Google Apps Script,有没有办法(通过编程)找到Google表单的当前响应 在onSubmit函数中 已查看,但我必须提供响应ID 如何找到响应ID 从他们那里截取的关于这一点的代码是: // Open a form by ID and log the responses to each question. var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); var formResponses = form.getRespons

有没有办法(通过编程)找到Google表单的当前响应

onSubmit
函数中

已查看,但我必须提供
响应ID

如何找到
响应ID

从他们那里截取的关于这一点的代码是:

// 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());
   }
 }

注意:通过将e(vent)作为参数传递,可以通过提交live表单而不是脚本编辑器来访问这些值

此代码为您提供最后一个表单响应的值,这就是您要查找的吗

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());
  }
}
函数myFunction(){
var formResponses=FormApp.getActiveForm().getResponses();
Logger.log(formResponses.length);
var formResponse=formResponses[formResponses.length-1];
var itemResponses=formResponse.getItemResponses();
对于(var j=0;j
您无法设置。

您正在尝试读取触发onSubmit()执行的确切响应,以便对特定数据运行另一个进程,例如发送确认电子邮件

如果上述内容正确:

不要将表单用作以后处理的数据源,而是尝试阅读存储响应的Google表单。问题似乎是一样的:读取任何一个数据源(表单本身或存储数据的工作表)都不会指向触发onSubmit()事件的确切条目

不同之处在于,您可以在工作表中创建一个“reply_sent”列,以在每个表单响应经过后处理的瞬间(例如,根据其内容发送自动回复)加上时间戳


然后,在运行onSubmit()时,它将遍历所有响应和进程,不仅是最后一个接收到的响应或触发onSubmit()函数的响应,还将遍历可能由于任何原因而未重复的任何其他响应(“reply_sent”字段为空)。这种方法的最后一个好处是,您的脚本正在记录它的行为,因为在触发obSubmit()时,每个响应都会记录一个日期。

谢谢您的回答!我已经更新了我的问题,设法找到了解决我需要的办法。你的回答可以代替我的问题+1.谢谢这两种方法都返回相同的结果,我之所以选择这一种方法,是因为我想使用您的初始方法:-)@Sergeinsas,因为itemResponse.getScore()的值为null。我正在使用相同的脚本。请帮助我。请不要在评论中提问,如果您有新问题,请提出新问题并包含您正在使用的代码。如果其他人同时提交表单,此解决方案是否会导致竞争条件?虽然此链接可能会回答此问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-
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());
  }
}