Google 文档表 onChange() - 确定更改了哪个工作表

问题描述 投票:0回答:1

我正在使用许多人都可以编辑的 Google 文档表。 我需要能够判断工作表何时更改,即添加或删除行或列。 发生这种情况时,我能够收到 onChange 事件,但我似乎找不到更改了哪张工作表。 该事件包含对 SpreadSheet 对象 的引用,但

getActiveSheet
始终返回第一个工作表,无论哪个工作表处于活动状态。

我创建了一个包含 3 张表格的新电子表格,添加了以下脚本并对其进行了授权。

function onOpen() {
  ScriptApp.newTrigger("onChange")
   .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
   .onChange()
   .create();
}
function onChange(e) {
  Logger.log(e)
  Logger.log("Name: " + e.source.getName())
  Logger.log("Active Sheet: " + e.source.getActiveSheet().getName())
  Logger.log("All Sheets: " + e.source.getSheets().map(function(s){return s.getName()}))
}

我转到表 2 并删除了一列。 日志显示:

[14-07-17 19:13:32:774 EDT] {changeType=REMOVE_COLUMN, source=Spreadsheet, authMode=FULL}
[14-07-17 19:13:32:861 EDT] Name: Untitled spreadsheet
[14-07-17 19:13:32:944 EDT] Active Sheet: Sheet1
[14-07-17 19:13:32:946 EDT] All Sheets: Sheet1,Sheet2,Sheet3

因此,虽然我的工作表 2 处于活动状态并且该操作仅影响工作表 2,但传递给 onChange 处理程序的事件似乎表明工作表 1 当时处于活动状态。

我怎样才能找出哪张表真正被更改了?

google-sheets google-apps-script triggers
1个回答
3
投票

看起来更改事件不应该返回“源”,即使它在日志中返回。

我的行为和你一样。我可以通过“编辑时”获取工作表名称,但这不适合您想要做的事情。

我还尝试使用 onedit 和 onchange 触发器的组合,但它们不会同时触发,只会触发其中之一。

这值得在问题跟踪器上提交

© www.soinside.com 2019 - 2024. All rights reserved.