提取部分Google文档表单数据并将其写在单独的行中

时间:2013-04-10 16:55:05

标签: forms google-apps-script google-sheets google-docs

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

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

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

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

我经常可以破译和编辑Google Apps脚本(JavaScript?),但我不知道如何用该语言进行思考以便为自己创建(特别是在“名称”字段中使用未知数量的名称)。我怎样才能开始解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

  • 是否要修改接受表单输入的电子表格,或者生成包含已修改数据的单独表格?如果您想记录用户实际输入的内容,最好留下原始数据。如果您使用第二张表格作为按摩输出,则除非您采取措施隐藏它,否则多个标签页的存在可能会让您的用户感到困惑。

  • 您是否希望在表格进入后进行修改,或者(以批量形式)在之后的某个时间点进行修改?如果您已经收集了数据,则必须进行批量处理,这将涉及循环并且必须处理事物中间插入的新行。要处理表单,你需要设置一个由表单提交触发的函数,并且只需将表格进一步向下扩展......但是你还有更多的学习要做 - 请参阅Container-Specific TriggersUnderstanding TriggersUnderstanding 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);
}