Google Sheets脚本需求:锁定首次编辑生成的日期值不更新
解决Google Sheets脚本锁定首次编辑日期的问题
没问题!要实现锁定首次编辑第3列(Col3)时生成的初始日期值,核心思路就是在设置时间戳前先检查目标单元格是否为空——如果已经有值了,就不再更新它。
修改后的完整脚本
function onEdit(event) { // assumes source data in sheet named Elisa-Miriam-Victor-Hanane-Sarah-Apoorva-Carlino // target sheet of move to named Archive var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); // Fill automatically Columns Q and R when PO number is provided in Column P. // In Q: generates the date of when the PO is mentioned; in R: it generates the PO folder name var sh=event.range.getSheet(); var namesA=["Miriam","Elisa","Hanane","Sarah","Apoorva","Victor","Carlino"]; if(namesA.indexOf(sh.getName())!=-1 && event.range.columnStart==16) { // when PO 1 N° is filled event.range.offset(0,1).setValue(new Date()).setNumberFormat("yyyy-MM-dd"); event.range.offset(0,2).setFormula(Utilities.formatString('=CONCATENATE(TEXT(Q%s;"yyyy-MM-dd");" - ";P%s)',event.range.rowStart,event.range.rowStart)); } if(namesA.indexOf(sh.getName())!=-1 && event.range.columnStart==3) { // when client is mentioned in Col 3 event.range.offset(0,9).setFormula(Utilities.formatString('=IFERROR(vlookup(E%s;IMPORTRANGE("https://docs.google.com/spreadsheets/d/1zN99rXMltbMfD_OS22NxZApgvabTG-eRv7FOIS7pBvk/edit#gid=1560028291";"Treatment!A:E");2;false);"")',event.range.rowStart)); // 新增判断:只有当目标单元格为空时,才设置时间戳 const timestampCell = event.range.offset(0,31); if (!timestampCell.getValue()) { timestampCell.setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss"); } } }
关键修改点说明
- 针对Col3的处理逻辑,我们新增了
const timestampCell = event.range.offset(0,31);来缓存目标单元格对象,避免重复获取。 - 用
if (!timestampCell.getValue())判断单元格是否为空:如果单元格已经有内容(即首次编辑时生成的日期),就跳过设置操作;只有当单元格为空时,才生成并写入当前时间戳。
这样就能确保首次编辑Col3时生成的日期被永久保留,后续修改Col3的值不会再覆盖这个初始日期啦。
内容的提问来源于stack exchange,提问作者jdsr
相关产品推荐
相关产品推荐

