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

如何用Google Script批量修改多文件多用户权限并修复脚本

Google Sheets 权限管理脚本修复方案

需求说明

主表格包含以下列信息:

  • 其他谷歌表格ID
  • 目标邮箱
  • 需赋予的权限角色(Viewer/Commenter/Editor)
  • 权限移除复选框(勾选触发移除操作)
  • 操作日期记录列(右侧新增)

2022年编写的授权脚本已失效,需修复实现权限赋予/移除双功能,并自动记录操作日期。

旧脚本代码

function shareFile() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const fileId = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues().flat();
  const emailAndPermissions = sheet.getRange(2, 2, sheet.getLastRow() - 1, 2).getValues();

  for (i = 0; i < fileId.length; i++) {

    var fileToShare = DriveApp.getFileById(fileId[i]);

    if (emailAndPermissions[i][1] === "Viewer") {
      fileToShare.addViewer(emailAndPermissions[i][0]);
    }
    else if (emailAndPermissions[i][1] === "Commenter") {
      fileToShare.addCommenter(emailAndPermissions[i][0]);
    }
    else if (emailAndPermissions[i][1] === "Editor") {
      fileToShare.addEditor(emailAndPermissions[i][0]);
    }

  }
}

修复后的脚本代码

function manageFilePermissions() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, 5); // 覆盖A-E列:ID、邮箱、权限、复选框、操作日期
  const data = dataRange.getValues();
  const now = new Date();

  for (let i = 0; i < data.length; i++) {
    const [fileId, email, role, removeCheckbox, _] = data[i];
    
    // 跳过空行
    if (!fileId || !email || !role) continue;

    try {
      const file = DriveApp.getFileById(fileId);
      const rowIndex = i + 2; // 对应表格行号(从第2行开始)

      if (removeCheckbox === true) {
        // 移除权限:先清空所有角色再重置复选框
        file.removeEditor(email);
        file.removeCommenter(email);
        file.removeViewer(email);
        sheet.getRange(rowIndex, 4).setValue(false);
      } else {
        // 赋予对应权限
        switch(role) {
          case "Viewer":
            file.addViewer(email);
            break;
          case "Commenter":
            file.addCommenter(email);
            break;
          case "Editor":
            file.addEditor(email);
            break;
          default:
            throw new Error(`无效权限角色:${role}`);
        }
      }

      // 记录操作日期
      sheet.getRange(rowIndex, 5).setValue(now);

    } catch (error) {
      console.error(`处理行${i+2}时出错:${error.message}`);
      // 可选:在F列添加错误提示
      // sheet.getRange(rowIndex, 6).setValue(`错误:${error.message}`);
    }
  }
}

使用说明

  1. 表格列配置:确保列顺序严格对应:

    • A列:文件ID
    • B列:目标邮箱
    • C列:权限角色(必须是Viewer/Commenter/Editor)
    • D列:复选框(用于触发权限移除)
    • E列:操作日期(脚本自动填充)
  2. 脚本部署:

    • 打开主表格,点击「扩展程序」→「Apps脚本」
    • 替换原有代码为修复后的脚本,保存并命名
    • 返回表格,添加绘图/按钮并绑定manageFilePermissions函数
  3. 权限授权:首次运行脚本时,按提示完成谷歌账号授权(需信任自定义脚本)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:50