【问题标题】:gspread "SpreadsheetNotFound" on certain workbooks在某些工作簿上 gspread “SpreadsheetNotFound”
【发布时间】:2017-02-22 04:40:14
【问题描述】:

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

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

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

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

我是否已达到我可以拥有的 Google 表格数量的限制?我有大约 2000 个。

更新:我发现如果我进入工作簿并四处寻找,那么工作表就会被识别??!!这是什么意思?如果工作表最近未处于活动状态,它不会识别工作表???

另外,如果我尝试使用 Google App Script SpreadsheetApp.openById,则可以识别密钥!所以工作表在那里,我无法用gspread 打开它。在gspread 识别之前,我先使用 Google 脚本在工作表上写了一些东西。

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

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

【问题讨论】:

  • 文件夹中的个别工作簿可能未与 google 服务帐户客户端共享?
  • @Haleemur Ali。不与客户端共享整个文件夹
  • 只是一个想法:你试过open_by_url而不是open_by_key吗?
  • 您也可以尝试在google-api-python-client 上重现该问题(它似乎是推荐的v4 api 客户端而不是gspread)。
  • 好建议,但open_by_url 也给了我同样的错误。我将浏览器的确切网址粘贴到代码中。

标签: python google-sheets gspread


【解决方案1】:

这听起来你在gspread 中遇到了限制。

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

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

我猜这个提要是按最近使用的排序的,这就解释了为什么编辑它会使其再次对gspread 可见。

相关问题是here

【讨论】:

    【解决方案2】:

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

    解决方案 1:

    您可以前往项目页面尝试申请更高的配额:
    1 - 仪表板
    2 - 配额
    3 - 在“每个用户每 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 - 与该电子邮件共享您的工作表

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

    【讨论】:

    • 我认为这是不对的,因为我会在早上醒来的第一件事就是尝试运行一个简单的代码来打开一张纸。基本上是当天的第一个请求......但仍然无法正常工作。
    • 您是否考虑过防火墙或 AV 干扰?
    • 是的,这不是问题。
    • 我认为甚至可能达到 API 速率(至少使用 gspread)。 API 太慢了,您可以在 0.1 秒内打开工作表。 dorian 的回答对我来说是最有意义的,特别是考虑到手动打开文件突然导致它被发现。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多