2016-08-24 55 views
1

我想在Python2.7中使用Gspread來檢索電子表格。我似乎能夠登錄,但每當我發出命令Gspread - 無法檢索電子表格

gc.openall() 

它只是返回一個空的列表。我已經給服務帳戶管理員訪問了所有內容,並且在我的Google控制檯中啓用了工作表API。任何人都可以指出我做錯了什麼?

下面是我的name-hash.json文件由谷歌返回,用於登錄:

{ 
    "type": "service_account", 
    "project_id": "name-id", 
    "private_key_id": "PRIVATE KEY ID", 
    "private_key": "-----BEGIN PRIVATE KEY----- 
    ... 
    \n-----END PRIVATE KEY-----\n", 
    "client_email": "[email protected]", 
    "client_id": "CLIENTID", 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token", 
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-279%40name-id.iam.gserviceaccount.com" 
} 

我的代碼如下:

import gspread 
from oauth2client.service_account import ServiceAccountCredentials 

def login(json_key): 
    scope = ['https://spreadsheets.google.com/feeds'] 
    credentials = ServiceAccountCredentials.from_json_keyfile_name(json_key, scope) 
    gc = gspread.authorize(credentials) 
    return gc 

gc = login('/Users/username/Downloads/name-hash.json') 
files = gc.openall() 
print(files) 
    [] 
+1

表單位於您的谷歌驅動器的根目錄?它必須用於擴展工作。我們用代碼重寫了我們的gspread,直接使用最新的v4 google api。我強烈推薦它。它有一個相當陡峭的學習曲線,但非常值得! – Sebastien

+0

我的猜測是,你錯過了分享電子表格本身的地址:[email protected] 如果你嘗試open_by_key與一個特定的電子表格,你會得到一個錯誤消息,如果是這種情況 – Sebastien

回答

1

我能想到的主要是2個問題,可能是在這裏打球。首先,gspread只能訪問位於谷歌驅動器根目錄的谷歌表格。爲了規避這種情況,我強烈建議移動到v4谷歌api python客戶端而不是gspread。

如果你有根谷歌張我的猜測是,你缺少的地址共享電子表格本身:[email protected]

爲了驗證這一點,我會建議用open_by_key替換openall並提供一個特定的Google工作表ID來幫助調試。

+0

你是對,問題是我必須與[email protected]分享表。謝謝! – user2694306

+0

我的榮幸:)不久前我與那個圖書館鬥爭過,我絕對與痛苦有關:) – Sebastien