gspread“SpreadsheetNotFound”在某些工作簿上

时间:2017-02-22 04:40:15

标签: python google-sheets gspread

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

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

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

这里发生了什么?我很惊讶其他人没有遇到这个错误。

我是否达到了我可以拥有的Google表格数量限制?我有大约2千。

更新:我发现如果我进入工作簿并四处寻找,那么表单就被识别了!! !!这是什么意思?如果工作表最近没有活动,它无法识别工作表???

此外,如果我尝试使用Google App脚本SpreadsheetApp.openById,则会识别该密钥!因此,工作表在那里,我无法用gspread打开它。在gspread识别出来之前,我先使用Google脚本在工作表上写了一些内容。

我可以使用pygsheets打开工作表,但由于它是新的并且如此错误,我无法使用它。它看起来像APIv4问题?某些工作表无法使用APIv3打开?

更新:这是另一个观察。使用API​​v4打开工作簿后,您无法再使用V3打开它。

3 个答案:

答案 0 :(得分:3)

我的猜测是,您可能达到每个用户每100秒查询Google Drive API的限制“,即1000,无法更改为更高的值

解决方案1:

您可以通过转到项目页面来尝试申请更高的配额:
1 - DASHBOARD
2 - QUOTAS
3 - 点击“ 每100秒每100秒查询 ”后的铅笔 4 - 然后点击“ 申请更高的配额 ” 5 - 您最终会在https://support.google.com/code/contact/drive_quota上结束,但如果您按照上述步骤操作,表单中的projectuser详细信息已经填好。

解决方案2:

我的帐户中只有几个电子表格存在同样的问题,问题解决了:

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

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

3 - 使用该电子邮件分享您的表格

注意:您可以尝试更改一个无法打开的电子表格,并检查以上是否解决了问题。

答案 1 :(得分:2)

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

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

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

我猜这个Feed是按照最近使用的顺序排序的,这解释了为什么编辑它会让gspread再次看到它。

相关问题是here

答案 2 :(得分:1)

我反复遇到这个问题。我发现的唯一一致的解决方案是重新分享" api用户的文件。它已经将api用户列为共享(因为它与其他所有用户在同一个共享文件夹中),但在"重新共享"之后我可以用gspread连接没问题。

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