在一张纸上使用具有多个表单的onFormSubmit触发器

问题描述 投票:0回答:1

我正在尝试为具有多种形式的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-script google-sheets google-form
1个回答
0
投票

Apps脚本有两种类型的form submit触发器

documentation中所指定:

当用户响应形成。表单提交触发器有两种版本,一种用于Google表单本身,如果表单提交给Google表单,则适用于表格电子表格。

  • 两个触发器都具有event type On form Submit,但是取决于您的脚本是绑定到表单本身还是目标电子表格,可选的event source将为From formFrom spreadsheet
  • 当您想使用event objects时,这种区别变得非常重要。
  • 您可以看到,尽管名称相同,但是On form Submit触发器将具有不同的事件对象,具体取决于您的脚本是绑定到表单还是电子表格。

enter image description here

  • 对于event source From spreadsheet,可用的事件对象是
    • authMode
    • namedValues
    • 范围
    • triggerUid
  • 对于event source From form,可用的事件对象是
    • authMode
    • 响应
    • 来源
    • triggerUid

结论

  • 如果要将脚本绑定到电子表格,则可以将其用于多种形式,则不能使用事件对象e.response,因为这不是From spreadsheet的有效事件对象。
  • 您将需要改用valuesnamedValues-根据您的喜好,这将以不同的方式为您提供相同的信息。
  • [如果不同的形式有不同的问题,那么比namedValues没有太大的意义,所以请改用e.values并跳过e.values[0]将会是时间戳。
© www.soinside.com 2019 - 2024. All rights reserved.