【问题标题】:hide columns based on user input cell根据用户输入单元格隐藏列
【发布时间】:2019-11-05 17:30:34
【问题描述】:

大家好(我是脚本新手),

这是我需要帮助的工作表样本。

https://docs.google.com/spreadsheets/d/1iypkWdUsSkow9m8nTSFS25HgY1d5vsVMZvjEynwQJcM/edit?usp=sharing

我需要的是一个可以在编辑时运行的脚本。

用户有 5 个可选字段,以黄色突出显示。只有在编辑单元格 F3 时脚本才应该运行。

它应该做的是隐藏第 1 行与 F3 不匹配的所有列。

请帮忙!

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我编写了这个小函数,它根据F3 中下拉列表的值隐藏或取消隐藏列,并且仅在修改此单元格时运行。

    将此复制到绑定到电子表格的脚本中:

    function onEdit(e) {
      var ss = e.source; // Spreadsheet that triggered the function
      var sheet = ss.getActiveSheet();
      var sheetName = "Sheet1"; // Change accordingly
      var range = e.range; // Range that was edited
      var editedColumn = range.getColumn();
      var editedRow = range.getRow();
      var column = 6;
      var row = 3;  
      // Check that the edited cell is F3 and the edited sheet is the one you want:
      if(column == editedColumn && row == editedRow && sheet.getName() == sheetName) {
        var dropdownValue = range.getValue(); // Value of F3
        // Index of last column with content. If you want to hide the blank columns after that, use sheet.getMaxColumns() instead:
        var cols = sheet.getLastColumn();
        // First row values:
        var headers = sheet.getRange(1, 1, 1, cols).getValues()[0];
        // Looping through each column (hiding or unhiding depending on whether value matches):
        for(var i = 1; i < cols; i++) {
          if(headers[i] != dropdownValue) {
            sheet.hideColumns(i + 1);
          } else {
            sheet.showColumns(i + 1);
          }
        }
      }
    }
    

    请告诉我这是否适合你。

    【讨论】:

    • 非常接近,但有一些异常。如果您转到工作表并从 F3 下拉菜单中选择 CPR,即使在第 1 行中您可以看到该列中有 TB,AD 列仍会显示。此外,如果您选择 TB,您可以看到一些没有 TB 的列仍然可见(P、AA、AG)。如果选择了 B 类,则相同,列 T 和 AG 可见但不应该可见。感谢您所做的一切,希望您有时间来看看这些问题? docs.google.com/spreadsheets/d/…
    • @TonySilveira,真的。隐藏/显示列时使用的索引存在一个非常小的问题(sheet.hideColumns(i) 应该是 sheet.hideColumns(i + 1)showColumns 也是如此)。现在我检查了一下,它完全隐藏了它必须隐藏的东西,没有例外。看看现在是否适合你。
    • 太棒了!像魅力一样工作,非常感谢!如果可以,再问一个问题?我正在使用该表以使其更加用户友好。因此,不是用户在下拉列表中选择 CPR/TB/CLASS B,而是脚本中引用的单元格 F3,单元格 F3 现在是公式驱动的,这里是公式: =ifs(I3="YES","TB" ,I5="YES","CPR",I7="YES","CLASS B")。但现在脚本似乎不喜欢 F3,我认为它将它视为一个公式,而不是输出的文本。那么,是否有任何东西可以放入脚本中以强制它查看公式输出而不是公式?
    • 这不是脚本获取公式的问题,而不是值的问题。问题是编辑的单元格不再是 F3,所以它没有使用 F3 的值来隐藏/取消隐藏列。脚本应该稍作修改以完成此操作,但这不是您在原始问题中想要做的,所以我建议您在当前问题中发布另一个问题,并将此问题标记为由 accepting the answer 解决解决了你原来的问题。
    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2021-03-15
    • 2017-06-27
    • 2019-05-31
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多