【问题标题】:Sync google Form via Spreadsheet to Firebase通过电子表格将谷歌表单同步到 Firebase
【发布时间】:2021-01-21 18:11:58
【问题描述】:

我有一个谷歌表单中的调查,该表单存储在谷歌表格中。从 google sheet 数据与 firebase 同步。

我在谷歌表中设置了“发生更改时”的触发器,因为我的答案会自动存储在那里。 问题是,当用户提交答案时,触发器没有被调用。

但如果我直接在 google sheet 中写入,我的脚本会被调用,数据会存储在 firebase 中。

但是当我手动执行我的脚本时,它也会存储在 firebase 中。

因此,当表单本身传递数据时,基本上似乎不会触发 google sheet 触发器。

我也必须为表单编写脚本吗?

这是我的工作表脚本:

function writeDataToFirebase() {
  var ss = SpreadsheetApp.openById("SpreadsheetID");
  var sheet = ss.getSheets()[0];
  var data = sheet.getDataRange().getValues();
  var dataToImport = {};
  for(var i = 1; i < data.length; i++) {

    var timeStamp = data[i][0];
    var uuid = data[i][62];
    dataToImport[timeStamp] = {
      timeStamp:timeStamp,
      uuid:uuid,
      a:data[i][1],
      b:data[i][2],
      c:data[i][3],
      d:data[i][4],
      e:data[i][5],
      f:data[i][6],
      g:data[i][7],
      var1:data[i][8],
      var2:data[i][9],
      var3:data[i][10],
      var4:data[i][11],
      var5:data[i][12],
      var6:data[i][13],
      var7:data[i][14],
      var8:data[i][15],
      var9:data[i][16]

    };
  }
  
  
  var firebaseUrl = "URL" ;
  var secret = "Secret
  var base = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret);
  base.setData("", dataToImport);
}

也许有人可以帮助我如何完全自动化这个过程

【问题讨论】:

  • 问题是所有检测到某种变化的触发器只响应用户的变化。因此,您将不得不从 onFormSubmit 触发器函数进行数据传输。并且所有数据都可以轻松地在电子表格 onFormSubmit 触发器的事件对象中获得
  • 只要确保将参数(我使用 e)添加到函数中,如下所示:function onFormSubmit(e){Logger.log(JSON.stringify(e)); 并添加 Logger.log,这样您就可以直接看到其中的值事件对象。你也可以看到其中一些here
  • 谢谢库珀!实际上将触发器更改为表单提交解决了它....有时最好不仅像在教程中那样直截了当,而且实际上阅读得更好;)可以避免我几个小时的弄清楚。谢谢!

标签: firebase google-apps-script google-sheets google-sheets-api google-forms


【解决方案1】:

使用 Apps 脚本触发器时,请务必牢记以下几点:

脚本执行和 API 请求不会导致触发器运行。例如,调用Range.setValue() 编辑单元格不会导致电子表格的onEdit 触发器运行。

使用您选择的触发器时,同样的情况也适用于您的情况。

由于您希望此函数在收到表单中的答案时运行,因此在这种情况下最好的方法是使用onFormSubmit 触发器。

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多