2017-04-24 2 views
2

Ich versuche, die gspread Python package zu verwenden, um CSV-Daten von der Befehlszeile in ein Google-Blatt zu importieren.Was ist der Parameter gspread import_csv file_id?

Using this guide, ich habe alles funktioniert, und war in der Lage zu lesen und zu Zellen schreiben.

Allerdings Aktualisieren von Zellen 1-by-1 ist zu langsam, so dass ich jetzt versuche, die import_csv() Methode zu verwenden. The docs say:

import_csv (file_id, Daten) Imports von Daten in die erste Seite der Tabelle.

Parameter: Daten - Eine CSV-Datenfolge.

file_id ist hier nicht beschrieben, und ich kann nicht herausfinden, was es sein sollte. Ein paar andere Methoden verwenden, auch ein file_id und für sie wird beschrieben als: - (. Aka-ID-Datei)

file_id eine Tabelle ID

Ich bin nicht sicher, wo ich Tabellenkalkulations ID finden, und Egal, was ich versuche, bekomme ich einen Berechtigungsfehler. Da ich in der Lage bin, update_cell(), wie oben beschrieben, zu verwenden, glaube ich, dass ich die Berechtigungen gut, aber die falsche file_id verwenden.

Hier ist Code vereinfacht:

import gspread 
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://spreadsheets.google.com/feeds'] 
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope) 
client = gspread.authorize(creds) 
sheet = client.open("SheetTitle").sheet1 

# This works fine, so I think permissions etc are all set up correctly 
sheet.update_cell(1, 1, 'Foo') 

# Now try importing CSV data from a string 
csv="""2016, 2017 
1,2 
3,4 
""" 

# Does not work 
client.import_csv(sheet, csv); 

# Using the spreadsheet_id in the URL as described here https://developers.google.com/sheets/api/guides/concepts#spreadsheet_id 
client.import_csv('11x...', csv); 

# Using the "#gid=0" value in the query string in the browser when looking at this sheet 
client.import_csv(0, csv); 

Hier ist der Fehler, den ich bekommen, unabhängig davon, welche der oben Ich versuche:

Traceback (most recent call last): 
    File "./simple.py", line 22, in <module> 
    client.import_csv(sheet, csv); 
    File "/Library/Python/2.7/site-packages/gspread/client.py", line 297, in import_csv 
    headers=headers 
    File "/Library/Python/2.7/site-packages/gspread/httpsession.py", line 82, in put 
    return self.request('PUT', url, params=params, data=data, **kwargs) 
    File "/Library/Python/2.7/site-packages/gspread/httpsession.py", line 69, in request 
    response.status_code, response.content)) 
gspread.exceptions.RequestError: (403, '403: {\n "error": {\n "errors": [\n {\n "domain": "global",\n "reason": "insufficientPermissions",\n "message": "Insufficient Permission"\n }\n ],\n "code": 403,\n "message": "Insufficient Permission"\n }\n}\n') 

Antwort

5

https://www.googleapis.com/auth/drive auf Ihre scope Variable hinzufügen und es wird funktionieren:

scope=[ 
    'https://spreadsheets.google.com/feeds', 
    'https://www.googleapis.com/auth/drive' 
] 

Der Grund, warum Sie das Google Drive im scop benötigen e ist, weil import_csv tatsächlich eine HTTP-Anfrage an den Google Drive API-Aufruf und nicht an die Google Tabellen-API sendet.

+0

Arbeiten direkt an den Eingang mit! Vielen Dank! Dies kombiniert mit dem '11x ...' Spreadsheet_id macht den Trick. Habe ich das irgendwo in der Dokumentation vermisst? –

+1

Es ist dokumentiert, aber für andere Methode: https://gspread.readthedocs.io/en/latest/#gspread.Client.create –

0

Kam darüber hinweg, während ich Probleme habe. Obwohl bereits vom Autor akzeptiert, lassen Sie mich meine 2 Cent teilen. Erstens: Ja, Sie müssen den richtigen Pfad in Ihrem Bereich haben. Aber zu klären, was ist die ID:

Von gspread API-Referenz: http://gspread.readthedocs.io/en/latest/

Das Modell Tabelle hat ein ID-Feld. Und das sollte in der Funktion import_csv (file_id, data) verwendet werden. Beachten Sie, dass es 3 verschiedene Modelle gibt: - Tabellenkalkulation - Arbeitsblatt - Zelle.

Aus Ihrem Beispielcode erhalten Sie tatsächlich das Arbeitsblattobjekt.

sheet = client.open("SheetTitle").sheet1

die auch eine ID hat, aber ich bin ziemlich sicher, dass dies nicht funktionieren wird.

Sie müssen das Tabellenkalkulationsobjekt abrufen und seine ID verwenden.

sheet = client.open("SheetTitle") client.import_csv(sheet.id, csv);

Sie können überprüfen, ob die ID der gleiche wie derjenige ist, den Sie durch Drucken es print(sheet.id)

Verwandte Themen