【问题标题】:How do you change which sheet a user is viewing with google app script?您如何更改用户正在使用 google app 脚本查看的工作表?
【发布时间】:2019-10-29 14:37:55
【问题描述】:

我希望用户能够单击一个按钮并将其视图更改为不同的工作表。

我查看了所有文档,但找不到任何实际导致 UI 更改的方法。例如 getActiveSheet()、setActiveSheet() 或 setActiveRange() 或 activate() 只会改变代码的焦点,而不是用户可以看到的内容。

这里有一个“重复”的问题:In Google Sheets, how do you change the sheet that the user sees?

但使用 setActiveSheet() 不会导致任何更改。

function ChangeSheet(){
var ss = SpreadsheetApp.openById("exampleID");
var MainBoardSheet = ss.getSheetByName('Main board');
ss.setActiveSheet(MainBoardSheet);
}

我尝试了许多变体,包括按名称设置活动工作表和从该工作表中选择范围,但似乎没有任何改变我的视图。

【问题讨论】:

  • 您是否尝试过为此使用MainBoardSheet.activate();

标签: google-apps-script google-sheets


【解决方案1】:

setActiveSheet()、setActiveRange()、activateAsCurrentCell() 等函数会改变 UI 视图,但仅限于脚本运行的活动用户会话内,因此您必须使用 Spreadsheet.getActiveSpreadsheet();而不是 openById()。

您可以使用自定义菜单或 onEdit 触发器中的这些函数来更改触发它们的 UI 中的活动工作表,但不会影响此用户或其他用户的工作表的其他打开副本。

如果您尝试通过另一种方法触发,其中代码未在当前用户会话的上下文中执行,您将不会看到对 UI 端的任何影响。

/* this does not work */
function getByIDJumpByActive(){
  var spreadsheet=  SpreadsheetApp.openById('1u3d8Auoi3CJNqZgLiui2oKIB3FDYOwAHLq59zWY5fNk');
  var sheet = spreadsheet.getSheetByName('Sheet3');
  spreadsheet.setActiveSheet(sheet);
  spreadsheet.toast('opened by id and jumped by active sheet');
}

/* the below all work within the active user session. */
function jumpByRange() {
  var spreadsheet=  SpreadsheetApp.getActiveSpreadsheet();
  var range = spreadsheet.getRange('Sheet2!A1');
  range.activateAsCurrentCell();
  spreadsheet.toast('jumped by active cell');
}

function jumpByActive(){
  var spreadsheet=  SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Sheet3');
  spreadsheet.setActiveSheet(sheet);
  spreadsheet.toast('jumped by active sheet');
}

function onOpen(){
  var doc = SpreadsheetApp.getUi();
  var menu = doc.createMenu('Switch');
  menu.addItem('by range','jumpByRange');
  menu.addItem('by active','jumpByActive');
  menu.addItem('get by ID and jump by active','getByIDJumpByActive');
  menu.addToUi();
}

function onEdit(){
  jumpByActive();
}

【讨论】:

    【解决方案2】:

    我很确定 RANGE.activateAsCurrentCell() 方法会将用户带到那里,即使范围在另一个工作表中:

    https://developers.google.com/apps-script/reference/spreadsheet/range#activateAsCurrentCell()

    【讨论】:

      【解决方案3】:

      在您的电子表格文档中输入:

      工具 -> 脚本编辑器

      然后您将拥有一个应用程序脚本编辑器,您可以在其中放置此代码,它会根据需要更改工作表:

      function ChangeSheet(){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var changeSheet = ss.getSheetByName('Main board');
      ss.setActiveSheet(changeSheet);
      }
      

      让我知道它是否适合你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多