如何通过Golang客户端库/REST API为Google Sheet添加协作者并设为公开只读?
解决Google Sheets添加协作者与设置公开只读的问题
你找不到Sheets API的权限管理接口是因为表格的协作权限属于Google Drive API的管理范畴,Sheets API仅负责表格内容的读写和格式操作,文件级别的权限控制需要使用Drive API来实现。
一、添加指定用户为编辑者
1. 引入Drive API依赖
确保项目中引入Drive v3的Go客户端库:
go get google.golang.org/api/drive/v3
2. 初始化Drive服务
可复用Sheets服务的上下文和认证信息:
import ( "context" "log" "google.golang.org/api/drive/v3" "google.golang.org/api/sheets/v4" ) // 假设已创建Sheets服务srv并拿到spreadsheet对象 driveSrv, err := drive.NewService(ctx) if err != nil { log.Printf("Unable to retrieve Drive client: %v", err) return nil, err }
3. 添加协作者的代码实现
创建权限对象,指定用户邮箱和角色,调用Drive API的权限创建接口:
// 添加单个编辑者 permission := &drive.Permission{ EmailAddress: "person@gmail.com", Role: "editor", // 可选值:owner, writer, reader, commenter等 Type: "user", } // 可选:设置是否发送通知邮件,默认true req := driveSrv.Permissions.Create(spreadsheet.SpreadsheetId, permission) req.SendNotificationEmail(false) _, err = req.Do() if err != nil { log.Printf("Failed to add collaborator: %v", err) return nil, err }
二、设置表格为公开只读
通过创建anyone类型的权限,将表格设置为全网公开只读:
publicPermission := &drive.Permission{ Role: "reader", Type: "anyone", } _, err = driveSrv.Permissions.Create(spreadsheet.SpreadsheetId, publicPermission).Do() if err != nil { log.Printf("Failed to set public read-only: %v", err) return nil, err }
注意事项
- 确保你的Google Cloud项目已启用Google Drive API,并在OAuth2认证中添加了
https://www.googleapis.com/auth/drive或细分权限(如https://www.googleapis.com/auth/drive.file仅操作创建的文件) - 权限角色说明:
reader:只读访问writer:可编辑内容(即编辑者)commenter:仅可添加评论owner:文件所有者(需谨慎分配)
内容的提问来源于stack exchange,提问作者Walker O'Brien
相关产品推荐
相关产品推荐

