【问题标题】:Show/Hide specific columns based on checkboxes根据复选框显示/隐藏特定列
【发布时间】:2019-02-11 10:43:18
【问题描述】:

所以我必须在 Google 表格中添加表格/窗格。我的“设置”表包含许多复选框。

我想要的是能够根据这些复选框的真/假状态显示/隐藏我的第二张工作表中的特定列。

想法是每个复选框将对应于第二张表中的特定列。

我知道如何在 Excel 中执行此操作,但我几乎没有使用 Google Apps 脚本的经验,除了我今天早上能够使用 Google 进行的操作。

谁能帮我指出正确的道路?

作为参考,我在 Excel 中用于相同功能的 Visual Basics 脚本如下:

Private Sub CheckBox17_Click()
['Competitive Matrix (EMEA NE)'!S:S].EntireColumn.Hidden = Not CheckBox17
End Sub

【问题讨论】:

    标签: checkbox google-apps-script google-sheets show-hide


    【解决方案1】:

    它会比 Visual Basic 版本更冗长:)

    function hideColumns() {
      // takes active spreadsheet (the one the script is bound to) into work
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var settingsSheet = ss.getSheetByName('Settings'); // insert your sheet name here
      var dataSheet = ss.getSheetByName('Data');
      // gets values from all the cells in the settings sheet into a two-dimensional array, like [[1, 2],[3, 4]]
      var values = settingsSheet.getDataRange().getValues(); 
      for (var i in values) {
        // checks every row of data if the value in first column is false or not
        if (values[i][0] == 'false') { 
          // my assumption is that each of your checkboxes is on a new line; 
          // hideColumn will hide those columns that correspond to rows to in the settings sheet
          dataSheet.hideColumn(dataSheet.getRange(1, i)); 
        }
      }
    }
    

    Google Apps Script 对几乎所有的服务都有很好的文档,SpreadsheetApp 覆盖得很好,请查看这些页面以了解上面使用的功能:

    hideColumn()

    getRange()

    getValues()

    更新: 使用onEdit 函数的版本——它查看已编辑的单元格并检查它是否在“设置”表的第一列以及新值是否为true。如果一切都是真的,它将隐藏“数据”中与编辑行相对应的列。

    function onEdit(e) {
      var dataSheet = e.source.getSheetByName('Data');
      var currentSheet = e.range.getSheet().getName();
      var row = e.range.getRow();
      var col = e.range.getColumn();
      if (currentSheet === 'Settings' && col === 1 && e.value.toLowerCase() == 'false') {
        dataSheet.hideColumn(dataSheet.getRange(1, row));
      }
    }
    

    更多关于 e 对象在 onEdit 函数中的信息:https://developers.google.com/apps-script/guides/triggers/events

    【讨论】:

    • 非常感谢您的帮助和投入 - 肯定会检查这些链接 :) 只需几个快速跟进:1)“设置”中带有复选框的列实际上是第三个,所以我猜它会是: if (values[i][3] == 'false')? 2)我需要这个函数/脚本不断检查和更新值。我是否需要为此使用“OnEdit”触发器,或者我该怎么做?目前它似乎不会自动更新。
    • getValues 将数据显示为基于 0 的 js-array(是的,我在示例中犯了一个错误,现在将修复它),所以第三列将是 values[i][2] (请注意getRange 函数在这方面是不同的,要获取第一行和第三列中单元格的值,您将使用getRange(1, 3).getValue() — 以防万一)。至于跟踪变化——是的,在这种情况下你应该试试onEdit
    • 把函数改成onEdit()就够了还是需要做一个可安装的触发器?
    • 如果您只在当前电子表格中跟踪更改,那么简单的 onEdit 就可以了,您需要一个可安装的触发器来通过不同的代码在其他电子表格中查找更改。
    • 感谢您的更新,这似乎更简单了:) - 我仍然从第 2 行得到一个错误: TypeError: Cannot read property "source" from undefined。 (linje 2, fil "SHowHideColumns")
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多