You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheet自动创建与最后修改时间脚本问题求助

谷歌表格自动时间戳脚本问题:批量操作失效、新增行无触发等

我给库存表的「DATABASE」工作表添加自动创建时间(列22)和最后修改时间(列23)功能,规则是:当第1列(从第3行开始)有内容时,自动填充创建时间(仅首次)和更新最后修改时间,但遇到以下问题:

  • 批量复制粘贴行时,时间戳功能完全失效
  • 拖拽单元格/数组填充时,只有首行会生成时间戳
  • 新增行后,无法即时自动生成创建时间
  • 删除第1列内容清空行后,创建时间和修改时间仍保留

我并非开发者,这是首次在技术社区提问,当前使用的脚本如下:

function onEdit(e) {
  addTimestamp(e);
}

function addTimestamp(e){
  //variables
  var startRow = 3;
  var targetColumn = 1;
  var ws = "DATABASE";

  //get modified row and column
  var row = e.range.getRow();
  var col = e.range.getColumn();

  if(col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === ws){

    var currentDate = new Date();

    e.source.getActiveSheet().getRange(row,23).setValue(currentDate);
    if(e.source.getActiveSheet().getRange(row,22).getValue()==""){
      e.source.getActiveSheet().getRange(row,22).setValue(currentDate);
    } // END IF check if date created exists
  } // END IF check column, row, worksheet
} //END function add Timestamp

修复后的脚本

以下脚本可解决上述所有问题:

function onEdit(e) {
  addTimestamp(e);
}

function addTimestamp(e) {
  const startRow = 3;
  const targetColumn = 1;
  const createCol = 22;
  const modifyCol = 23;
  const wsName = "DATABASE";
  
  const sheet = e.source.getActiveSheet();
  if (sheet.getName() !== wsName) return;
  
  const editedRange = e.range;
  const start = Math.max(editedRange.getRow(), startRow);
  const end = editedRange.getRow() + editedRange.getNumRows() - 1;
  
  // 遍历所有被编辑的行
  for (let row = start; row <= end; row++) {
    const targetCell = sheet.getRange(row, targetColumn);
    const targetValue = targetCell.getValue();
    const currentDate = new Date();
    
    if (targetValue !== "") {
      // 更新最后修改时间
      sheet.getRange(row, modifyCol).setValue(currentDate);
      // 若创建时间为空则填充
      if (sheet.getRange(row, createCol).getValue() === "") {
        sheet.getRange(row, createCol).setValue(currentDate);
      }
    } else {
      // 清空行时删除时间戳
      sheet.getRange(row, createCol).clearContent();
      sheet.getRange(row, modifyCol).clearContent();
    }
  }
}

关键修改说明

  1. 支持批量操作:遍历编辑范围内的所有行,处理批量复制粘贴、拖拽填充的场景,不再只处理单个单元格
  2. 新增行触发:只要新增行的第1列被填入内容,就会自动生成创建时间
  3. 清空行清理时间:当第1列内容被删除时,自动清空对应行的创建和修改时间
  4. 逻辑优化:明确区分创建列和修改列的变量,代码可读性更高

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:35:34