编写用于隐藏/取消隐藏非相邻列的Google Apps Script函数
解析箭头函数并完善非相邻列隐藏/取消隐藏函数
一、先搞懂hide=>这类箭头函数
你看到的hide=>{...}是ES6的箭头函数语法,这里的hide只是个参数变量名,就像普通函数function(hide) {...}里的hide一样,代表数组里的每一个元素(也就是你要操作的列索引)。
直白点说,这两种写法完全等价:
// 箭头函数写法 hideColumns.forEach(hide => { sheet.hideColumn(sheet.getRange(1, hide)); }) // 普通函数写法 hideColumns.forEach(function(hide) { sheet.hideColumn(sheet.getRange(1, hide)); })
原代码里用show和hide当参数名,只是为了对应显示/隐藏的场景,换成col、index这类名字完全不影响功能。
二、原代码的几个问题
- 逻辑完全错误:
if (hideColumns.length > 0)永远成立(你数组里有元素),所以else里的隐藏代码永远跑不起来,根本没法触发隐藏操作 - 语法错误:第一个forEach的代码块少了闭合的
),运行会直接报错 - 列索引踩坑:Google Sheets的列是从1开始计数的,但你数组里写了
0,会导致找不到第0列的错误 - 冗余操作:
sheet.getRange(11,1).activate()完全没必要,激活单元格不影响列的显示/隐藏
三、完善后的可运行函数
下面的代码实现了自动切换列的显示/隐藏状态——列当前是隐藏的就显示,是显示的就隐藏:
function toggleColumnsVisibility() { // 要切换的列索引(注意:Google Sheets列从1开始,别写0) const targetColumns = [1, 2, 4, 8, 16]; const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); // 遍历每一列,切换可见性 targetColumns.forEach(colIndex => { const columnRange = sheet.getRange(1, colIndex); // 判断列当前是否被用户隐藏 if (columnRange.isColumnHiddenByUser()) { sheet.showColumn(columnRange); // 隐藏则显示 } else { sheet.hideColumn(columnRange); // 显示则隐藏 } }); }
完善点说明:
- 修正了列索引:把原数组的0开头改成1开头,符合Sheets的规则
- 实现了真正的切换逻辑:用
isColumnHiddenByUser()判断列的当前状态,不用手动区分隐藏/显示 - 删掉了没用的激活单元格操作
- 变量名更清晰:比如
hideColumns改成targetColumns,因为现在是切换状态,不是只隐藏 - 修复了原代码的语法错误
内容的提问来源于stack exchange,提问作者Sébastien Chevin
相关产品推荐
相关产品推荐

