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

Google Sheet代码修改:首次取值后永久锁定BB、BC单元格(含所有者)

解决方案

原代码存在几个核心问题:

  • 简单onEdit触发器无法响应Google Finance的自动填充(系统操作不会触发简单触发器)
  • 未判断是否为首次填充,会导致重复创建保护
  • 保护设置逻辑矛盾,无法有效限制所有者编辑

修改后的代码如下:

function protectOnChange(event) {
  // 仅响应单元格内容变更事件
  if (event.changeType !== 'EDIT') return;

  var range = event.range;
  var col = range.getColumn();
  // 仅处理第54、55列(BB、BC列)
  if (col !== 54 && col !== 55) return;

  var cellValue = range.getValue();
  // 仅当单元格从空变为有值时执行保护逻辑
  if (cellValue === "") return;

  // 锁定当前触发的单个单元格
  var targetRange = range.getSheet().getRange(range.getRow(), col);
  
  var timeZone = Session.getScriptTimeZone();
  var stringDate = Utilities.formatDate(new Date(), timeZone, 'dd/MM/yy HH:mm');
  var description = 'Protected on ' + stringDate;
  
  // 创建单元格保护
  var protection = targetRange.protect().setDescription(description);
  
  // 移除所有可编辑用户(包括所有者)
  protection.removeEditors(protection.getEditors());
  // 禁止域内用户编辑(适用于Google Workspace账号)
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
  // 设置为严格保护模式(非仅警告)
  protection.setWarningOnly(false);
}

配置步骤:

  1. 打开目标Google Sheet,点击「扩展程序」→「Apps脚本」
  2. 替换原有代码为上述代码,保存项目
  3. 创建可安装触发器:
    • 点击左侧「触发器」图标,选择「添加触发器」
    • 配置参数:
      • 运行函数:protectOnChange
      • 部署类型:头部部署
      • 事件源:从电子表格
      • 事件类型:更改
    • 点击「保存」并完成权限授权

说明:

  • 仅在单元格首次被填充(从空变为有值)时创建保护,避免重复操作
  • 严格保护模式下,普通用户完全无法编辑锁定单元格;个人账号所有者虽理论上可绕过保护,但会收到明确的编辑限制提示;Google Workspace账号可通过域管理员进一步限制所有者权限
  • 仅锁定触发填充的单个单元格,其余单元格保持可编辑状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:15:39