首页 > 解决方案 > 将 onFormSubmit 触发器与一张表的多个表单一起使用

问题描述

我正在尝试为具有多种形式的 Google 表格开发功能;每个表单在电子表格书中都有一个单独的工作表,我正在使用单独的函数将数据添加到主工作表。代码是容器绑定到工作表文件的。

特别是,我试图使用单个 onFormSubmit 触发器,然后识别表单,因此通过 onFormSubmit 运行的适当函数和变量传递,通过每个表单提交中第一个问题的标题,不包括时间 -邮票。当前编码的功能如下;

//Selects onFormSubmit action based on contents of form submission.  Regex compliance is enforced by forms.
function onFormSubmit(e) {
  Logger.log(e);
  var responses = e.response.getItemResponses();
  var keyResponse = responses[1].getItem().getTitle();
  Logger.log(keyResponse);
  if (keyResponse == "CUNY ID") {
    var cunyID = responses[1].getResponse();
    cunyIDQuery(cunyID);
  }
  else if (keyResponse == "First Name") {
    var firstName = responses[1].getResponse();
    var lastName = responses[2].getResponse();
    var gpa = responses[3].getResponse();
    infoSubmit(firstName, lastName, gpa);
  }
  else if (keyResponsew == "Q1") {
    var q1 = responses[1].getResponse();
    var q2 = responses[2].getResponse();
    var q3 = responses[3].getResponse();
    gradeSubmit(q1, q2, q3);
  }
  else {
    wrongFormError();
  }
}

不幸的是,由于这是容器绑定的,并且我正在作为附加组件进行测试,因此记录器功能并不是很有帮助,但我确实相信,当我使用 e.namedValues 而不是 e.response.getItemResponses 时,我能够确定,至少,表单提交似乎正确地传递到了函数中。如果有人能够弄清楚这一点,那就太好了。

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


替代使用一个脚本来处理多个表单

Google Sheet formSubmit 事件会针对连接到工作表的任何表单触发。我设法使用 formResponse 结果的范围来确定它来自哪个工作表以了解它来自哪个表单

function myFunction(form) {
  const formSheetName = form.range.getSheet().getName();

信用:IMTheNachoMan 评论


推荐阅读