我正在使用许多人都可以编辑的 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 当时处于活动状态。
我怎样才能找出哪张表真正被更改了?
看起来更改事件不应该返回“源”,即使它在日志中返回。
我的行为和你一样。我可以通过“编辑时”获取工作表名称,但这不适合您想要做的事情。
我还尝试使用 onedit 和 onchange 触发器的组合,但它们不会同时触发,只会触发其中之一。