gspread "SpreadsheetNotFound" 在某些工作簿上

gspread "SpreadsheetNotFound" on certain workbooks

我有一个 google 驱动器文件夹,其中包含数百个工作簿。我想循环浏览列表并更新数据。由于某种原因,gspread 只能打开某些工作簿而不能打开其他工作簿。我最近才遇到这个问题。

这不是访问问题,因为所有内容都在同一个文件夹中。

当我 open_by_key(key) 时,我得到 raise SpreadsheetNotFound。但是当我拿起钥匙并将其粘贴到 URL 中时,sheet 打开。这意味着它不是关键。

这是怎么回事?我很惊讶其他人没有遇到这个错误。

我是否达到了我可以拥有的 Google sheet 数量的限制?我有两千左右

更新:我发现如果我进入工作簿并四处寻找,那么 sheet 就会被识别出来??!!这是什么意思?如果 sheet 最近未激活,它无法识别 sheet???

此外,如果我尝试使用 Google App Script SpreadsheetApp.openById,则可以识别密钥!所以 sheet 在那里,我只是无法用 gspread 打开它。我已经使用 Google 脚本在 gspread 识别之前先将内容写入 sheet。

我可以使用 pygsheets 打开 sheet 但是因为它是新的而且有很多错误,我不能使用它。看起来像 APIv4 问题?有些sheet无法用APIv3?

打开

更新:这是另一个观察结果。使用 APIv4 打开工作簿后,您将无法再使用 V3 打开它。

我的猜测是您可能达到了 "Queries per 100 seconds per user"Google Drive API 限制,即 1000 并且无法更改为更高的价值。

方案一:

您可以前往项目页面:
尝试申请更高的配额 1 - 仪表板
2 - 配额
3 - 单击“每个用户每 100 秒的查询数
后的铅笔 4 - 然后点击“申请更高配额
5 - 您最终会到达 https://support.google.com/code/contact/drive_quota,但如果您按照上述步骤操作,表单将包含 projectuser 详细信息。


方案二:

我的帐户上只有几个点差sheet时遇到了同样的问题,问题已解决:

1 - 打开 json 密钥文件 (projectname-ca997255dada.json)
2 - 找到 client_email 的值,即:

"client_email": "278348728734832-compute@developer.gserviceaccount.com",

3 - 与该电子邮件分享您的 sheet(s)

注意:您可以尝试只更改一个打不开的点差sheet,看看上面的方法是否解决了问题。

我已经 运行 反复研究这个问题。我发现的唯一一致的修复方法是 "re-share" 具有 api 用户的文件。它已经将 api 用户列为共享用户(因为它与其他所有用户都在同一个共享文件夹中),但是在 "re-sharing" 之后我可以毫无问题地连接 gspread。

基于此,我认为这实际上可能是一个权限问题(Google 在通过 APIv3 访问时未能为 API 用户注册正确的权限)。

这听起来像是您在 gspread 中遇到了限制。

即使您通过密钥打开电子表格,gspread 仍会首先使用 https://spreadsheets.google.com/feeds/spreadsheets/private/full 下载所有明确共享的工作表的提要,并检查您提供的密钥是否在其中。

问题是此供稿仅列出了 500 个文件。如果您的密钥不在这 500 个中,那么即使可以访问电子表格,您也会得到 SpreadsheetNotFound

我猜该提要是按最近使用的顺序排序的,这就解释了为什么编辑它会使 gspread 再次看到它。

相关问题是here