Luca Francis

Google Sheets mit Python

Knowledge Base

Um Daten, die in einem Google Sheets Dokument verwaltet werden, dynamisch abrufen oder ändern zu können, bietet es sich an die von Google bereitgestellten Dienste zu nutzen und eine Schnittstelle einzubauen. Im Folgenden wird erklärt, wie eine solche API aufgebaut werden kann, um diese dann mit Python anzusprechen.

  1. Öffne die Google API Konsole: console.developers.google.com
  2. Erstelle ein neues Projekt
  3. Wähle API aktivieren und aktiviere die Google Sheets API sowie die Google Drive API
  4. Erstelle Anmeldedaten mit den Parameter Webserver und Zugriff auf Anwendungsdaten
  5. Bennene den Service Account und gewähre ihm die Project Rolle des Bearbeiter
  6. Lade die JSON Datei mit den Anmeldedaten herunter, um diese im Code nutzen zu können.

Unter Dashboard können nun verschiedene Metriken der API überwacht werden.

Wichtig ist es nun, dem neu erstellten Service Account Zugriff auf das zu bearbeitende Dokument zu gewähren. Dazu findet sich in der heruntergeladenen JSON Datei eine Emailadresse ‘client_email’, welcher mithilfe des Teilen Knopf im Google Sheets Dokument Bearbeitungsrechte zugewiesen werden müssen.

Die API ist bereit. Um diese nun mit Python anzuprechen, benötigt man die Packages gspread und oauth2client

pip install gspread oauth2client

Um nun z.B. alle Daten eines Sheet auszugeben, ist nicht viel Code notwendig.

  1. Die packages müssen importiert werden:

    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    
  2. Die Anmeldedaten müssen ausgelesen werden (‘client_secret.json’ ist hier die heruntergeladene JSON Datei):

    scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
    creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
    client = gspread.authorize(creds)
    
  3. Zuletzt kann nun das sheet geöffnet und die Daten ausgelesen werden:

    sheet = client.open("NAME_DES_DOKUMENT").worksheet("NAME_DES_WORKSHEET")
    list_of_hashes = sheet.get_all_records()
    print(list_of_hashes)
    

11 Jun 2019 #Logging #Python #Google Sheets #Reporting #API