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

需求:日期过期后将工作表行移至底部(会议追踪场景)

Google Sheets 宏:自动将过期行移至动态「已完成」区域

核心思路

通过Google Apps Script实现:先定位工作表中「已完成」区域的起始位置(适配其动态变化特性),再遍历F列的会议日期,将过期行移动到该区域下方,并同步更新区域位置以保证后续操作的准确性。

完整脚本代码

function moveExpiredMeetings() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();
  const today = new Date();
  today.setHours(0, 0, 0, 0); // 仅比较日期部分,排除时间干扰

  // 定位「已完成」区域的起始行(以内容含「已完成」的行为标记)
  let completedRowIndex = -1;
  for (let i = 0; i < values.length; i++) {
    if (values[i].includes('已完成')) {
      completedRowIndex = i + 1; // 转换为工作表1-based行号
      break;
    }
  }

  if (completedRowIndex === -1) {
    SpreadsheetApp.getUi().alert('未找到「已完成」区域标题,请检查工作表结构');
    return;
  }

  // 从下往上遍历行,避免移动行导致索引错乱
  for (let i = values.length - 1; i >= 1; i--) { // 跳过第1行表头
    const dateCell = values[i][5]; // F列对应索引5
    if (dateCell instanceof Date && dateCell < today) {
      // 将过期行移至「已完成」区域的下一行
      sheet.getRange(i + 1, 1, 1, sheet.getLastColumn()).moveTo(sheet.getRange(completedRowIndex, 1));
      // 删除原行
      sheet.deleteRow(i + 1);
      // 更新「已完成」区域起始行(新增行后区域下移一行)
      completedRowIndex++;
    }
  }
}

关键细节说明

  • 动态区域定位:遍历工作表找到「已完成」标记行,无论该区域随新增会议如何移动,都能准确定位目标位置。
  • 反向遍历逻辑:从最后一行往表头方向遍历,避免移动行后后续行的索引偏移,确保所有过期行都能被正确处理。
  • 日期比较精度:将当天日期重置为0点,只比较日期部分,防止因单元格时间差异导致误判。
  • 行移动与同步:每次移动行后更新「已完成」区域的起始行号,保证新移动的行始终追加到区域末尾。

使用步骤

  1. 打开目标Google工作表,点击「扩展程序」→「Apps脚本」。
  2. 新建脚本文件,替换默认代码为上述脚本,保存并命名(如MoveExpiredMeetings)。
  3. 首次运行脚本,按提示完成权限授权。
  4. (可选)设置自动运行:点击左侧「触发器」→「添加触发器」,选择该函数,事件源设为「时间驱动」,设置每日/每周等触发频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:55:17