自定义菜单控制列显隐:仅恢复脚本隐藏列的技术问题求助
问题解决脚本修改方案
核心需求
- 「View all」仅恢复脚本隐藏的列,而非显示所有列
- Sheet1、Sheet2的1-3列始终保持隐藏,无需混入临时隐藏列表
修改后完整代码
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('CheckOff') .addItem('Hide', 'hideColumnsL') .addItem('View all', 'showColumns') .addToUi(); // 初始化:确保永久隐藏列始终生效 lockPermanentHiddenColumns_(); } // 恢复脚本隐藏的列 function showColumns() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const hiddenCols = PropertiesService.getScriptProperties().getProperty('hiddenColumns'); if (!hiddenCols) return; const hiddenData = JSON.parse(hiddenCols); Object.keys(hiddenData).forEach(sheetName => { const sheet = ss.getSheetByName(sheetName); if (!sheet) return; hiddenData[sheetName].forEach(col => sheet.showColumns(col)); }); // 清空已恢复的隐藏列记录 PropertiesService.getScriptProperties().deleteProperty('hiddenColumns'); // 重新锁定永久隐藏列 lockPermanentHiddenColumns_(); } // 执行指定列隐藏 function hideColumnsL() { // 仅定义临时需要隐藏的列(排除永久隐藏的1-3列) const tempHideConfig = [ { sheetName: "Sheet1", hide: [12, 13, 14] }, { sheetName: "Sheet2", hide: [13, 14, 15] } ]; // 先恢复之前脚本隐藏的列,避免重复叠加 showColumns(); const ss = SpreadsheetApp.getActiveSpreadsheet(); const hiddenData = {}; tempHideConfig.forEach(({ sheetName, hide }) => { const sheet = ss.getSheetByName(sheetName); if (!sheet) return; // 记录本次隐藏的列 hiddenData[sheetName] = hide; hide.forEach(col => sheet.hideColumns(col)); }); // 存储本次隐藏的列数据,供View all恢复使用 PropertiesService.getScriptProperties().setProperty('hiddenColumns', JSON.stringify(hiddenData)); // 确保永久隐藏列不被误显示 lockPermanentHiddenColumns_(); } // 单独处理永久隐藏列:Sheet1和Sheet2的1-3列 function lockPermanentHiddenColumns_() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const permanentConfig = [ { sheetName: "Sheet1", cols: [1,2,3] }, { sheetName: "Sheet2", cols: [1,2,3] } ]; permanentConfig.forEach(({ sheetName, cols }) => { const sheet = ss.getSheetByName(sheetName); if (!sheet) return; cols.forEach(col => sheet.hideColumns(col)); }); }
关键改动说明
- 永久隐藏列独立管理:新增
lockPermanentHiddenColumns_函数,在初始化、恢复列、隐藏列操作后都调用,确保Sheet1和Sheet2的1-3列始终隐藏,无需和临时隐藏列混在一起。 - 精准记录隐藏列:用
PropertiesService存储每次脚本触发的隐藏列数据,让「View all」可以精准恢复这些列,而不是全盘显示所有列。 - 隐藏逻辑优化:执行新隐藏操作前先恢复之前的隐藏列,避免重复隐藏导致的异常,同时更新存储记录。
- 恢复逻辑优化:仅恢复脚本记录的隐藏列,恢复后清空记录并重新锁定永久隐藏列,保证需求一致性。
内容的提问来源于stack exchange,提问作者Danielle Sullivan
相关产品推荐
相关产品推荐

