代码之家  ›  专栏  ›  技术社区  ›  5th4x4

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

  •  1
  • 5th4x4  · 技术社区  · 13 年前

    假设我有一个谷歌文档表单,它收集了以下信息:

    • 时间戳(默认字段)
    • 姓名
    • 参考#

    表格数据随后显示在电子表格上,如下所示:

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

    (注意:名称的数量可以是1到多个)

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

    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?),但我不知道如何用这种语言思考,以便为自己创建它(尤其是在名称字段中有未知数量的名称时)。我如何开始解决这个问题?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Mogsdad    13 年前

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

    • 您想修改接受表单输入的电子表格,还是生成一个包含修改数据的单独工作表?如果你想记录用户实际输入的内容,最好不要使用原始数据。如果你使用第二张纸来处理按摩输出,那么多个选项卡的存在可能会让你的用户感到困惑,除非你采取措施隐藏它。

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

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

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

    function bulkProcess() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var dataIn = ss.getDataRange().getValues();
      var dataOut = [];
    
      for (var row in dataIn) {   // Could use:  for (var row = 0; row < dataIn.length; row++)
        var names = dataIn[row][1].split(','); // array of names in second column
        var rowOut = dataIn[row];
        for (var i in names) {
          rowOut[1] = names[i];  // overwrite with single name
          dataOut.push(rowOut);  // then copy to dataOut array
        }
      }
      // Write the updated array back to spreadsheet, overwriting existing values.
      ss.getRange(1,1,dataOut.length,dataOut[0].length).setValues(dataOut);
    }
    
    推荐文章