0

我正在制作一个网络表单,供人们注册一个活动。我发现我可以使用谷歌表单和谷歌电子表格来完成这项任务,我开始学习如何使用这些网络应用程序。我还想向已注册的人发送自动确认电子邮件。对于这项任务,我也在研究 Google Apps 脚本。据我了解,我应该在电子表格的脚本中定义一个函数来发送电子邮件,并在“表单提交事件”中触发该函数。我想从他/她提交的数据中识别注册人的电子邮件地址,我想在确认电子邮件中包含所有提交的数据以及时间戳。

我的问题如下。

  • 如何识别电子表格中存储表单中输入字段值的单元格?
  • 或者,有什么方法可以从 Google Apps 脚本中读取各个输入字段的值?

如果您能向我推荐与这些问题相关的明确 API 参考,我会很高兴。

到目前为止,我从 Google Drive 中提供的帮助页面了解了这些应用程序,例如

https://developers.google.com/apps-script/overview

但是,我觉得那里的文档太简洁了。

我正在学习如何通过此 Google Apps 脚本发送确认电子邮件: FormSubmissionResponseEmail

我找不到明确关联 Google 表单中的输入字段和 Google 电子表格中的单元格的帮助文档。从我有限数量的实验案例来看,时间戳似乎总是存储在电子表格的第一列中。这是有保证的吗?似乎据说“电子表格表单提交事件”类的“namedValues”成员包含“表单提交中的问题名称和值”。(https://developers.google.com/apps-script/understanding_events)但是,当我修改 Google 表单时,“namedValues”成员仍保留与已删除输入字段对应的元素。有没有办法只遍历“namedValues”中与用户实际输入的字段相对应的那些元素?

我也很高兴听到有关替代 Google 表单和 Google 电子表格的替代工具。

4

1 回答 1

2

此答案适用于 2013 版的“新表格”,而不是已停产的“旧表格”。

如何识别电子表格中存储表单中输入字段值的单元格?

您可以通过第 1 行中的标签识别将收集表单问题答案的。有了这些知识,您可以在函数中按列号引用答案,例如getRange().

...有什么方法可以从 Google Apps 脚本中读取各个输入字段的值?

有多种方法可以引用输入值:

  • 正如您在了解事件中发现的那样,使用由表单提交触发的函数,您可以从事件本身检索输入值。这里有两个选项;你会得到一组values数组,namedValues你可以使用问题文本作为名称来引用它。

  • 您可以从电子表格中读取数据;在前面提到的同一个触发器函数中,您可以使用e.range.getValues()获取包含所有提交值的数组,然后您可以通过索引引用该数组。请记住,这将是一个从 0 开始的数组,而列编号从 1 开始。

从我有限数量的实验案例来看,时间戳似乎总是存储在电子表格的第一列中。这是有保证的吗?

除非您修改电子表格,否则时间戳将位于第一列。可以在表单创建的数据表的左侧插入列,这将影响您在工作表中找到表单结果的位置(尽管e.range会调整)。以下所有值的顺序将是在表单中创建问题的顺序。请注意,如果您删除一列(例如,因为您从表单中删除了问题),“已删除”问题的列将在行尾重新创建。

...当我修改 Google 表单时,“namedValues”成员仍然保存与已删除输入字段对应的元素。有没有办法只遍历与namedValues用户实际输入的字段相对应的那些元素?

记住过去的问题是有原因的,尽管当它们不用于收集任何真实数据时它们只是一个麻烦。可以使用更好的计划来避免问题!

未回答的问题将是事件中的空字符串(例如e.namedValues["Dead Question"] == '')。所以你可以像这样跳过它们:

for (var ans in e.namedValues) {
  if (e.namedValues[ans] != '') {
    doSomethingWith(e.namedValues[ans]
  }
}

还要注意,您可以获得“标题”数组或表单问题,如下所示:

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var headers = sheet.getDataRange().getValues()[0];

...然后使用搜索headers来查找包含您正在寻找的答案的列。

于 2013-04-10T02:24:18.193 回答