如何修改Google AppScript,排除前5行与Q-T列锁定Google Sheet
修改后的Google Apps脚本:锁定指定区域(第6行至最后数据行的A-P列)
以下是调整后的脚本,满足「仅锁定第6行至最后数据行的A-P列,排除前5行与Q-T列」的需求,同时保留原脚本「每次运行删除旧锁、指定用户可编辑锁定区域」的核心逻辑:
function installedOnOpen(e) { // 请设置允许编辑锁定区域的用户邮箱列表 const editors = ["abc@abc.com","xyz@xyz.com"]; // 请设置需要应用保护的工作表名称 const sheetNames = ["SO"]; const sheets = e.source.getSheets().filter(s => sheetNames.includes(s.getSheetName())); if (sheets.length == 0) return; sheets.forEach(s => { // 删除当前工作表所有已存在的范围保护 const existingProtections = s.getProtections(SpreadsheetApp.ProtectionType.RANGE); if (existingProtections.length > 0) { existingProtections.forEach(protection => protection.remove()); } const lastRow = s.getLastRow(); // 仅当最后数据行≥6时,创建指定范围的保护 if (lastRow >= 6) { // 锁定范围:第6行至最后数据行,A-P列(共16列) const protectedRange = s.getRange(6, 1, lastRow - 5, 16).protect(); // 移除所有默认编辑者 protectedRange.removeEditors(protectedRange.getEditors()); // 添加指定的授权编辑者 protectedRange.addEditors(editors); // 关闭域内用户编辑权限(如果开启的话) if (protectedRange.canDomainEdit()) { protectedRange.setDomainEdit(false); } } }); }
关键修改说明:
- 保护范围调整:将原脚本中锁定整个数据区域的逻辑,改为锁定
第6行至最后数据行的A-P列,通过getRange(6, 1, lastRow - 5, 16)实现:- 第一个参数
6:起始行(从第6行开始) - 第二个参数
1:起始列(A列) - 第三个参数
lastRow - 5:保护的总行数(从第6行到最后数据行的行数) - 第四个参数
16:保护的总列数(A到P列共16列)
- 第一个参数
- 新增范围有效性判断:添加
lastRow >= 6的条件,避免当工作表数据不足6行时创建无效的保护范围 - 注释本地化:将原脚本中的英文注释改为中文,方便后续维护
内容的提问来源于stack exchange,提问作者Essem
相关产品推荐
相关产品推荐

