更新:在同一张表中使用下拉列表隐藏命名范围(列)

问题描述 投票:0回答:1

工作表中的以下列范围对应于括号中的选择: D-K 列(“NORMAL”)、L-S 列(“HARD”)、T-AA 列(“MAX POINTS”)

我希望脚本能够工作,以便选择其中一个下拉选项将隐藏与其他两个下拉选项相对应的列范围(即,如果您选择“HARD”,它将隐藏列 D-K 以及 T-AA ).

我在这里做错了什么?我当然肯定有一点。

链接

修改后的脚本: 当单独运行时,我让每个程序都能正常工作,但它需要我在每次之后取消隐藏,否则它会复合隐藏的内容。我将其设置为在编辑时触发。它是如此接近,是否有关于触发器的东西,或者我可能需要以某种方式添加一些东西来重置它以在我更改选择之前取消隐藏所有内容? (不知道如何)

var ss=SpreadsheetApp.getActive(); var value1 = "NORMAL"; var value2 = "HARD"; var value3 = "MAX POINTS"; var activeSheet = ss.getActiveSheet(); var cell = activeSheet.getRange("B2").getValue(); function HideColumn() { if(cell == value1) { activeSheet.hideColumns(12, (27-7+1)); } else if(cell == value2) { activeSheet.hideColumns(4, (14-7+1)); activeSheet.hideColumns(21, (14-7+1)); } else if(cell == value3) { activeSheet.hideColumns(4, (22-7+1)); } }

您在单元格 B2 中有一个下拉菜单。

google-apps-script google-sheets drop-down-menu named-ranges
1个回答
1
投票

根据所选值,您想要显示所选值的列并隐藏其他选项的列。

  • 脚本使用
  • switch
  • 语句
  • Doc ref
作为

IF

 语句的替代方法。
要运行此答案:
复制到项目编辑器,

创建一个可安装的

onEdit()
    触发器。 (使脚本在编辑下拉单元格时运行;并启用要使用的事件对象)
  • // running as an installable onEdit() trigger
    // watching cell B2
    function showHideColumns(e){
      
      var sheetName = "Today's Matchups"
      // Logger.log(JSON.stringify(e)) // DEBUG
    
      if (e.range.columnStart ==2 && e.range.rowStart ==2 && e.range.getSheet().getName() == sheetName){
        // correct sheet and correct cell
        // Logger.log("DEBUG: correct sheet and correct cell")
      }
      else{
        // not the correct sheet/cell
        // Logger.log("DEBUG: not the correct sheet/cell")
        return
      }
      var ss=SpreadsheetApp.getActiveSpreadsheet()
      var sheet = ss.getSheetByName(sheetName)
      var value1 = "NORMAL";
      var value2 = "HARD";
      var value3 = "MAX POINTS";
      var value1ColStart = 4
      var value2ColStart = 12
      var value3ColStart = 20
      var valueSetNumCols = 8
      // Columns D-K ("NORMAL"), 
      // Columns L-S ("HARD"), 
      // Columns T-AA ("MAX POINTS")
     
      var cell = e.value
      // Logger.log("DEBUG: dropdown value = "+cell)
    
      switch (cell) {
        case value1: 
        // NORMAL
        // show NORMAL, hide Hard & Max Points
        // show all columns (including NORMAL)
        sheet.showColumns(value1ColStart,24)
        // hide Hard
        sheet.hideColumns(value2ColStart, valueSetNumCols)
        // hide MaxPoints
        sheet. hideColumns(value3ColStart, valueSetNumCols)
        break
    
        case value2: 
          // HARD
          // show HARD, hide Normal & Max Points
          // show all Columns
          sheet.showColumns(value1ColStart,24)
          // hide Normal
          sheet.hideColumns(value1ColStart, valueSetNumCols)
          // hide MaxPoints
          sheet. hideColumns(value3ColStart, valueSetNumCols)
          break
    
        default:
          // Max Points
          // show Max Points, hide Normal & Hard
          // show all Columns
          sheet.showColumns(value1ColStart,24)
          // hide Normal
          sheet.hideColumns(value1ColStart, valueSetNumCols)
          // hide Hard
          sheet. hideColumns(value2ColStart, valueSetNumCols)
      }
    }
    

更新:
在表格上显示/隐藏列=“战斗结果输出”

// runnings as an installable onEdit() trigger // watching cell B2 // also hide columns on "Battle Results Output" function showHideColumns(e){ var sheetName = "Today's Matchups" // Logger.log(JSON.stringify(e)) // DEBUG if (e.range.columnStart ==2 && e.range.rowStart ==2 && e.range.getSheet().getName() == sheetName){ // right sheet and right cell // Logger.log("DEBUG: right sheet and right cell") } else{ // not the right sheet/cell // Logger.log("DEBUG: not the right sheet/cell") return } var ss=SpreadsheetApp.getActiveSpreadsheet() var sheet = ss.getSheetByName(sheetName) var value1 = "NORMAL"; var value2 = "HARD"; var value3 = "MAX POINTS"; var value1ColStart = 4 var value2ColStart = 12 var value3ColStart = 20 var valueSetNumCols = 8 // Columns D-K ("NORMAL"), // Columns L-S ("HARD"), // Columns T-AA ("MAX POINTS") /* * HIDE columns on Battle Results Output */ var battleResultsName = "Battle Results Output" var battleSheet = ss.getSheetByName(battleResultsName) // Value 1 = show D&E, Hide F,G&H var value1BattleColStart = 4 // Column D var value1BattleSetNumCols = 2 // Value 2 = show F&G, Hide D,E&H var value2BattleColStart = 6 // Column F & G var value2BattleSetNumCols = 2 // Value 3 = show H, Hide D&F var value3BattleColStart = 8 // Column D var value3BattleSetNumCols = 1 // number of columns for all results var valueBattleShowAllCols = value1BattleSetNumCols+value2BattleSetNumCols+value3BattleSetNumCols var cell = e.value // Logger.log("DEBUG: dropdown value = "+cell) switch (cell) { case value1: // NORMAL // show NORMAL, hide Hard & Max Points // show Normal sheet.showColumns(value1ColStart,24) // hide Hard sheet.hideColumns(value2ColStart, valueSetNumCols) // hide MaxPoints sheet.hideColumns(value3ColStart, valueSetNumCols) /* * HIDE columns from Battle Results */ // show all including Normal battleSheet.showColumns(value1BattleColStart,valueBattleShowAllCols) // hide Hard battleSheet.hideColumns(value2BattleColStart,value2BattleSetNumCols) // hide MaxPoints battleSheet.hideColumns(value3BattleColStart,value3BattleSetNumCols) break case value2: // HARD // show HARD, hide Normal & Max Points // show Normal sheet.showColumns(value1ColStart,24) // hide Normal sheet.hideColumns(value1ColStart, valueSetNumCols) // hide MaxPoints sheet.hideColumns(value3ColStart, valueSetNumCols) /* * HIDE columns from Battle Results */ // show all including Normal battleSheet.showColumns(value1BattleColStart,valueBattleShowAllCols) // hide Normal battleSheet.hideColumns(value1BattleColStart,value1BattleSetNumCols) // hide MaxPoints battleSheet.hideColumns(value3BattleColStart,value3BattleSetNumCols) break default: // Max Points // show Max Points, hide Normal & Hard // show Normal sheet.showColumns(value1ColStart,24) // hide Normal sheet.hideColumns(value1ColStart, valueSetNumCols) // hide Hard sheet. hideColumns(value2ColStart, valueSetNumCols) /* * HIDE columns from Battle Results */ // show all including Normal battleSheet.showColumns(value1BattleColStart,valueBattleShowAllCols) // hide Normal battleSheet.hideColumns(value1BattleColStart,value1BattleSetNumCols) // hide Hard battleSheet.hideColumns(value2BattleColStart,value2BattleSetNumCols) } // Logger.log("DEBUG: Selection: "+cell+" the end") }

© www.soinside.com 2019 - 2024. All rights reserved.