如何让Google Sheets的onEdit脚本仅在指定工作表运行且避免时间戳覆盖
修改后完整代码
function onEdit(e) { // 配置项:填入需要脚本生效的工作表名称,可按需增删 const allowedSheets = ["工作表1", "工作表2"]; // 配置监听列、对应时间戳写入的偏移量 const colsToWatch = [3, 6]; const offset = [-1, -1]; // 校验工作表权限:不在允许列表内直接终止运行 const currentSheet = e.range.getSheet(); if (allowedSheets.indexOf(currentSheet.getSheetName()) === -1) return; // 校验编辑位置:非监听列、表头行编辑直接终止运行 const ind = colsToWatch.indexOf(e.range.columnStart); if (ind === -1 || e.range.rowStart === 1) return; // 仅目标单元格为空时写入时间戳,避免覆盖已有记录 const targetCell = e.range.offset(0, offset[ind]); if (targetCell.isBlank()) { targetCell.setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT+1", "dd MMM yyyy HH:mm.ss")); } }
改动说明
- 新增工作表运行限制:修改
allowedSheets数组内容,填入你需要脚本生效的工作表名称即可,新增的未录入工作表不会触发该脚本逻辑 - 新增时间戳防覆盖逻辑:写入前会校验目标时间戳单元格是否为空,仅空单元格会写入新时间戳,已生成的时间戳不会被后续编辑操作覆盖
- 可按需调整配置:如果不需要在编辑单元格清空时同步删除时间戳,可删除
!e.value ? null :部分,直接保留Utilities.formatDate(...)写入逻辑即可,时区、时间格式也可按需求修改
内容的提问来源于stack exchange,提问作者Jon Harris
相关产品推荐
相关产品推荐

