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

Google Apps Script 自动隐藏超1个月工作表功能失效求助

Google Apps Script 工作表自动生成与隐藏方案

现有代码核心问题

  • 直接拿Range对象和月份数字做比较,没有读取单元格实际存储的值,条件判断完全不生效
  • 隐藏逻辑没有排除需要保留的主工作表、模板工作表,会误藏核心表
  • 原有月份比对逻辑没有处理跨年场景,比如12月生成的表到次年1月会被判定为月份数字1 < 12,不会隐藏

方案一:最简实现(优先推荐,符合你的简化需求)

运行脚本时自动隐藏除主工作表、新生成的当日工作表之外的所有表,逻辑简单无bug:

// 请将下方的MAIN_SHEET_NAME替换为你实际的主工作表名称
const MAIN_SHEET_NAME = "主工作表";
const TEMPLATE_SHEET_NAME = "DAILY STANDUP TEMPLATE";

function createNewStandupSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // 生成日期信息
  var options = { day: '2-digit', month: 'short', year: 'numeric' };
  var todaysDate = new Date().toLocaleDateString("en-GB", options);
  var weekStr = Utilities.formatDate(new Date(), "GMT", "'Week'w");

  // 复制模板生成新表
  var newSheet = ss.getSheetByName(TEMPLATE_SHEET_NAME).copyTo(ss);
  SpreadsheetApp.flush();
  var newSheetName = weekStr + "-" + todaysDate;
  newSheet.setName(newSheetName);

  // 写入表头日期
  newSheet.getRange("C1:G1").setValue(todaysDate);

  // 隐藏除主表、新表、模板表之外的所有表
  hideAllSheetsExcept([MAIN_SHEET_NAME, newSheetName, TEMPLATE_SHEET_NAME]);
}

function hideAllSheetsExcept(keepSheetNames) {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for(var i = 0; i < sheets.length; i++){
    var currentSheet = sheets[i];
    // 如果当前表不在保留列表里就隐藏
    if(!keepSheetNames.includes(currentSheet.getName())){
      currentSheet.hideSheet();
    }
  }
}

方案二:按「超过1个月自动隐藏」逻辑优化实现

如果你需要保留当月的历史表,只隐藏超过1个月的旧表,可以用这个版本,解决了原有月份比对的所有问题:

// 请将下方的MAIN_SHEET_NAME替换为你实际的主工作表名称
const MAIN_SHEET_NAME = "主工作表";
const TEMPLATE_SHEET_NAME = "DAILY STANDUP TEMPLATE";

function createNewStandupSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // 生成日期信息
  var today = new Date();
  var options = { day: '2-digit', month: 'short', year: 'numeric' };
  var todaysDate = today.toLocaleDateString("en-GB", options);
  var weekStr = Utilities.formatDate(today, "GMT", "'Week'w");
  // 生成当前时间戳存储,后续用于判断是否超过1个月
  var currentTimeStamp = today.getTime();

  // 复制模板生成新表
  var newSheet = ss.getSheetByName(TEMPLATE_SHEET_NAME).copyTo(ss);
  SpreadsheetApp.flush();
  var newSheetName = weekStr + "-" + todaysDate;
  newSheet.setName(newSheetName);

  // 写入表头日期和当前时间戳(存到A50单元格,不影响正常使用)
  newSheet.getRange("C1:G1").setValue(todaysDate);
  newSheet.getRange("A50").setValue(currentTimeStamp);

  // 隐藏超过1个月的非保留表
  hideExpiredSheets();
}

function hideExpiredSheets() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  // 计算30天前的时间戳(1个月按30天算,可自行调整)
  var oneMonthAgoTimeStamp = new Date().getTime() - 30 * 24 * 60 * 60 * 1000;

  for(var i = 0; i < sheets.length; i++){
    var currentSheet = sheets[i];
    var sheetName = currentSheet.getName();
    // 跳过主表和模板表
    if(sheetName == MAIN_SHEET_NAME || sheetName == TEMPLATE_SHEET_NAME) continue;
    // 读取存储的创建时间戳
    var createTimeStamp = currentSheet.getRange("A50").getValue();
    // 如果没有存储时间戳或者时间超过1个月就隐藏
    if(!createTimeStamp || createTimeStamp < oneMonthAgoTimeStamp){
      currentSheet.hideSheet();
    }
  }
}

内容的提问来源于stack exchange,提问作者SKB111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03