如何使 google 张电子表格可用于 gspread

How to make a a google sheets spreadsheet available to gspread

我正在阅读 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

我怎样才能访问这个 sheet?

好的,您犯了一个常见错误。如果您在 Whosebug 中搜索 "service account [google-drive-sdk]",您会发现很多人问同样的问题。

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

  1. 与服务帐户用户共享您的电子表格或其所在的文件夹。这是最简单的方法,因为您需要做的就是从 GDrive 进行共享,然后您现有的代码就可以工作了。缺点是继续共享文件可能很笨拙。我的建议是创建一个名为 say "shared with my service account" 的专用文件夹,并将所有文件设为该文件夹的子文件夹。请记住,文件可以有多个父级,因此您仍然可以保留文件夹结构。请参阅 的答案,以复习云端硬盘文件夹的工作原理。

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

两种方式都不是对的或错的。这取决于您的具体要求。