贝利信息

如何为特定工作表的编辑操作添加唯一时间戳

日期:2026-01-09 00:00 / 作者:聖光之護

本文讲解如何修正 google sheets 脚本中因未校验目标工作表而导致的时间戳误写问题,确保仅当“verify”表的第9列被编辑时,才在对应行第11列写入首次时间戳。

原始脚本的核心缺陷在于:它始终将 sh 变量固定指向 "Verify" 工作表,但后续判断仅检查了编辑列(col == 9)和目标单元格是否为空,完全忽略了编辑实际发生在哪张表上。因此,只要任意工作表(如 "Example Sheet")第9列某行被编辑,脚本就会获取该行号 row,然后去 "Verify" 表的同一行第11列写入时间戳——这正是您观察到“跨表误打时间戳”的根本原因。

要实现精准响应,必须同时满足三个条件:

以下是修复后的完整脚本:

function onEdit(e) {
  var sh = e.source.getActiveSheet(); // ✅ 动态获取当前编辑的工作表
  var row = e.range.getRow();
  var col = e.range.getColumn();

  // ✅ 仅当编辑发生在 "Verify" 表且是第9列时继续
  if (col === 9 && sh.getName() === 'Verify') {
    var stampCell = sh.getRange(row, 11); // 获取本表第11列对应单元格
    if (!stampCell.getValue()) { // ✅ 检查本表该单元格是否为空
      var tz = e.source.getSpreadsheetTimeZone();
      var date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy hh:mm:ss');
      stampCell.setValue(date);
    }
  }
}

⚠️ 关键注意事项:

通过这一修正,脚本逻辑真正实现了“所见即所得”:只有在 "Verify" 表第9列被编辑的那一刻,其同行第11列才会被安全、唯一地打上时间戳。