You need to enable JavaScript to run this app. 已授权服务账号时gspread读Google Sheets报SpreadsheetNotFound如何调试
优惠活动
大模型
产品
解决方案
定价
更多

已授权服务账号时gspread读Google Sheets报SpreadsheetNotFound如何调试

gspread 读取Google Sheets 报 SpreadsheetNotFound 调试方案

最直接的触发原因

你代码里调用client.open()时传入了完整的表格共享链接,完全不符合方法的入参规则。
client.open()的底层逻辑是:调用Google Drive接口拉取当前授权的服务账号能访问的全部表格列表,按表格的纯文本标题做匹配检索。你传一整串链接进去,没有任何表格的标题和这串内容匹配,就会遍历完所有列表都找不到目标,最终抛出SpreadsheetNotFound异常。

正确的表格访问写法

针对已经获取到链接的目标表格,不需要靠名称匹配检索,直接用表格ID精准打开,效率更高也不会因为重名出错:

  • 从现有URL中提取表格ID:也就是链接里/d/和/edit片段之间的字符串,以你提供的链接为例,提取出的ID为1Eo8QGzdwaiF7m59Tro1oN8ewfktDBI0KLfF3UL87lTk
  • 把原来传完整URL的代码段替换为:
    sheet = client.open_by_key("1Eo8QGzdwaiF7m59Tro1oN8ewfktDBI0KLfF3UL87lTk")
    

如果一定要用名称匹配的方式打开表格,只需要向client.open()传入表格的纯标题文本,不要拼接链接内容。比如你的表格标题是「2024年业务数据」,就写client.open("2024年业务数据")即可。

替换代码后仍报错的排查方向

  • 确认服务账号协作者权限:服务账号不属于普通个人Google账号,哪怕你把表格设置为“任何人带链接可查看”的公开权限,服务账号依然无法绕过协作者校验直接访问。必须把凭证JSON文件里client_email字段对应的服务账号邮箱,单独添加为表格的协作者,授予查看或编辑权限。
  • 检查云项目API开关:确认对应的Google云项目已经开启「Google Drive API」和「Google Sheets API」,未开启API的情况下,接口会返回空的表格列表,哪怕权限配置正确也会检索失败。
  • 核对权限scope配置:你当前使用的两个scope可以兼容旧版gspread的功能,如果使用最新版本的gspread,可替换为更规范的权限范围,避免权限校验异常:
    scope = [
        "https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/drive"
    ]
    

权限配置参考示意

权限设置截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 11:06:04