我正在尝试找到一个工作代码,如果选中了该行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,则我希望该行被隐藏。
有人可以帮忙吗!
答案 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)) {