当一个单元格被外部源(firebase)更改时,如何在谷歌表单中触发谷歌应用程序脚本



我正在尝试触发一个已绑定到谷歌工作表的谷歌应用程序脚本。

来自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);
}
}
};

来自应用程序脚本文档:

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

我认为你最好还是创建一个时间触发器,并检查指定范围内的更改。当然,我真的不能确定这是否对你的目的有效,但值得一试。

以下是一些需要考虑的替代方案:

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

最新更新