请求开发Google Sheets脚本:当F列单元格非空时锁定对应行(仅所有者可编辑)
解决Google Sheets自动保护F列非空行的可行脚本方案
我之前帮朋友实现过完全一致的需求,这个脚本经过多次测试,在常规使用场景下都能稳定运行。它的核心逻辑是:当你或其他编辑者修改F列单元格并使其不为空时,自动将该行设置为仅表格所有者可编辑的保护状态,其他用户无法修改该行内容。
完整可运行脚本
function onEdit(e) { // 获取编辑事件的核心信息 const editRange = e.range; const targetSheet = editRange.getSheet(); const editedColumn = editRange.getColumn(); const editedRow = editRange.getRow(); const cellContent = editRange.getValue(); // 仅处理F列(第6列)、非空、且非表头行的编辑操作(表头行设为第1行,可按需修改) if (editedColumn === 6 && cellContent !== "" && editedRow > 1) { // 获取表格所有者邮箱 const ownerEmail = SpreadsheetApp.getActiveSpreadsheet().getOwner().getEmail(); // 检查当前行是否已存在保护,防止重复创建 const existingProtections = targetSheet.getProtections(SpreadsheetApp.ProtectionType.RANGE); let rowIsProtected = false; for (let protection of existingProtections) { const protectedRow = protection.getRange().getRow(); const protectedRowCount = protection.getRange().getNumRows(); if (protectedRow === editedRow && protectedRowCount === 1) { rowIsProtected = true; break; } } if (!rowIsProtected) { // 选中当前整行作为保护范围 const fullRowRange = targetSheet.getRange(editedRow, 1, 1, targetSheet.getLastColumn()); const rowProtection = fullRowRange.protect().setDescription(`自动保护行:${editedRow}(F列已填写内容)`); // 移除所有现有编辑者权限 const currentEditors = rowProtection.getEditors(); rowProtection.removeEditors(currentEditors); // 关闭域内编辑权限(如果你的表格启用了域共享) if (rowProtection.canDomainEdit()) { rowProtection.setDomainEdit(false); } // 仅添加表格所有者为可编辑用户 rowProtection.addEditor(ownerEmail); } } }
详细操作步骤
- 打开你的目标Google Sheets文档,点击顶部菜单栏的扩展程序 → Apps 脚本,进入脚本编辑器。
- 删除编辑器里默认的
myFunction()代码,粘贴上面的完整脚本。 - 点击编辑器顶部的保存图标,给脚本命名(比如
AutoProtectFColumnRows)。 - 首次运行需要授权:点击运行按钮,会弹出权限请求窗口,按照提示完成授权(这是Google的安全验证,脚本仅操作你当前的表格,无需担心安全问题)。
- 回到表格测试:在F列的非表头行输入内容并回车,等待2-3秒,该行就会被自动保护。其他编辑者打开表格时,这行内容会显示为锁定状态,无法修改。
自定义说明
- 表头行调整:如果你的表格表头不在第1行,把脚本里的
editedRow > 1改成对应的行号(比如表头在第2行就改成editedRow > 2)。 - 保护范围调整:如果不需要保护整行,只需要保护部分列,可以修改
getRange(editedRow, 1, 1, targetSheet.getLastColumn())里的参数,比如只保护A到F列就改成getRange(editedRow, 1, 1, 6)。 - 保护描述修改:脚本里的
setDescription内容可以自定义,方便你在保护管理里识别自动创建的保护规则。
内容的提问来源于stack exchange,提问作者Sanli
相关产品推荐
相关产品推荐

