如何制作一个google工作表电子表格gspread

时间:2017-02-14 18:14:02

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

enter image description here

我正在通过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

如何才能访问此表?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  3. 无论是对还是错。这取决于您的具体要求。