选中复选框可隐藏行的Google表格脚本

时间:2019-01-22 20:43:15

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

我正在尝试找到一个工作代码,如果选中了该行F列中的复选框,该代码将自动隐藏该行。

我尝试了所有发现的脚本,但似乎没有任何效果。不幸的是,我不精通代码,无法找到问题。

这是我目前拥有的:

function onOpen() {
  var s = SpreadsheetApp.getActive().getSheetByName("Checklists");
  s.showRows(1, s.getMaxRows());

  s.getRange('F2:F200')
    .getValues()
    .forEach( function (r, i) {
    if (r[0] == "TRUE") 
      s.hideRows(i + 1);
    });
}

我正在处理的工作表是“清单”,并且包含该复选框的列是F。该复选框的值为TRUE或FALSE。如果值为TRUE,则我希望该行被隐藏。

有人可以帮忙吗!

1 个答案:

答案 0 :(得分:0)

我能够运行的快速测试是在F列中设置一列复选框,然后创建一个函数来捕获工作表上的每个编辑事件。当用户选中一个框时,这将立即捕获,然后将其隐藏。

使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul class="inline_list"> <li class="Domains"> <select> <option selected disabled>Domains</option> <option value="Diatoms">Diatoms</option> <option value="Flagellates">Flagellates</option> <option value="Dinoflagellates">Dinoflagellates</option> <option value="Ciliates">Ciliates</option> <option value="Coccolithophore">Coccolithophore</option> <option value="Miscellaneous">Miscellaneous</option> <option value="Other_plankton">Others</option> </select> </li> <li class="Diatoms domains_types"> <select> <option selected disabled>Types</option> <option value="Asterionellopsis">Asterionellopsis</option> <option value="Bacillaria">Bacillaria</option> </select> </li> <li class="Flagellates domains_types"> <select> <option selected disabled>Types</option> <option value="amoeba">amoeba</option> <option value="Chrysochromulina">Chrysochromulina</option> </select> </li> </ul>事件的技巧是确定实际更改的单元格。对于您而言,如果更改仅发生在F列中的复选框,则只希望完全遵循您的逻辑。在我的代码中,我一直在使用一个函数来确保更改在所需范围内。该函数如下所示:

onEdit

因此,您的function isInRange(checkRange, targetCell) { //--- check the target cell's row and column against the given // checkrange area and return True if the target cell is // inside that range var targetRow = targetCell.getRow(); if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false; var targetColumn = targetCell.getColumn(); if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false; //--- the target cell is in the range! return true; } 函数所要做的就是在触发编辑事件时进行快速调用,以查看更改是否在您要查找的范围内。在这种情况下,我设置了一个变量来检查范围:

onEdit

此后,只需选择行号并隐藏或显示即可。这是完整的示例解决方案:

var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");  
if (isInRange(checkRange, eventObj.range)) {