Google电子表格单元格和Google表单输入字段之间的显式对应



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

我的问题如下。
  • 我如何识别电子表格中存储表单输入字段值的单元格?
  • 或者,是否有任何方法,我可以从谷歌应用程序脚本读取各自的输入字段的值?

如果您能给我提供一个与这些问题相关的明确的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"对应的字段实际输入的用户?

我也很乐意听到其他工具来取代谷歌表单和谷歌电子表格。

这个答案适用于2013年版本的"新表单",而不是已经停止使用的"遗留表单"。

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

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

…是否有任何方法可以读取各自输入的值字段从谷歌应用程序脚本?

有多种方法来引用输入值:

  • 正如您在理解事件中发现的,使用由Form Submission触发的函数,您可以从事件本身检索输入值。这里有两个选择;您可以在数组中获得一组values,并且可以使用问题文本作为名称引用namedValues

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

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

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

…当我修改谷歌的形式,'namedValues'成员仍然保存与删除的输入字段相对应的元素。有吗?循环遍历namedValues中对应的元素的方法到用户实际输入的字段?

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

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

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

也请注意,您可以获得"header "数组或表单问题,如下所示:

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

…然后使用headers搜索找到包含您正在寻找的答案的列。

相关内容

  • 没有找到相关文章