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

Google Sheets Apps Script 实现每周递增隐藏23行显示当周计划问题求助

代码错误原因

  1. 你之前的嵌套循环里finalRow是数值类型,尝试用finalRow[n]读取数组下标属于类型错误,直接触发运行异常。
  2. 不需要循环调用hideRows,该方法本身支持批量隐藏连续行,单次调用即可完成操作,循环反而会导致逻辑错误、执行效率极低。
  3. 没有关联周数计算或历史隐藏进度的逻辑,所以每次运行只能固定隐藏23行,无法实现递增效果。

实现方案

方案1:自动匹配当前周数,自动计算需要隐藏的行数

无需手动触发,建议绑定到表格打开事件,每次打开自动显示当周内容:

function hideRowsWeekStart() {
  const SHEET_NAME = 'Nedēļas_plānotājs'; // 你的工作表名称
  const ROWS_PER_WEEK = 23; // 每周占用的行数
  const WEEK_OFFSET = 0; // 如果周数匹配不准可以调整偏移,比如要提前一周藏就设为1,延后就设为-1

  // 获取工作表
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(SHEET_NAME);
  if (!sheet) return;

  // 计算当前是今年的第几周
  const now = new Date();
  const startOfYear = new Date(now.getFullYear(), 0, 1);
  const pastDaysOfYear = (now - startOfYear) / 86400000;
  const currentWeek = Math.ceil((pastDaysOfYear + startOfYear.getDay() + 1) / 7) + WEEK_OFFSET;

  // 计算需要隐藏的总行数
  const totalHideRows = currentWeek * ROWS_PER_WEEK;
  // 边界处理:要隐藏的行数不能超过表格实际行数
  const maxRows = sheet.getMaxRows();
  if (totalHideRows <= 0 || totalHideRows >= maxRows) return;

  // 单次调用批量隐藏
  sheet.hideRows(1, totalHideRows);
}

方案2:手动触发,每次运行多隐藏23行

适合不需要严格按日历周切换,想要手动控制周进度的场景,会自动存储上次隐藏的位置:

function hideNextWeekRows() {
  const SHEET_NAME = 'Nedēļas_plānotājs';
  const ROWS_PER_WEEK = 23;
  // 用脚本属性存储已经隐藏到的行号
  const props = PropertiesService.getScriptProperties();
  let lastHideRow = Number(props.getProperty('lastHideRow') || 0);

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(SHEET_NAME);
  if (!sheet) return;

  const newHideRow = lastHideRow + ROWS_PER_WEEK;
  const maxRows = sheet.getMaxRows();
  if (newHideRow >= maxRows) return;

  sheet.hideRows(lastHideRow + 1, ROWS_PER_WEEK);
  props.setProperty('lastHideRow', String(newHideRow));
}

// 如果需要重置隐藏进度可以运行这个函数
function resetHideProgress() {
  PropertiesService.getScriptProperties().deleteProperty('lastHideRow');
  // 取消所有隐藏行的代码可去掉下方注释启用
  // const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Nedēļas_plānotājs');
  // sheet.unhideRow(sheet.getRange(1,1, sheet.getMaxRows()));
}

使用说明

  • 复制对应代码到你的Apps Script编辑器保存即可运行
  • 如果选择方案1,可以在Apps Script的触发器页面添加触发条件,选择「打开时」触发,每次打开表格就会自动适配当前周隐藏历史行
  • 所有历史行仅做隐藏处理,需要查看时手动选中前后行右键选择「取消隐藏行」即可恢复查看

内容的提问来源于stack exchange,提问作者Liepājas Liedaga vidusskola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:36:03