如何让Google Sheets首次生成的Timestamp固定不随编辑变更?
解决Google Sheets仅生成首次Timestamp的问题
你的核心需求是让Timestamp仅在第4、5、6列首次全部填写完成时生成,后续编辑这些列不再更新。原代码的问题是缺少对Timestamp列是否已存在值的判断,导致每次满足条件都会覆盖原有时间戳。
修改方案
只需在原有的判断条件中新增检查第1列(Timestamp所在列)是否为空的逻辑,只有当该列无值时才生成时间戳。
修改后的完整代码
function onEdit(e) { const editedRange = e.range; const sheet = editedRange.getSheet(); const row = editedRange.getRow(); // 仅在Data工作表、编辑的是4/5/6列、4/5/6列均不为空、且Timestamp列(第1列)为空时执行 if ( sheet.getName() === 'Data' && [4,5,6].includes(editedRange.getColumn()) && sheet.getRange(row, 4).getValue() !== "" && sheet.getRange(row, 5).getValue() !== "" && sheet.getRange(row, 6).getValue() !== "" && sheet.getRange(row, 1).getValue() === "" ) { const timestampRange = sheet.getRange(row, 1); timestampRange.setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "d/MM/yyyy HH:mm:ss")); } }
关键改动说明
- 新增条件
sheet.getRange(row, 1).getValue() === "":确保只有当Timestamp列还未生成值时,才会执行赋值操作,避免后续编辑覆盖原有时间戳 - 将列判断改为
[4,5,6].includes(editedRange.getColumn()):写法更简洁,逻辑和原代码一致 - 简化了
timestampRange的定义:因为只针对单行单列,无需getNumRows()参数
内容的提问来源于stack exchange,提问作者tirpitz
相关产品推荐
相关产品推荐

