2


Ich versuche, aus einer persönlichen Tabelle mit der Google API (v4) für Tabellen zu lesen.
Ich habe den Code aus dem Beispiel kopiert, das google bereitstellt, während ich die Tabellenkalkulations-ID, den Bereichsnamen und den Bereich ändere.
Egal was ich mache (mache die Tabelle öffentlich) Ich bekomme einen HttpError: 404 Angeforderte Entität wurde nicht gefunden.
Zugriff auf eine Tabelle in Google Tabellen mit python3

Mein Code:

import httplib2 
import os 

from apiclient import discovery 
from oauth2client import client 
from oauth2client import tools 
from oauth2client.file import Storage 

SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly', 
     'https://www.googleapis.com/auth/spreadsheets', 
     'https://www.googleapis.com/auth/drive', 
     'https://www.googleapis.com/auth/drive.readonly'] 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'python' 

def get_credentials(): 
    home_dir = os.path.expanduser('~') 
    credential_dir = os.path.join(home_dir, '.credentials') 
    if not os.path.exists(credential_dir): 
     os.makedirs(credential_dir) 
    credential_path = os.path.join(credential_dir, 
      'sheets.googleapis.com-python.json') 

    store = Storage(credential_path) 
    credentials = store.get() 
    if not credentials or credentials.invalid: 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
     flow.user_agent = APPLICATION_NAME 
     credentials = tools.run_flow(flow, store, None) 
    return credentials 

def main(): 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?' 
      'version=v4') 
    service = discovery.build('sheets', 'v4', http = http, 
      discoveryServiceUrl = discoveryUrl) 
    spreadsheetId = 'ID' 
    rangeName = 'RANGE' 
    result = service.spreadsheets().values().get(
      spreadsheetId = spreadsheetId, range = rangeName).execute() 
+0

Werfen Sie einen Blick auf die api doc für das Erhalten der Tabelle hier: https://developers.google.com/resources/ api-libraries/documentation/sheets/v4/python/latest/sheets_v4.spreadsheets.html # get –

+0

Ich fürchte, ich war schon dort ... keine Hilfe, warum das Blatt nicht verfügbar ist –

+0

Haben Sie die ID dreifach überprüft ? auf sheets.google.com ist es nach dem/d/in der URL –

Antwort

1

Sie haben eine Menge von zusätzlichem Code, wahrscheinlich mehr Bereiche einschließlich als Sie benötigen. Hier ist ein kürzer Sie ausleihen können, dass Deponien aus nur den Inhalt eines Blatt, nur den RO-Rahmen benötigen:

from pprint import pprint 

from apiclient import discovery 
from httplib2 import Http 
from oauth2client import file, client, tools 

SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly' 
store = file.Storage('storage.json') 
creds = store.get() 
if not creds or creds.invalid: 
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) 
    creds = tools.run_flow(flow, store) 
SHEETS = discovery.build('sheets', 'v4', http=creds.authorize(Http())) 

SHEET_ID = 'YOUR_SHEET_DRIVE_FILE_ID' 
rows = SHEETS.spreadsheets().values().get(spreadsheetId=SHEET_ID, 
    range='Sheet1', fields='values').execute().get('values', []) 
pprint(rows) 

Bevor Sie es laufen (es wird auf beide Python ausführen 2 & 3 ohne Änderungen), stellen Sie sicher, Sie haben ...

  • Ersetzt YOUR_SHEET_DRIVE_FILE_ID mit Ihrem tatsächlichen Blatt ID
  • die Blätter API in Ihrem Projekt bei console.developers.google.com Aktiviert
  • in die OAuth2 Prompt Entschied sich, wenn Sie Ihre cmd-line-Skript das erste Mal
  • geändert laufen die range Variable auf den genauen Bereich, den Sie in A1 notation extrahieren möchten darauf hinweisen - habe ich das gesamte Standardblatt (genannt Sheet1)

Wenn Sie noch irgendeine Art von Störung zu erhalten, fügen Sie es als Update veröffentlichen zum O P oben. FWIW, ich habe mehrere Videos gemacht, die andere Anwendungen der Sheets API zeigen, falls zusätzliche Code-Beispiele helfen.

(Alle neueren Videos Teil this video series sein wird, die auf verschiedene G Suite APIs konzentriert.)

+1

Wesley Chun !!! top Python-Entwickler, den ich kenne! : D: D – noogui

+1

Nach dem Zugriff auf eine andere Datei in meinem Google Drive funktionierte es. Weiß nicht warum ... Danke wescpy für Ihre Hilfe! –

+0

@wescpy Ich hatte einen Fehler, wenn "creds = store.get()" ausgeführt wurde. "/Users/../anaconda2/lib/python2.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Kann nicht auf storage.json zugreifen: Keine solche Datei oder Verzeichnis warnings.warn (_MISSING_FILE_MESSAGE.format (Dateiname)) ". Irgendeine Ahnung? – Jia

0

sehen ziemlich viel Standardcode In der Frage und der vorherigen Antwort für eine scheinbar einfache Aufgabe möchte ich mein Rezept dafür mitteilen.

Um auf das Google Tabellen-API über Python-Skript zugreifen zu können, habe ich mich im Google API-Dashboard registriert und Unterschriebene Anmeldeinformationen ausgewählt, die unter Authorizing pygsheets beschrieben sind.

Ich habe eine JSON-Datei mit Anmeldeinformationen von Google API heruntergeladen und im selben Verzeichnis wie mein Python-Skript gespeichert.Die JSON-Datei enthält eine spezielle E-Mail-Adresse, die

[email protected]

Für das Skript für den Zugriff auf Blatt meines Google in die Lage sein wie

aussieht Ich habe mein Blatt geteilt (verwendet, um die Standardeinstellung ‚Kann bearbeiten‘) mit der E-Mail-Adresse in der JSON-Datei enthalten.

Dann wird der Python-Code der Google Blätter zugreifen könnte wie folgt aussehen:

import pygsheets 
import pandas as pd 

gc = pygsheets.authorize(service_file='service_creds.json') 
sh = gc.open('Export Data') 
wks_export = sh.worksheet(property='title', value='Export by Month') 

# Google worksheet as Pandas dataframe. 
export_df = wks_export.get_as_df() 

# Here can be done some local operations on the dataframe. 

# Updating the worksheet with the values from the modified dataframe. 
wks_export.set_dataframe(export_df, start='A1', fit=True) 
+1

Sieht aus wie eine nette neue Bibliothek (PygSheets). Danke! –

Verwandte Themen