用户在工作表之间切换时触发

时间:2016-07-02 12:23:47

标签: google-apps-script google-sheets

当用户在工作表之间切换时,谷歌电子表格是否有办法运行脚本?

或多或少像onOpen(),但不是在文档打开时运行,而是每次用户切换到另一张表时都会触发。

谢谢

4 个答案:

答案 0 :(得分:1)

我创建了一个“功能请求”,以便在Google问题跟踪器中实现“onSheetChange”触发器。你可以加星标,所以谷歌现在你想要这个: https://issuetracker.google.com/issues/72140210

以下是可能的解决方法的相关问题:How to capture change tab event in Google Spreadsheet?

答案 1 :(得分:0)

此时,没有与一张纸到另一张纸的开关相关的触发器。要了解Google Apps脚本中的可用触发器,请结帐Triggers and events - Google Apps Script Guides

作为一种解决方法,您可以使用自定义菜单和SpreadsheetApp.setActivesheet通过使用脚本而不是使用制表符来切换工作表,并在该脚本中包含从一个工作表切换到另一个工作表时要运行的函数的调用。

答案 2 :(得分:0)

您可以使用

do { }

答案 3 :(得分:0)

这是我对 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();
}