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

使用gspread 5.7.1转移服务账户复制的Google Sheet所有权失败求助

使用gspread转移Google Sheets所有权的正确方法

问题概述

需通过gspread完成流程:手动共享表格给服务账户→服务账户复制表格→将复制表格所有权转移给普通用户,以让用户能设置App Script可安装触发器(服务账户拥有的表格无法运行App Script)。此前步骤1-3可正常执行,但所有权转移步骤报错。

错误原因分析

  1. 缺少transfer_ownership=True参数:Google Drive API明确要求,为用户分配owner角色时必须启用该参数,否则会返回403权限错误。
  2. 错误调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:23:09