假设我有一个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?),但我不知道如何用该语言进行思考以便为自己创建(特别是在“名称”字段中使用未知数量的名称)。我怎样才能开始解决这个问题?
答案 0 :(得分:1)
首先,在开始编写代码之前,您已经做出了一些选择。
是否要修改接受表单输入的电子表格,或者生成包含已修改数据的单独表格?如果您想记录用户实际输入的内容,最好留下原始数据。如果您使用第二张表格作为按摩输出,则除非您采取措施隐藏它,否则多个标签页的存在可能会让您的用户感到困惑。
您是否希望在表格进入后进行修改,或者(以批量形式)在之后的某个时间点进行修改?如果您已经收集了数据,则必须进行批量处理,这将涉及循环并且必须处理事物中间插入的新行。要处理表单,你需要设置一个由表单提交触发的函数,并且只需将表格进一步向下扩展......但是你还有更多的学习要做 - 请参阅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);
}