如何设置规则防止共享考勤表中已勾选的复选框被取消勾选?
实现共享工作表复选框勾选后无法取消的功能
核心思路
通过工作表内置脚本的onEdit触发器监听单元格编辑事件,当检测到复选框从「未勾选」变为「勾选」状态时,立即锁定该单元格的编辑权限,彻底阻止用户取消勾选操作。
完整脚本代码
function onEdit(e) { const range = e.range; const sheet = range.getSheet(); // 替换为你的考勤表名称,限定脚本仅在目标工作表生效 if (sheet.getName() !== "考勤表") return; // 验证当前单元格是复选框类型 const dataValidation = range.getDataValidation(); if (!dataValidation || dataValidation.getType() !== SpreadsheetApp.DataValidation.Type.CHECKBOX) return; // 仅处理「未勾选→勾选」的操作 if (e.oldValue === "FALSE" && e.value === "TRUE") { // 创建单元格保护规则 const protection = range.protect().setDescription("已打卡锁定"); // 移除所有普通编辑者的权限(仅所有者可编辑,可按需调整) const editors = protection.getEditors(); protection.removeEditors(editors); // (可选)添加管理员邮箱,允许特定人员修改锁定的单元格 // protection.addEditors(["admin@yourdomain.com"]); } }
部署与测试步骤
- 打开你的共享考勤工作表,点击顶部菜单栏「扩展程序」→「Apps 脚本」
- 删除编辑器中的默认代码,粘贴上述脚本,修改
sheet.getName() !== "考勤表"中的表名为你的实际工作表名称 - 点击脚本编辑器顶部的「保存」按钮,给项目命名(比如「考勤锁定工具」)
- 关闭脚本编辑器,回到工作表:勾选任意复选框,尝试取消勾选时会发现单元格已被锁定,无法修改
注意事项
- 首次使用脚本时,可能需要手动运行一次
onEdit函数,按提示完成授权(仅需一次) - 管理员可通过「数据」→「保护工作表和范围」管理已锁定的单元格,处理异常考勤情况
- 如果需要对已存在的勾选状态复选框批量设置保护,可新增一个一次性执行的批量处理函数
内容的提问来源于stack exchange,提问作者Wilderness Adventure
相关产品推荐
相关产品推荐

