如何阻止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
相关产品推荐
相关产品推荐

