Google apps script 根据Google工作表中的下拉选择显示特定选项卡

Google apps script 根据Google工作表中的下拉选择显示特定选项卡,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我是一个脚本新手,希望通过下面的GoogleSheets练习得到一些帮助 我目前在谷歌表单文档中有2个标签:“类列表”和“模板”。我目前正在运行一个脚本,允许将名称添加到“类列表”,然后根据“模板”页面布局为每个名称生成一个选项卡 我想知道是否有可能隐藏所有标签,并创建一个“欢迎/主页”标签,其中包含所有姓名的下拉列表。从下拉列表中选择后,将向用户显示具有相同名称的工作表(同时隐藏所有其他工作表) 此脚本的目的是一次只显示一个选定的工作表(下拉列表将排除2个原始的“类列表”和“模板”选项卡。名称

我是一个脚本新手,希望通过下面的GoogleSheets练习得到一些帮助

我目前在谷歌表单文档中有2个标签:“类列表”和“模板”。我目前正在运行一个脚本,允许将名称添加到“类列表”,然后根据“模板”页面布局为每个名称生成一个选项卡

我想知道是否有可能隐藏所有标签,并创建一个“欢迎/主页”标签,其中包含所有姓名的下拉列表。从下拉列表中选择后,将向用户显示具有相同名称的工作表(同时隐藏所有其他工作表)

此脚本的目的是一次只显示一个选定的工作表(下拉列表将排除2个原始的“类列表”和“模板”选项卡。名称列表及其相应的选项卡将不断更改和更新


这可能吗?谢谢这是一个示例工作代码,您应该可以阅读

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();
}
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var classListSheet=spreadsheet.getSheetByName(“类列表”);
函数createMainSheet(){
//如果主工作表不存在,则创建主工作表
如果(!spreadsheet.getSheetByName(“欢迎/主页”)){
电子表格。插入页(“欢迎/主页”);
}
var mainSheet=spreadsheet.getSheetByName(“欢迎/主页”);
//创建主图纸后隐藏所有其他图纸,因为您至少需要一张显示的图纸
var sheets=电子表格.getSheets();
表.forEach(功能(表){
if(sheet.getName()!=“欢迎/主页”){
sheet.hideSheet();
}
});
//名称所在的范围
var dynamicList=classListSheet.getRange(“A:A”);
var rangeRule=SpreadsheetApp.newDataValidation().requireRewageInRange(dynamicList.build();
//在A1的主工作表中创建下拉列表
//在dynamicList范围(类列表中的A列)上添加名称时下拉更新
mainSheet.getRange(“A1”).setDataValidation(rangeRule);
}
功能OneEdit(e){
//如果编辑主工作表
if(电子表格.getActiveSheet().getSheetName()=“欢迎/主页”){
var mainSheet=spreadsheet.getSheetByName(“欢迎/主页”);
//获取下拉列表的值
var name=mainSheet.getRange(“A1”).getValue();
//隐藏旧的选定图纸(如果存在)
//创建时下拉默认值为空
//如果未添加此项,则第一次更改时将失败
if(电子表格.getSheetByName(e.oldValue)){
电子表格.getSheetByName(e.oldValue).hideSheet();
}
//显示新选择的工作表
电子表格.getSheetByName(name).showSheet();
电子表格.setActiveSheet(电子表格.getSheetByName(名称));
}
}
函数addName(){
//创建用于在类列表表上添加名称和选项卡的虚拟函数
var name=“name”+(classListSheet.getLastRow()+1);
//在类列表表中的A列追加“名称”
classListSheet.appendRow([名称]);
//插入新添加的图纸,然后隐藏
电子表格.插入表(名称);
电子表格.getSheetByName(name).hideSheet();
}
您可能需要修改上面的一些细节,如名称所在的范围和下拉列表的位置,但这应该相对容易

课程列表:

主页:


谢谢-这很好用!我只是想知道是否有一段代码可以添加,一旦从主页下拉列表中选择了它,它就会将我带到工作表中?我想我需要一些与setActiveSheet(名称)类似的东西?是否也可以在创建主页后隐藏除主页以外的所有选项卡?再次感谢!您好@BLibrary,我已经根据您的评论更新了答案。对于
setActiveSheet
,您需要传递工作表而不是名称才能使其正常工作。此外,我在创建主工作表后重新处理了选项卡的隐藏如果只是隐藏
模板
类列表
,由于您已经创建了其他选项卡,您只需再次运行
createMainSheet
,以隐藏除主表之外的所有其他选项卡。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以访问你的问题是一个可以解决的问题。