【问题标题】:Using Google Apps script to convert form submissions使用 Google Apps 脚本转换表单提交
【发布时间】:2013-04-30 22:20:57
【问题描述】:

我是 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.

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

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

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

    您应该使用这些变量在第二张工作表中构建您想要的电子表格排列,同时保持 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 个答案...抱歉,如果您看到第一个版本 ;-)

    【讨论】:

    • 我理解将提交的表单存储在数组中并将其粘贴到新电子表格中的概念。我能够将您的代码绑定到表单提交的触发器,但它给了我 TypeError:无法读取。经过一番搜索,我认为这是因为“价值”不是标准属性。是否有我应该使用的脚本库?感谢您在这里的帮助。我正在努力支持一个非营利组织,您的帮助非常宝贵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多