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

Google Sheets 实现数据录入1小时后自动锁定对应行的操作方法

实现方案:Google Sheets 录入满1小时自动锁行

步骤1:打开脚本编辑器

  • 打开目标Google Sheets文件,点击顶部菜单栏「扩展程序」->「Apps 脚本」,进入脚本编辑页,删除默认生成的空函数。

步骤2:编写核心脚本

第一个函数:监听编辑事件,记录录入完成时间

你可以指定某一列用来隐藏存储行的编辑时间戳,下面示例中用第8列(H列)存储,可根据自己的表格结构修改列号:

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  // 如需仅监控特定工作表,可加判断:if(sheet.getName() !== "你的目标工作表名") return;
  const editedRow = e.range.getRow();
  // 存储时间戳的列号,按需修改
  const timestampCol = 8;
  // 仅未记录过时间的行新增时间戳,避免重复覆盖
  if (!sheet.getRange(editedRow, timestampCol).getValue()) {
    sheet.getRange(editedRow, timestampCol).setValue(new Date());
  }
}

第二个函数:定时检查并锁定到期的行

function lockOldRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // 替换为你的实际工作表名
  const sheet = ss.getSheetByName("你的工作表名称");
  // 和上方时间戳列号保持一致
  const timestampCol = 8;
  const lastRow = sheet.getLastRow();
  const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);
  const timestamps = sheet.getRange(1, timestampCol, lastRow, 1).getValues();
  // 保留表格所有者的编辑权限
  const owner = Session.getEffectiveUser();

  for (let i = 0; i < timestamps.length; i++) {
    const rowNum = i + 1;
    const editTime = timestamps[i][0];
    // 跳过无时间戳、未到1小时、已经锁定的行
    if (!editTime || editTime > oneHourAgo || sheet.getRange(rowNum, 1, 1, sheet.getLastColumn()).getProtections(SpreadsheetApp.ProtectionType.RANGE).length > 0) {
      continue;
    }
    // 锁定当前行
    const protection = sheet.getRange(rowNum, 1, 1, sheet.getLastColumn()).protect();
    protection.removeEditors(protection.getEditors());
    protection.addEditor(owner);
    // 如需给其他管理员保留编辑权限,可加:protection.addEditor("管理员邮箱地址");
    protection.setDescription(`第${rowNum}行录入满1小时自动锁定`);
  }
}

步骤3:配置触发器

  • 保存脚本项目,自定义命名即可,按照提示完成脚本访问表格的权限授权。
  • 点击脚本编辑器左侧闹钟形状的「触发器」按钮,新增第一个触发器:
    • 运行函数选择 onEdit
    • 事件来源选择「电子表格」
    • 事件类型选择「编辑时」
    • 保存并完成权限验证
  • 再新增第二个触发器,用来定时执行锁行逻辑:
    • 运行函数选择 lockOldRows
    • 事件来源选择「时间驱动」
    • 类型选择「小时计时器」
    • 时间间隔选择「每1小时」
    • 保存即可

注意事项

  • 时间戳列不要和现有数据列冲突,配置完成后可以右键隐藏该列,不影响协作者正常录入。
  • 如需仅判定特定列编辑才算录入完成,可在onEdit函数中加判断逻辑:if(e.range.getColumn() !== 你指定的列号) return;
  • 整个配置操作必须由表格所有者完成,否则锁行权限无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:45:03