Javascript 当外部源(firebase)更改单元格时,如何在google工作表中触发google应用程序脚本?

Javascript 当外部源(firebase)更改单元格时,如何在google工作表中触发google应用程序脚本?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我试图触发一个绑定到谷歌工作表的谷歌应用程序脚本 来自firebase的数据被拉入一个表中,该表将触发脚本。我目前正在使用onEdit(e),当我手动添加数据时,它可以工作,但当数据从firebase更新时,它就不工作了。是否有任何方法可以设置触发器,以便在每次更改特定范围内的单元格值时运行函数 谢谢 剧本 从应用程序脚本: 脚本执行和API请求不会导致触发器运行。例如,调用Range.setValue()编辑单元格不会导致电子表格的OneEdit触发器运行 我认为最好的方法是创建一个新的,并检

我试图触发一个绑定到谷歌工作表的谷歌应用程序脚本

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

谢谢

剧本 从应用程序脚本:

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

我认为最好的方法是创建一个新的,并检查指定范围内的更改。当然,我不能确定这是否对你的目的有用,但值得一试

以下是一些需要考虑的备选方案:

  • 如果数据拉取是由脚本启动的,那么只需让该函数完成所需的操作即可
  • 如果有单独的服务填充数据,则可以使用Sheets API
  • 您可以通过GET或POST将脚本发布为and触发器
  • 您可以尝试使用执行函数。请检查这样做的要求,因为它可能不符合您的要求
来自应用程序脚本:

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

我认为最好的方法是创建一个新的,并检查指定范围内的更改。当然,我不能确定这是否对你的目的有用,但值得一试

以下是一些需要考虑的备选方案:

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

检查是否触发了
onChange()
。检查是否触发了
onChange()
。其中,对类似webapp的端点的GET/POST最为明确。其中,一个类似webapp的端点的GET/POST是最清晰的。IMCO
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);
    }
  }
};