簡體   English   中英

根據 Google 表格中的下拉選擇顯示特定標簽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM