【问题标题】:How to make a a google sheets spreadsheet available to gspread如何使谷歌表格电子表格可用于 gspread
【发布时间】:2017-02-14 18:14:01
【问题描述】:

我正在阅读 gspread (http://gspread.readthedocs.io/en/latest/oauth2.html) 的文档,并且已经能够让介绍性代码块正常工作:

import gspread
gc = gspread.authorize(credentials)

但是当我运行以下脚本时:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project-******97.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open("rules_test_1.csv").sheet1

我明白了:

gspread.exceptions.SpreadsheetNotFound

我如何才能访问此工作表?

【问题讨论】:

  • 您能解释一下“我在 Google 云端硬盘中没有工作表”是什么意思吗? Sheets 是应用程序,Drive 是 Sheets 保存工作表的地方。如果您按照您发布的链接中的步骤操作,您最终将获得服务帐户的身份验证。确保您了解服务帐户不是您自己的帐户。
  • 我对这个问题做了一些修改..

标签: google-sheets google-drive-api google-oauth gspread


【解决方案1】:

好吧,你犯了一个常见的错误。如果您在 StackOverflow 中搜索“服务帐户 [google-drive-sdk]”,您会发现很多人都在问同样的问题。

基本上服务帐户不是您的 Google 帐户,这就是找不到您的文件的原因。 gspread 的作者应该在他们的示例代码中解释过这一点。你有两个选择:-

  1. 与服务帐户用户共享您的电子表格或其所在的文件夹。这是最简单的方法,因为您需要做的就是从 GDrive 进行共享,然后您现有的代码就可以工作了。缺点是保持共享文件可能很笨重。我的建议是创建一个名为“与我的服务帐户共享”的专用文件夹,并使所有文件成为该文件夹的子文件夹。请记住,文件可以有多个父级,因此您仍然可以保留文件夹结构。请参阅How do I search sub-folders and sub-sub-folders in Google Drive? 的答案,了解云端硬盘文件夹的工作原理。

  2. 将服务帐户身份验证替换为标准帐户身份验证。这需要对您的代码进行一些小的更改。结果将是您的应用直接与您的云端硬盘帐户对话,而没有服务帐户充当代理。因此,如果安全隐患是可以接受的,它会更加优雅。您将使用存储的刷新令牌。有关如何执行此操作的一些信息位于How do I authorise an app (web or installed) without user intervention? (canonical ?)

这两种方式都没有对错。这取决于您的具体要求。

【讨论】:

  • 谢谢你,这很有帮助。
  • 我有一个后续问题需要澄清。理想情况下,我想使用第二种方法,但由于理解并尝试编写 oauth2 auth 步骤而减慢了速度。我正在尝试构建一个可以与谷歌表格交互的应用程序。我认为stackoverflow.com/questions/19766912/… 的意思是,如果您完成这些步骤并获得一个长期存在的令牌,那么您的应用程序就可以在没有人工帮助的情况下使用它登录。这是正确的吗?
  • 是的,你知道了。所有示例都展示了如何针对多个用户自己的帐户编写身份验证代码。在您的情况下,您希望单个用户(您)针对单个帐户(您的),因此您链接到的步骤将绕过所有这些,并为您留下一个长期存在的令牌,您可以使用相同的方式您曾经使用过嵌入式用户名/密码。
  • 再次感谢您。阅读您的评论后,我遇到了github.com/nithinmurali/pygsheets,这看起来很有希望。我能够在大约 30 分钟内使其部分工作。它使用 sheet api v4。
  • 酷。 fwiw,我个人的偏好是避免使用 Google API 的库。这些 API 是格式良好的 REST/JSON API,并且很容易直接使用。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多