
本文介绍如何使用 google apps script 编写自动化脚本,在指定日期(或早于当前日期)自动删除 google sheets 中的整行数据,并支持定时触发,无需手动操作。
本文介绍如何使用 google apps script 编写自动化脚本,在指定日期(或早于当前日期)自动删除 google sheets 中的整行数据,并支持定时触发,无需手动操作。
在日常数据管理中,常需清理过期记录(如活动截止日、任务到期日、临时通知等)。Google Sheets 本身不支持原生“到期自动删除”,但借助 Google Apps Script(GAS)可轻松实现该功能。以下是一套稳定、可配置、生产就绪的解决方案。
✅ 核心逻辑说明
脚本通过读取指定列(例如 "COL1",即 A 列)中的日期值,与当前日期(不含时间部分)比对:
- 若单元格日期 早于今天(
),则整行被删除; - 若需 精确匹配某一天才删除(如仅删除
2023-08-15当天的行),可将改为 <code>==; - 脚本自动识别表头(第一行),支持任意列名,无需硬编码列索引。
? 完整脚本(推荐版 —— 删除所有“已过期”行)
function deleteOldRows() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0"); // ✅ 请根据实际工作表名修改
if (!sh) throw new Error("未找到工作表 'Sheet0',请检查名称是否正确");
const dataRange = sh.getDataRange();
const values = dataRange.getValues();
if (values.length < 2) return; // 无数据或仅有表头,退出
const [header, ...rows] = values;
const today = new Date();
const todayMidnight = new Date(today.getFullYear(), today.getMonth(), today.getDate()).valueOf();
// 构建列名 → 列索引映射(支持动态列名)
const colIndex = {};
header.forEach((name, i) => colIndex[name.trim()] = i);
if (!colIndex["COL1"]) {
throw new Error("表头中未找到 'COL1' 列,请确认日期列标题是否为 'COL1'(区分大小写)");
}
let deletedCount = 0;
rows.forEach((row, i) => {
const dateCell = row[colIndex["COL1"]];
if (!dateCell) return; // 空单元格跳过
const cellDate = new Date(dateCell);
if (isNaN(cellDate.getTime())) {
console.warn(`第 ${i + 2} 行日期格式无效:${dateCell}`);
return;
}
const cellMidnight = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate()).valueOf();
if (cellMidnight < todayMidnight) {
sh.deleteRow(i + 2 - deletedCount); // ⚠️ 注意:因逐行删除,需动态修正行号
deletedCount++;
}
});
console.log(`✅ 已成功删除 ${deletedCount} 行过期数据`);
}? 使用步骤
- 打开脚本编辑器:在 Google Sheets 中点击 扩展程序 → Apps Script;
-
粘贴脚本:替换默认代码,保存(命名如
AutoDeleteExpiredRows); -
修改配置项(关键!):
-
getSheetByName("Sheet0")→ 替换为你的实际工作表名(如"数据表"); -
"COL1"→ 替换为存放日期的列标题(如"截止日期"、"到期日"),确保与表头完全一致;
-
- 测试运行:点击 ▶️ 运行按钮,首次执行会请求授权(允许访问表格);
-
设置定时触发(自动化):
- 点击左侧 ☰ → 触发器 → + 添加触发器;
- 选择函数
deleteOldRows; - 事件来源:
时间驱动; - 选择频率(推荐
每天或每小时); - 保存。
⚠️ 注意事项
-
日期格式必须有效:建议在 Sheets 中将日期列设置为「日期」格式(格式 → 数字 → 日期),避免文本型日期(如
"8/1/2023"文本)导致解析失败; - 删除不可逆:脚本执行后行将永久移除(回收站不保留),强烈建议先备份或在测试表中验证;
-
性能优化:若数据量 > 5000 行,建议改用
batchUpdate或分批处理(本文脚本适用于常规业务规模); -
时区注意:脚本使用脚本项目设置的时区(默认为账户时区),可在
Apps Script 项目设置中确认。
? 扩展建议
- 如需“软删除”(仅标记不删除),可新增一列
Status并设为"ARCHIVED"; - 如需邮件通知删除结果,可在末尾添加
MailApp.sendEmail(...); - 支持多条件(如
日期过期 AND 状态=待处理),只需扩展if判断逻辑。
通过以上配置,你的 Google Sheet 将真正具备“智能生命周期管理”能力——让数据准时退场,让表格始终轻盈可靠。


















