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

如何阻止Google Sheet非所有者删除指定区域的复选框?

解决Google Sheets复选框防删除需求

首先明确:单纯用内置区域保护做不到你要的效果——如果锁定I2:I50仅允许你编辑,其他用户连勾选复选框都不行;如果开放编辑权限,他们就能删掉复选框。得结合内置保护+Apps Script,才能实现「允许其他人勾选,但只有你能删除复选框」的需求。

操作步骤

1. 先给目标区域加基础保护

先设置一层保护,限制其他用户只能改复选框的勾选状态,不能碰格式和数据验证:

  • 选中I2:I50区域,右键选「保护范围」
  • 右侧面板里,把权限设为「限制谁可以编辑此范围」,添加其他用户为编辑器
  • 点开「高级权限设置」,勾选「允许编辑范围的用户:只能编辑单元格值」
  • 这一步能挡住大部分误操作,但还是有漏洞(比如粘贴内容会覆盖数据验证),所以需要脚本补防护。

2. 写Apps Script代码

打开表格的「扩展程序」→「Apps Script」,清空默认代码,粘贴下面的代码:

// 修改这里的工作表名称和区域,比如你的表叫"待办清单",就改成"待办清单!I2:I50"
const TARGET_RANGE = "Sheet1!I2:I50";

// 恢复目标区域的复选框验证规则
function restoreCheckboxes() {
  const target = SpreadsheetApp.getActiveSpreadsheet().getRange(TARGET_RANGE);
  const checkboxRule = SpreadsheetApp.newDataValidation()
    .requireCheckbox()
    .build();
  target.setDataValidation(checkboxRule);
}

// 监控表格变化的触发函数
function onSheetChange(e) {
  const owner = SpreadsheetApp.getActiveSpreadsheet().getOwner().getEmail();
  const currentUser = Session.getActiveUser().getEmail();
  
  // 是表格所有者的话,啥操作都不管
  if (currentUser === owner) return;
  
  // 只处理会影响复选框的操作:格式修改、数据验证修改、行/列删除
  const allowedChanges = ["FORMAT", "VALIDATION", "REMOVE_ROW", "REMOVE_COLUMN"];
  if (!allowedChanges.includes(e.changeType)) return;
  
  // 检查变化的区域是不是和目标区域重叠
  const affectedRange = e.range;
  const targetRange = SpreadsheetApp.getActiveSpreadsheet().getRange(TARGET_RANGE);
  if (!isRangesOverlap(affectedRange, targetRange)) return;
  
  // 恢复复选框,并且弹提示
  restoreCheckboxes();
  SpreadsheetApp.getUi().alert("你不能修改这里的复选框设置,已自动恢复。");
}

// 辅助函数:判断两个区域是否重叠
function isRangesOverlap(r1, r2) {
  const r1Bounds = {
    top: r1.getRow(),
    bottom: r1.getLastRow(),
    left: r1.getColumn(),
    right: r1.getLastColumn()
  };
  const r2Bounds = {
    top: r2.getRow(),
    bottom: r2.getLastRow(),
    left: r2.getColumn(),
    right: r2.getLastColumn()
  };
  
  return !(r1Bounds.bottom < r2Bounds.top || r1Bounds.top > r2Bounds.bottom || 
           r1Bounds.right < r2Bounds.left || r1Bounds.left > r2Bounds.right);
}

3. 安装触发器

内置的onChange触发不够用,得手动装个可安装触发器:

  • 在Apps Script编辑器左侧点「触发器」(时钟图标)
  • 点「添加触发器」,按下面设置:
    • 运行函数:onSheetChange
    • 部署类型:头部部署
    • 事件源:从电子表格
    • 事件类型:更改
  • 保存后跟着提示授权脚本访问权限就行。

效果

  • 其他用户正常勾选/取消复选框没问题,但要是想删复选框(比如清数据验证、删单元格、粘贴覆盖),脚本会立刻恢复复选框,还会弹提示告诉他们不能这么做。
  • 你作为所有者,随便改删都不受限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:23:18