You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAS新手求助:如何在Google Sheets中设置特定时段编辑权限?

实现Google Sheets分时段编辑权限控制与数据汇总

一、先配置工作表基础权限

先给4个指定工作表设置初始权限,确保每人只能编辑自己的工作表:

  • 右键目标工作表标签 → 选择「保护工作表和范围」
  • 在弹出面板中点击「设置权限」
  • 选择「仅限特定人员」,添加对应人员邮箱并授予「编辑」权限
  • 重复操作完成4个工作表的权限配置,同时确保汇总表仅你(文件所有者)拥有编辑权限,其他人仅可查看或不可访问

二、编写GAS脚本实现时段控制

打开Google Sheets,点击「扩展」→「Apps Script」进入脚本编辑器,替换默认代码为以下内容:

// 配置项:填写4个工作表名称和对应可编辑人员的邮箱
const EDITOR_CONFIG = {
  "销售报表": "sales@example.com",
  "运营数据": "ops@example.com",
  "财务记录": "finance@example.com",
  "人事统计": "hr@example.com"
};

// 允许编辑的时段:每周五(周日=0,周一=1...周五=5)9:00-18:00
const ALLOWED_WEEKDAY = 5;
const START_TIME = 9;
const END_TIME = 18;

// 判断当前时间是否在允许编辑的时段内
function isWithinAllowedWindow() {
  const now = new Date();
  const currentWeekday = now.getDay();
  const currentHour = now.getHours();
  
  // 校验是否是目标工作日,且当前小时在允许区间内(包含开始时间,不包含结束时间)
  return currentWeekday === ALLOWED_WEEKDAY && currentHour >= START_TIME && currentHour < END_TIME;
}

// 更新工作表权限状态
function toggleSheetPermissions() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const isAllowed = isWithinAllowedWindow();
  
  // 遍历每个需要控制的工作表
  for (const [sheetName, editorEmail] of Object.entries(EDITOR_CONFIG)) {
    const sheet = spreadsheet.getSheetByName(sheetName);
    if (!sheet) {
      console.log(`未找到工作表:${sheetName}`);
      continue;
    }
    
    // 获取或创建工作表保护
    let protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
    if (!protection) {
      protection = sheet.protect().setDescription(`自动权限控制:${sheetName}`);
    }
    
    // 获取所有者邮箱,确保保留所有者权限
    const owner = Session.getEffectiveUser();
    const currentEditors = protection.getEditors();
    
    // 移除所有非所有者的编辑者
    protection.removeEditors(currentEditors.filter(editor => editor.getEmail() !== owner.getEmail()));
    
    if (isAllowed) {
      // 允许时段:添加指定编辑者,开放整个工作表编辑权限
      protection.addEditor(editorEmail);
      protection.setUnprotectedRanges([sheet.getDataRange()]);
      console.log(`已开放【${sheetName}】给${editorEmail}编辑`);
    } else {
      // 非允许时段:锁定整个工作表,仅所有者可编辑
      protection.setUnprotectedRanges([]);
      console.log(`已锁定【${sheetName}】,仅所有者可编辑`);
    }
  }
}

三、配置定时触发器自动执行脚本

脚本需要定时运行来切换权限,设置步骤如下:

  1. 在脚本编辑器左侧点击时钟图标(「触发器」)
  2. 点击「添加触发器」按钮
  3. 配置触发器参数:
    • 选择要运行的函数:toggleSheetPermissions
    • 选择事件源:「时间驱动」
    • 选择触发器类型:「小时计时器」→「每小时运行一次」(确保时段切换时及时生效)
    • (可选)若要更精准,可设置两个独立触发器:一个在每周五9:00运行,另一个在每周五18:00运行

四、汇总表数据配置

汇总表直接引用其他4个工作表的数据即可,推荐使用QUERY函数合并数据:
在汇总表的A1单元格输入:

=QUERY({工作表1!A:Z;工作表2!A:Z;工作表3!A:Z;工作表4!A:Z}, "select * where Col1 is not null", 1)
  • 替换工作表1等为实际工作表名称
  • 该函数会自动合并4个工作表的非空行,第一行为表头

注意事项

  • 确保你是Google Sheets文件的所有者,脚本需要所有者权限才能修改工作表保护设置
  • 测试时可手动运行toggleSheetPermissions函数,查看控制台日志(脚本编辑器→查看→日志)确认权限是否正确切换
  • 若需调整允许时段,修改ALLOWED_WEEKDAY、START_TIME、END_TIME三个常量即可
  • 工作表名称必须与EDITOR_CONFIG中的名称完全一致,否则脚本无法识别

内容的提问来源于stack exchange,提问作者Shamil Aliev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:00:16