![](/img/trans.png)
[英]Google sheets macro for switching to another sheet based of drop-down selection
[英]Show Specific Tabs based on drop-down selection in Google Sheets
我是一個腳本新手,希望通過以下 Google 表格練習獲得一些幫助。
我目前在此 Google 表格文檔中有 2 個標簽:“班級列表”和“模板”。 我目前正在運行一個腳本,該腳本允許將名稱添加到“類列表”中,然后根據“模板”頁面布局為每個名稱生成一個選項卡。
我想知道是否可以隱藏所有選項卡並創建一個“歡迎/主頁”選項卡,其中包含所有名稱的下拉列表。 從下拉列表中進行選擇后,它將向用戶顯示具有相同名稱的工作表(同時隱藏所有其他工作表)。
該腳本的目的是一次只顯示一個選定的工作表(並且下拉列表將排除 2x 原始“類列表”和“模板”選項卡。名稱列表及其相應選項卡將不斷變化和更新。
這可能嗎? 謝謝
這是一個示例工作代碼,您應該可以閱讀。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var classListSheet = spreadsheet.getSheetByName("Class List");
function createMainSheet(){
// Create mainsheet if it isn't existing
if(!spreadsheet.getSheetByName("Welcome/Home Page")){
spreadsheet.insertSheet("Welcome/Home Page");
}
var mainSheet = spreadsheet.getSheetByName("Welcome/Home Page");
// Hide all other sheets AFTER creating main as you need at least 1 shown sheet
var sheets = spreadsheet.getSheets();
sheets.forEach(function (sheet) {
if(sheet.getName() != "Welcome/Home Page") {
sheet.hideSheet();
}
});
// Range where names are
var dynamicList = classListSheet.getRange("A:A");
var rangeRule = SpreadsheetApp.newDataValidation().requireValueInRange(dynamicList).build();
// Create dropdown in mainSheet on A1
// Drop down updates when you add name on dynamicList range (column A in Class List)
mainSheet.getRange("A1").setDataValidation(rangeRule);
}
function onEdit(e) {
// If editing mainSheet
if(spreadsheet.getActiveSheet().getSheetName() == "Welcome/Home Page"){
var mainSheet = spreadsheet.getSheetByName("Welcome/Home Page");
// Get value of dropdown
var name = mainSheet.getRange("A1").getValue();
// Hide old chosen sheet if existing
// Drop down default value when created is blank
// It will fail the first time you change if this isn't added
if(spreadsheet.getSheetByName(e.oldValue)) {
spreadsheet.getSheetByName(e.oldValue).hideSheet();
}
// Show new chosen sheet
spreadsheet.getSheetByName(name).showSheet();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName(name));
}
}
function addName(){
// Creating dummy function for adding names and tabs on Class List sheet
var name = "Name" + (classListSheet.getLastRow() + 1);
// Append "Name<rowNumber>" on column A in Class List sheet
classListSheet.appendRow([name]);
// Insert newly added sheet then hide
spreadsheet.insertSheet(name);
spreadsheet.getSheetByName(name).hideSheet();
}
您可能需要修改上面的一些細節,例如名稱所在的范圍和下拉菜單的位置,但這應該相對容易。
Class 列表:
主表:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.