1

假设我有一个收集以下信息的 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?),但我不知道如何用那种语言思考以便为自己创建它(尤其是在名称字段中名称数量未知的情况下)。我怎样才能开始解决这个问题?

4

1 回答 1

1

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

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

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

  • 您将主要使用电子表格服务函数还是 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);
}
于 2013-04-16T18:20:00.933 回答