
本文介绍如何在 Google Sheets 中,当通过复制粘贴向指定工作表(如 “Operational sheet”)插入新行时,自动在第 C 列填入固定不可变的当前日期(非动态 TODAY()),并提供可直接部署的 Apps Script 解决方案。
本文介绍如何在 google sheets 中,当通过复制粘贴向指定工作表(如 “operational sheet”)插入新行时,自动在第 c 列填入**固定不可变的当前日期**(非动态 today()),并提供可直接部署的 apps script 解决方案。
在 Google Sheets 中,TODAY() 函数会随日期自动更新,无法满足“粘贴即固化时间戳”的业务需求(例如记录数据入库时间)。而默认的 onEdit(e) 触发器仅响应手动编辑行为,对批量粘贴(Paste)、拖拽填充或跨表复制等操作不触发——这正是你遇到的核心限制。
要解决该问题,关键在于:正确识别粘贴动作的范围,并在列 A 有内容的行对应位置,批量写入格式化后的静态日期。以下为经过验证、开箱即用的解决方案:
✅ 基础版脚本(推荐新手使用)
适用于绝大多数场景:只要在“Operational sheet”中向列 A 粘贴任意行(单行或多行),则自动在对应行的列 C 填入当前日期(格式:dd.MM.yyyy,时区 GMT+9:00):
Google索引API工具。用于提交URL以供Google索引。支持两种模式:“auto-index”(获取sitemap,与缓存对比差异并提交...)
function onEdit(e) {
var sheetName = "Operational sheet"; // ⚠️ 请严格核对工作表名称(区分大小写与空格!)
var range = e.range;
var sheet = range.getSheet();
// 仅当编辑发生在列 A 且目标表名为指定名称时执行
if (range.columnStart !== 1 || sheet.getSheetName() !== sheetName) return;
// 批量写入:从起始行到结束行,全部填入列 C
var numRows = range.rowEnd - range.rowStart + 1;
var targetRange = sheet.getRange(range.rowStart, 3, numRows, 1); // 第3列 = C列
targetRange.setValue(Utilities.formatDate(new Date(), "GMT+9:00", "dd.MM.yyyy"));
}
✅ 优势:简洁、高效、兼容多行粘贴;自动适配粘贴区域高度,无需逐行循环。
? 进阶版(按条件写入)
若希望仅当粘贴行的 A 列和 B 列均有值时才写入日期(避免空白行被误标记),请使用此版本:
function onEdit(e) {
var sheetName = "Operational sheet";
var range = e.range;
var sheet = range.getSheet();
if (range.columnStart !== 1 || sheet.getSheetName() !== sheetName) return;
// 获取粘贴区域所有单元格的显示值(含空值)
var values = range.getDisplayValues();
var rowStart = range.rowStart;
// 筛选出 A、B 列均非空的行号,生成 C 列目标地址数组
var targetCells = [];
values.forEach(function(row, i) {
if (row[0] !== "" && row[1] !== "") { // A列(row[0]) & B列(row[1])均非空
targetCells.push("C" + (i + rowStart));
}
});
if (targetCells.length === 0) return;
// 批量设置日期(性能优于逐行 setValues)
sheet.getRangeList(targetCells)
.setValue(Utilities.formatDate(new Date(), "GMT+9:00", "dd.MM.yyyy"));
}
? 部署与注意事项
- 打开脚本编辑器:在 Sheets 中依次点击 扩展程序 → Apps Script;
- 粘贴代码:删除默认 myFunction,将上述任一版本完整粘贴;
- 保存并命名:点击左上角文件名 → 改为 AutoTimestamp → Ctrl+S;
- 无需手动触发:onEdit 是简单触发器,保存后自动生效;
-
关键校验项:
- ✅ 工作表名称必须完全一致(如示例中是 Operational sheet,而非 Operational Sheet);
- ✅ 日期时区 "GMT+9:00" 对应日本标准时间(JST),如需其他时区,请参考 IANA 时区列表 修改(例如 "Asia/Shanghai");
- ❌ 不支持 Ctrl+V 粘贴 纯数值(不含格式)时触发 —— 因 Google Sheets 将其视为“无编辑事件”,此时建议改用 onPaste 触发器(需高级权限,本文暂不展开)。
? 小结:本方案利用 onEdit 的 range 对象精准捕获粘贴范围,结合 getRange 或 getRangeList 实现高性能批量写入,彻底规避 TODAY() 的动态性缺陷。即使你是脚本新手,只需复制、核对表名、保存,即可立即获得可靠的静态时间戳功能。










