Forms 提取部分谷歌文档表单数据,并将其写在单独的行中

Forms 提取部分谷歌文档表单数据,并将其写在单独的行中,forms,google-apps-script,google-sheets,google-docs,Forms,Google Apps Script,Google Sheets,Google Docs,假设我有一个Google Docs表单,它收集了以下信息: 时间戳(默认字段) 名字 参考号# 表单数据随后显示在电子表格上,如下所示: 4/10/2013 16:20:31 | Jack, Jill, Oscar | Ref6656X 4/10/2013 16:20:31 | Jack | Ref6656X 4/10/2013 16:20:31 | Jill | Ref6656X 4/10/2013 16:20:31 | Oscar | Ref6656X

假设我有一个Google Docs表单,它收集了以下信息:

  • 时间戳(默认字段)
  • 名字
  • 参考号#
表单数据随后显示在电子表格上,如下所示:

4/10/2013 16:20:31  |  Jack, Jill, Oscar  |  Ref6656X
4/10/2013 16:20:31  |  Jack  |  Ref6656X
4/10/2013 16:20:31  |  Jill  |  Ref6656X
4/10/2013 16:20:31  |  Oscar |  Ref6656X
(注意:名称的数量可以是1到多个)

我需要数据显示在电子表格上,如下所示:

4/10/2013 16:20:31  |  Jack, Jill, Oscar  |  Ref6656X
4/10/2013 16:20:31  |  Jack  |  Ref6656X
4/10/2013 16:20:31  |  Jill  |  Ref6656X
4/10/2013 16:20:31  |  Oscar |  Ref6656X

我经常可以破译和编辑谷歌应用程序脚本(JavaScript?),但我不知道如何用这种语言来为自己创建它(尤其是在名称字段中的名称数量未知的情况下)。我如何开始解决这个问题?

首先,在开始编写代码之前,您有一些选择要做

  • 是否要修改接受表单输入的电子表格,或生成包含修改数据的单独工作表?如果您想记录用户实际输入的内容,最好不要使用原始数据。如果您正在使用第二张表单进行按摩输出,则多个选项卡的存在可能会让您的用户感到困惑,除非您采取步骤将其隐藏

  • 您是希望在表单进入时进行修改,还是(批量)在之后的某个时间进行修改?如果已经收集到数据,则必须进行批量处理,这将涉及循环,并且必须处理事物中间的新行插入。要在表单进入时处理表单,您需要设置一个由表单提交触发的函数,并且只需将表向下扩展。。。但是你有更多的学习要做-看,和背景信息

  • 您主要使用电子表格服务功能还是javascript数组?这个选择通常是关于速度的——在javascript中做的越多,脚本的速度就越快,但是在两者之间切换一开始可能会让人困惑

下面是一个执行批量处理的示例函数。它将所有现有数据读入一个数组,遍历该数组并将所有行复制到一个新数组中,将多个名称扩展到多个行中。完成后,将覆盖现有图纸数据。(注意-未调试或测试。)

function bulkProcess(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var dataIn=ss.getDataRange().getValues();
var-dataOut=[];
for(var-row-in-dataIn){//可以使用:for(var-row=0;row
首先,在开始编写代码之前,您需要做出一些选择

  • 是否要修改接受表单输入的电子表格,或生成包含修改数据的单独工作表?如果您想记录用户实际输入的内容,最好不要使用原始数据。如果您正在使用第二张表单进行按摩输出,则多个选项卡的存在可能会让您的用户感到困惑,除非您采取步骤将其隐藏

  • 您是希望在表单进入时进行修改,还是(批量)在之后的某个时间进行修改?如果已经收集到数据,则必须进行批量处理,这将涉及循环,并且必须处理事物中间的新行插入。要在表单进入时处理表单,您需要设置一个由表单提交触发的函数,并且只需将表向下扩展。。。但是你有更多的学习要做-看,和背景信息

  • 您主要使用电子表格服务功能还是javascript数组?这个选择通常是关于速度的——在javascript中做的越多,脚本的速度就越快,但是在两者之间切换一开始可能会让人困惑

下面是一个执行批量处理的示例函数。它将所有现有数据读入一个数组,遍历该数组并将所有行复制到一个新数组中,将多个名称扩展到多个行中。完成后,将覆盖现有图纸数据。(注意-未调试或测试。)

function bulkProcess(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var dataIn=ss.getDataRange().getValues();
var-dataOut=[];
for(var-row-in-dataIn){//可以使用:for(var-row=0;row
我已经意识到这个问题在这里会被忽略,所以这是一个惊喜!至于选项#1,我计划将所有表单数据捕获到镜像电子表格中,因为我不想操纵实时的实际数据。至于多个选项卡的存在/外观,在这种特殊情况下,这不是问题。(后面还有更多内容)至于选项2,我最初的计划是在最新数据到达后立即处理(通过表单提交)。但是,我不确定如果同时(或几乎同时)提交两个或多个提交,触发器将如何工作。因此,我打算测试一下批量处理所有表单提交需要多长时间。不过,我主要担心的是,我需要保持数据刷新,以便在用户页面上查看,而我早期使用谷歌文档的经验表明,它相当缓慢