提交时获取 Google 表单响应的内容

Get content of Google Form response when submitting

我正在尝试创建一个 Google 应用程序脚本来生成 Google 文档,其中包含 Google 表单响应(问题的答案、上传的图片)的内容。 是否可以执行以下操作?

提交后添加以下内容

我想知道以下问题的答案来实现这个。

  1. 表单提交时如何触发App脚本
  2. 如何从触发的脚本中获取表单响应对象

对于问题1, * 我们可以手动安装一个触发器https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually * 我们可以像这样得到表单响应对象

function onFormSubmit(e) {
  const form = FormApp.getActiveForm();
  const formResponses = form.getResponses();
  Logger.log('form id = ' + form.getId() + ', length = ' + formResponses.length);
  const formResponse = formResponses[formResponses.length-1];
  const itemResponses = formResponse.getItemResponses();

  const doc = DocumentApp.create('New response');
  const body = doc.getBody();

  for (var j = 0; j < itemResponses.length; j++) {
    var itemResponse = itemResponses[j];
    const item = itemResponse.getItem();
    body.appendParagraph('Response #%s to the question "%s" was "%s"',
        (i + 1).toString(),
        itemResponse.getItem().getTitle(),
        itemResponse.getResponse());
  }

  docblob = doc.getAs('application/pdf');
  docblob.setName(doc.getName() + ".pdf");
  const file = DriveApp.createFile(docblob);
  DriveApp.addFile(file);

  MailApp.sendEmail(
    "mail address",
    "new response",
    file.getDownloadUrl())
}

触发器:

首先,您需要设置一个onFormSubmit触发器。

Mogsdad 对此有 great answer

  1. 选择“编辑”>“当前项目的触发器”。您会看到一个面板,其中显示消息 未设置触发器。现在点击这里添加一个。
  2. 单击 link。
  3. 运行下,select您希望触发器执行的功能。 (在本例中为 getResponse()。)
  4. 事件下,select 来自电子表格
  5. 从下一个下拉列表中,select 表单提交
  6. 单击保存

注意:为此需要在电子表格上设置触发器。


获取响应值:

正确设置触发器后,您只需要:

function getResponse(e) {
  var response = e.values;
}

这里我们使用事件对象来获取表单响应中提交的值。 returns 提交到电子表格的值数组,在我测试的示例中,数组如下所示:

[25/07/2019 10:02:36, Option 1, Answer 2, Option 3]


参考文献: