修改Google Apps Script 逐行为Drive文件匹配分配共享权限
逐行Google Drive文件授权脚本修改方案
表格规则说明
你的电子表格列定义如下,每行对应一条独立授权规则:
- A列:Google Drive文件ID
- B列:待授权用户邮箱地址
- C列:共享权限角色,仅支持三类取值:
Viewer(查看者)、Commenter(评论者)、Editor(编辑者)
执行逻辑为:逐行读取数据,将该行B列指定的邮箱,按照C列设置的角色,授予A列ID对应Google Drive文件的访问权限。
原脚本存在两个核心问题:一是仅固定读取A2单元格的单个文件ID,会把所有邮箱都授权给这一个文件,无法逐行匹配;二是存在语法拼写错误,本身无法正常运行。
修改后完整代码
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu("Share") .addItem("Give Access", "shareFile") .addToUi(); } function shareFile() { const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); // 从第2行开始读取A-C列全量数据,默认第1行为表头 const authRules = sheet.getRange(2, 1, lastRow - 1, 3).getValues(); const ui = SpreadsheetApp.getUi(); let successCount = 0; const errorList = []; authRules.forEach((row, idx) => { const currentRowNum = idx + 2; const fileId = row[0]?.toString().trim(); const userEmail = row[1]?.toString().trim(); const authRole = row[2]?.toString().trim(); // 跳过内容为空的无效行 if (!fileId || !userEmail || !authRole) return; try { const targetFile = DriveApp.getFileById(fileId); switch (authRole) { case "Viewer": targetFile.addViewer(userEmail); break; case "Commenter": targetFile.addCommenter(userEmail); break; case "Editor": targetFile.addEditor(userEmail); break; default: errorList.push(`第${currentRowNum}行:权限角色填写错误,仅支持Viewer/Commenter/Editor三类取值`); return; } successCount++; } catch (err) { errorList.push(`第${currentRowNum}行:授权失败,原因:${err.message}`); } }); // 执行完成后弹窗反馈结果 let alertContent = `执行完成,共成功授权${successCount}条记录`; if (errorList.length > 0) { alertContent += `\n\n异常记录:\n${errorList.join("\n")}`; } ui.alert(alertContent); }
使用方法
- 打开目标Google表格,点击顶部「扩展程序」→「Apps脚本」进入脚本编辑器,删除原有全部代码,粘贴上面的修改后代码,点击保存。
- 首次运行需要根据提示授权脚本访问你的Google表格、Google Drive权限,授权完成后刷新表格页面,顶部会出现名为
Share的自定义菜单。 - 确认表格数据填写无误后,点击
Share菜单下的Give Access即可自动逐行执行授权。 - 执行完成后会弹窗提示成功数量,以及所有失败行的具体错误原因,可根据提示修正对应行内容后重新运行。
- 注意:运行脚本的账号必须拥有对应Google Drive文件的权限管理资格,否则会出现授权失败的报错。
内容的提问来源于stack exchange,提问作者Bohdan
相关产品推荐
相关产品推荐

