如何通过脚本根据复选框隐藏当前行及至下一个复选框的行
Google Sheets脚本:勾选复选框隐藏当前行到下一个复选框间的所有行
需求说明
当复选框处于勾选状态(值为true)时,需要隐藏当前复选框所在行到下一个复选框所在行之间的所有行(包括当前行),且复选框之间的行数不固定。当前脚本仅能隐藏勾选的单行,需要修改实现需求。
原代码
function HIDE_OVER_PROJ() { var REA_PROJsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TEST_PROJETS"); var over = REA_PROJsheet.getRange(2, 3, REA_PROJsheet.getLastRow()).getValues(); Logger.log(over) for (let i = 0; i < over.length; i++) { if (over[i][0] == (true)) { REA_PROJsheet.hideRows([i + 2]); } } }
修改后的脚本
function HIDE_OVER_PROJ() { const REA_PROJsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TEST_PROJETS"); const lastRow = REA_PROJsheet.getLastRow(); // 获取第三列(复选框列)从第2行开始的所有值,并转为一维数组 const checkboxValues = REA_PROJsheet.getRange(2, 3, lastRow - 1).getValues().flat(); // 收集所有复选框所在的实际行号(对应表格中的行) const checkboxRows = []; checkboxValues.forEach((value, index) => { // 筛选出复选框单元格(值为布尔类型) if (typeof value === 'boolean') { checkboxRows.push(index + 2); } }); // 遍历每个复选框,处理勾选状态的行 checkboxValues.forEach((value, index) => { if (value === true) { const currentRow = index + 2; // 找到当前行之后的第一个复选框行号 const nextCheckboxRow = checkboxRows.find(row => row > currentRow); // 确定隐藏的结束行:有下一个复选框则到它的前一行,否则到表格最后一行 const endRow = nextCheckboxRow ? nextCheckboxRow - 1 : lastRow; // 隐藏连续行:startRow为当前行,行数为结束行减开始行加1 if (currentRow <= endRow) { REA_PROJsheet.hideRows(currentRow, endRow - currentRow + 1); } } }); }
关键改动说明
- 收集复选框行号:先遍历所有复选框单元格,记录它们在表格中的实际行号,解决复选框位置不固定的问题。
- 计算隐藏范围:对每个勾选的复选框,找到下一个复选框的位置,以此确定隐藏的结束行;如果是最后一个复选框,则隐藏到表格末尾。
- 高效隐藏行:使用
hideRows(startRow, numRows)方法一次性隐藏连续行,相比逐行调用更高效,减少脚本执行时间。
内容的提问来源于stack exchange,提问作者TACTILE
相关产品推荐
相关产品推荐

