如何保护Google Sheet:通过脚本禁止用户新增行和列
Google Sheet 限制高权限用户新增/删除行列解决方案
现有原生表格保护机制确实无法限制拥有编辑权限的用户修改行列数量,以下方案通过Google Apps Script触发器实现操作拦截、自动回滚+警告效果,完全匹配需求:
步骤1:打开脚本编辑器
- 打开目标Google Sheet,点击顶部菜单栏「扩展程序」>「Apps Script」,进入脚本编辑界面
- 删除编辑区内默认的空白代码内容
步骤2:粘贴功能代码
// 自定义配置项,根据你的实际需求修改 const CONFIG = { // 预设的表格最大允许行数 ALLOWED_ROWS: 100, // 预设的表格最大允许列数 ALLOWED_COLUMNS: 20, // 你的Google账号邮箱,仅该账号操作不会被拦截 OWNER_EMAIL: "your-email@gmail.com" } function onChange(e) { const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const operator = Session.getActiveUser().getEmail(); // 所有者操作直接放行 if (operator === CONFIG.OWNER_EMAIL) return; // 识别行列增删操作 const forbiddenActions = ["INSERT_ROW", "INSERT_COLUMN", "REMOVE_ROW", "REMOVE_COLUMN"]; if (forbiddenActions.includes(e.changeType)) { // 自动撤销用户的违规操作 SpreadsheetApp.getActiveSpreadsheet().undo(); // 弹出警告提示 SpreadsheetApp.getUi().alert("⚠️ 操作被禁止:当前表格已固定行列尺寸,非管理员无权新增、删除行或列,本次操作已撤销。"); return; } // 兜底校验:若行列数超出预设值直接裁剪 const currentRows = activeSheet.getMaxRows(); const currentColumns = activeSheet.getMaxColumns(); if (currentRows > CONFIG.ALLOWED_ROWS) { activeSheet.deleteRows(CONFIG.ALLOWED_ROWS + 1, currentRows - CONFIG.ALLOWED_ROWS); } if (currentColumns > CONFIG.ALLOWED_COLUMNS) { activeSheet.deleteColumns(CONFIG.ALLOWED_COLUMNS + 1, currentColumns - CONFIG.ALLOWED_COLUMNS); } }
步骤3:修改配置参数
- 把代码中
CONFIG块的ALLOWED_ROWS、ALLOWED_COLUMNS替换为你预先定义的表格行列尺寸 - 把
OWNER_EMAIL替换为你自己的Google账号邮箱
步骤4:配置生效触发器
- 点击脚本编辑器左侧菜单栏「触发器」(闹钟样式图标)
- 点击右下角「添加触发器」按钮,按以下参数配置:
- 选择要运行的函数:
onChange - 选择事件来源:
电子表格 - 选择事件类型:
更改 - 失败通知设置:可按需选择,建议设置为「立即通知我」
- 选择要运行的函数:
- 点击保存后按页面提示完成账号授权即可,Google弹出的未验证应用提示属于未公开脚本的通用提示,正常确认授权即可使用
补充说明
- 该方案无法隐藏界面上的新增行列按钮,但可以在用户触发违规操作后1-2秒内完成撤销+警告,不会修改原有表格内容
- 脚本仅拦截行列增删操作,不会影响用户在现有单元格范围内的正常编辑
- 后续需要调整表格尺寸时,直接使用你自己的账号操作即可不受限制,也可以先修改CONFIG内的行列数值后再操作
内容的提问来源于stack exchange,提问作者user11857424
相关产品推荐
相关产品推荐

