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

如何修改Google Sheets脚本以仅保留最后两个录入日期的行?

修改脚本实现隐藏除最后两个录入日期外的行

你的需求是替换原脚本中“今日/昨日”的判断逻辑,改为保留表格内最后两个录入的日期对应的行,同时优化脚本运行效率,以下是具体实现:

优化后的脚本

function hideRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Example");
  const lastRow = sheet.getLastRow();
  // 只取A列有数据的范围(第9行到最后一行),避免空行浪费资源
  const dateRange = sheet.getRange(9, 1, lastRow - 8, 1);
  const dateValues = dateRange.getValues().flat(); // 转换为一维数组

  // 从后往前遍历,收集唯一的日期,直到拿到最后两个
  const uniqueDates = new Set();
  for (let i = dateValues.length - 1; i >= 0; i--) {
    const date = new Date(dateValues[i]);
    // 处理有效日期,排除空值
    if (!isNaN(date.getTime())) {
      // 统一日期格式(去除时分秒),避免同一日期因时间不同被重复统计
      const normalizedDate = new Date(date.setHours(0, 0, 0, 0)).toString();
      uniqueDates.add(normalizedDate);
      if (uniqueDates.size === 2) break;
    }
  }

  // 先取消所有行的隐藏,避免重复运行时出现异常
  sheet.showRows(9, lastRow - 8);

  // 收集需要隐藏的行号
  const rowsToHide = [];
  for (let i = 0; i < dateValues.length; i++) {
    const currentDate = new Date(dateValues[i]);
    if (!isNaN(currentDate.getTime())) {
      const normalizedCurrent = new Date(currentDate.setHours(0, 0, 0, 0)).toString();
      if (!uniqueDates.has(normalizedCurrent)) {
        // 行号是第9行 + 当前索引
        rowsToHide.push(i + 9);
      }
    }
  }

  // 批量隐藏行,减少服务端调用次数,提升效率
  if (rowsToHide.length > 0) {
    // 将连续的行合并,进一步优化
    let startRow = rowsToHide[0];
    let rowCount = 1;
    for (let i = 1; i < rowsToHide.length; i++) {
      if (rowsToHide[i] === rowsToHide[i - 1] + 1) {
        rowCount++;
      } else {
        sheet.hideRows(startRow, rowCount);
        startRow = rowsToHide[i];
        rowCount = 1;
      }
    }
    // 处理最后一组连续行
    sheet.hideRows(startRow, rowCount);
  }
}

关键逻辑说明

  1. 提取最后两个唯一日期:从后往前遍历日期列,用Set自动去重,收集到2个唯一日期后停止,确保拿到的是最新录入的两个日期。
  2. 日期归一化:将所有日期的时分秒设为0,避免同一日期因记录时的时间差异被误判为不同日期。
  3. 批量操作优化:
    • 只读取有数据的范围,而非整列,减少数据处理量;
    • 先收集所有需要隐藏的行号,再合并连续行批量隐藏,大幅减少对SpreadsheetApp服务端的调用次数(逐行调用是低效的主要原因);
    • 每次运行先显示所有行,避免重复运行时出现行状态混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:34:56