javascript - 当外部源(firebase)更改单元格时,如何触发谷歌表格中的谷歌应用程序脚本?

标签 javascript google-apps-script google-sheets

我正在尝试触发已绑定(bind)到 Google 工作表的 Google 应用程序脚本。

来自 firebase 的数据被拉入一个应该触发脚本的工作表中。我目前正在使用 onEdit(e) ,它在我手动添加数据时有效,但在从 firebase 更新数据时不起作用。有什么方法可以设置触发器来在每次特定范围内的单元格值发生更改时运行该函数。

谢谢!

脚本

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()
  var dumpingGround = ss.getSheetByName("Dumping Ground")
  var dataDump = ss.getSheetByName("Data Dump")
  var ddLastRow = dataDump.getLastRow() + 1
  var editCol = e.range.getColumn();
  var editRow = e.range.getRow();

  Logger.log("edit")
  /*Copy from dumping ground to data dump*/
  if ((editRow == 1 && editCol == 2) || (editRow == 1 && editCol == 3)){

    /*Set required range for data dump and dumping ground*/
    var ddRange = '\'Data Dump\'!A' +ddLastRow+ ':BF' + ddLastRow
    var dgCopyRange = '\'Dumping Ground\'!B1:BF1'
    
    /*Copy action*/
    ss.getRange('\'Dumping Ground\'!B1:BF1').copyTo(ss.getRange(ddRange), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

    /*Check data dump row count and delete 1000 rows if necessary*/
    if(ddLastRow = 9999){
      dataDump.deleteRows(1, 1000);
    }
  }
};

最佳答案

来自Apps脚本documentation :

Script executions and API requests do not cause triggers to run. For example, calling Range.setValue() to edit a cell does not cause the spreadsheet's onEdit trigger to run.

我认为你最好的办法是创建一个 time trigger并检查指定范围内的变化。当然,我不能确定这是否适合您的目的,但值得一试。

以下是一些可供考虑的替代方案:

  • 如果数据提取是由您的脚本启动的,则只需让该函数完成所需的操作即可。
  • 如果您有单独的数据填充服务,则可以使用 Sheets API。
  • 您可以将该脚本发布为 web app并通过 GET 或 POST 触发
  • 您可以尝试使用 Apps Script API 执行函数。请查看这样做的要求,因为它可能不符合您的要求。

关于javascript - 当外部源(firebase)更改单元格时,如何触发谷歌表格中的谷歌应用程序脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802197/

相关文章:

javascript - 如何根据单击按钮折叠和展开 Kendo UI treeView 中的所有树节点?

google-sheets - 计算电子表格中每个单元格时间范围的每日总时间

按数组过滤范围

javascript - 从 DOM 副本中删除元素

javascript - Heroku 与 Express/Nodejs 崩溃?

javascript - 尝试在数组上运行过滤器时未定义

javascript - 交叉引用工作表上的 For 循环和 if 语句

javascript - doGet(e) 参数未定义

php - 使用MySQL + Google电子表格在CMS中输入帖子

search - 我可以以某种方式停靠搜索框 (ctrl +f) 或在 Google 表格的顶部菜单中创建一个新的搜索框,以便它始终可见吗?