You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义菜单控制列显隐:仅恢复脚本隐藏列的技术问题求助

问题解决脚本修改方案

核心需求

  • 「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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:05:33