使用gspread 5.7.1转移服务账户复制的Google Sheet所有权失败求助
使用gspread转移Google Sheets所有权的正确方法
问题概述
需通过gspread完成流程:手动共享表格给服务账户→服务账户复制表格→将复制表格所有权转移给普通用户,以让用户能设置App Script可安装触发器(服务账户拥有的表格无法运行App Script)。此前步骤1-3可正常执行,但所有权转移步骤报错。
错误原因分析
- 缺少
transfer_ownership=True参数:Google Drive API明确要求,为用户分配owner角色时必须启用该参数,否则会返回403权限错误。 - 错误调用
transfer_ownership()方法:无需先添加writer权限再调用该方法,直接在分配owner角色时设置转移参数即可完成所有权交接,额外操作会触发“无法移除文件所有者”的错误。
正确解决方案
复制表格后,直接通过以下任一代码完成所有权转移:
方法1:使用gc.insert_permission
gc = gspread.service_account("insert_path_to_credentials.json") KEY = "insert-spreadsheet-key-from-step1" ss_copy = gc.copy(file_id=KEY) # 转移所有权给目标用户 gc.insert_permission( file_id=ss_copy.id, value="emailaddress@gmail.com", perm_type="user", role="owner", transfer_ownership=True )
方法2:使用ss_copy.share
gc = gspread.service_account("insert_path_to_credentials.json") KEY = "insert-spreadsheet-key-from-step1" ss_copy = gc.copy(file_id=KEY) # 转移所有权并发送通知 ss_copy.share( email_address="emailaddress@gmail.com", perm_type="user", role="owner", notify=True, transfer_ownership=True )
关键说明
- 执行后服务账户将不再是表格所有者,但会自动保留编辑权限(可按需调整)。
- 所有权转移仅能执行一次,目标用户必须是Google Workspace或普通个人账户,不能是其他服务账户。
内容的提问来源于stack exchange,提问作者Braden Anderson
相关产品推荐
相关产品推荐

