On Change触发器触发后如何切换活动工作表至新创建的工作表
问题原因
On Change触发器触发INSERT_GRID(新建工作表)事件时,Google Sheets不会自动将活动工作表切换为新创建的工作表,所以getActiveSheet()获取到的始终是新建操作前处于激活状态的工作表,默认就是第一个工作表。
解决方案
Google Sheets默认将新创建的工作表追加到工作表列表的末尾,直接读取工作表列表的最后一项即可获取新建的工作表,如需切换活动工作表到新表,调用activate()方法即可。
修正后代码
function mynewFunction(e) { if (e.changeType == 'INSERT_GRID') { const ss = SpreadsheetApp.getActiveSpreadsheet(); // 获取所有工作表,取最后一项即为新创建的工作表 const newSheet = ss.getSheets()[ss.getSheets().length - 1]; // 切换活动工作表到新创建的工作表 newSheet.activate(); // 弹出新工作表名称 Browser.msgBox(newSheet.getName()); } }
注意:如果是手动选择插入位置(比如在已有工作表中间插入新表),上述取最后一个工作表的方法会失效,这种情况需要提前用PropertiesService缓存所有工作表的ID,触发事件时对比新旧ID数组找到新增的工作表即可。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

