您如何更改用户正在使用Google App脚本查看的工作表?

时间:2019-10-29 14:37:55

标签: google-apps-script google-sheets

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

我已经阅读了所有文档,但找不到任何实际导致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);
}

我尝试了多种变体,包括通过名称设置活动工作表以及从该工作表中选择范围,但是似乎没有什么改变我的视图。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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 :(得分:0)

在电子表格文档中:

工具->脚本编辑器

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

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

让我知道它是否对您有用