使用Google Apps脚本转换表单提交

时间:2013-05-07 03:59:28

标签: google-apps-script

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

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

作为补充调整,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.

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

1 个答案:

答案 0 :(得分:0)

使用“on form submit”触发器时,来自表单的数据也可用作变量,请参阅doc here about Spreadsheet Form Submit Events

您应该使用这些变量在第二张纸上构建所需的电子表格排列,同时将30列保留为原样...

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

如果答案不为空,可以通过将数组5中的数据推送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个答案...对不起,如果你看到第一个版本; - )