我希望用户能够单击一个按钮并将其视图更改为其他工作表。
我已经阅读了所有文档,但找不到任何实际导致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);
}
我尝试了多种变体,包括通过名称设置活动工作表以及从该工作表中选择范围,但是似乎没有什么改变我的视图。
答案 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);
}
让我知道它是否对您有用