【发布时间】:2016-07-02 12:23:47
【问题描述】:
当用户在 Google 表格电子表格中的表格之间切换时,是否可以运行脚本?
或多或少类似于onOpen,但不是在打开文档时运行,而是在每次用户切换到另一个工作表时触发。
【问题讨论】:
标签: google-apps-script google-sheets triggers
当用户在 Google 表格电子表格中的表格之间切换时,是否可以运行脚本?
或多或少类似于onOpen,但不是在打开文档时运行,而是在每次用户切换到另一个工作表时触发。
【问题讨论】:
标签: google-apps-script google-sheets triggers
这是我对 onSheetChange 的解决方法:
function saveActiveSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actsheet = ss.getActiveSheet();
// The onSelectionChange() function executes in a separate thread
// which does not use any script global variables, so use the
// PropertiesService to maintain the user global state.
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty('ACTIVE_SHEET', actsheet.getSheetName());
}
function onSheetChange(e) {
// Do anything needed after a new sheet/tab selection
}
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get current sheet name and compare to previously saved sheet
var currentactsheet = ss.getActiveSheet();
var currentactsheetname = currentactsheet.getSheetName();
var userProperties = PropertiesService.getUserProperties();
var actsheetname = userProperties.getProperty('ACTIVE_SHEET');
if (currentactsheetname !== actsheetname) { // New sheet selected
saveActiveSheet();
onSheetChange(e); // Call custom sheet change trigger
}
// Do anything needed when a different range is selected on the same sheet
else {
var range = e.range;
}
}
function onOpen(e) {
saveActiveSheet();
}
【讨论】:
更新:在 April 2020 上,Google 添加了 onSelectionChange(e),可用于检查用户是否在工作表(也称为选项卡)之间切换。
目前没有与从一张表切换到另一张表相关的触发器。要了解 Google Apps 脚本中可用的触发器,请查看Triggers and events - Google Apps Script Guides
作为一种解决方法,您可以使用自定义菜单和SpreadsheetApp.setActivesheet 在工作表之间切换,方法是使用脚本而不是使用选项卡,并在该脚本中包含对从一张工作表切换到另一张工作表时要运行的函数的调用。
【讨论】:
我创建了一个“功能请求”来在谷歌问题跟踪器上实现“onSheetChange”触发器。你可以给它加星标,所以现在谷歌你想要这个: https://issuetracker.google.com/issues/72140210
这里有一个可能的解决方法的相关问题:How to capture change tab event in Google Spreadsheet?
【讨论】:
你可以使用
sheet1.showSheet();
sheet2.hideSheet();
【讨论】: