我正在尝试触发已绑定(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/