0

我是新来的Google Apps,我在重新格式化我的数据时遇到了很多困难。

我构建了一个输出到 Google 电子表格的表单。该表格提出了 6 个问题,并且它提出了 6 个问题的集合 5x。目前,输出显示 30 列数据。我想构建一个可以将其重新格式化为单个数据列表的 Google Apps 脚本,因此每次提交都将转换为 6 列宽的 5 行数据,而不是 30 列宽的 1 行数据。

作为一个额外的调整,A 列显示了提交日期,我希望它对来自该提交的每一行数据重复此操作。此外,每个提交最多可以有 5 个条目(每个条目 6 条数据),但也可以只有 1、2、3 或 4 个。

这是我正在使用的输出:

https://docs.google.com/spreadsheet/ccc?key=0AltfQKymTKF2dGRrMU50ZkU3MGhIUHlvSFdBMDd2MWc&rm=full#gid=0

我认为公式应该是这样的:

Look at Column H
Find first instance where cell is not blank
Copy that and 6 cells over
Paste
Set the original copied cells to blank
i + 1
repeat

then repeat the entire process in Column M
then repeat the entire process in Column T
etc.

如果您有想法,请帮助我!

4

1 回答 1

0

使用“表单提交”触发器时,来自表单的数据也可作为变量使用,请参阅此处关于电子表格表单提交事件的文档

您应该使用这些变量在第二张表中构建您想要的电子表格排列,同时将 30 列保持原样...

最好的方法可能是使用适当的数据构建一个二维数组,并立即将其写入此工作表(也可以在另一个电子表格中......)

如果答案不为空,这应该很容易通过将数据推入 5 x 5 的数组中来设置

像这样的东西(未经测试)

function formSubmit(e) {
  var data = []
  for(n=0;n<5;++n){
    var row = []
    if(e.values[3+n]!=''){  // if first element of serie n is not empty
      for(c=0;c<6;++c){
      row.push(e.values[3+n+c]);// build row n with 6 colums (0 to 5)
        }
    }else{continue}
  data.push(row);// add row n to data  (0 to 4)
}
  SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getRange(1,1,data.length,data[0].length).setValues(data);// write data to sheet #2
}

编辑:我混淆了 5 和 6,我将脚本更改为处理 5 行,每行 6 个答案...抱歉,如果您看到第一个版本 ;-)

于 2013-05-08T18:14:07.207 回答