2017-10-08 7 views
0

Ich habe Probleme, mit Python und der Google API in Google Tabellen zu schreiben. Hier ist der Code:Python Google API schreibt in Google Sheet

import httplib2 
import os 

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

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

# If modifying these scopes, delete your previously saved credentials 
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json 
SCOPES = 'https://www.googleapis.com/auth/spreadsheets' 
#this scope allows reading and writing to the sheet 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'Google Sheets API Python Quickstart' 


def get_credentials(): 
"""Gets valid user credentials from storage. 

If nothing has been stored, or if the stored credentials are invalid, 
the OAuth2 flow is completed to obtain the new credentials. 

Returns: 
    Credentials, the obtained credential. 
""" 
    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-quickstart.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 
     if flags: 
      credentials = tools.run_flow(flow, store, flags) 
     else: # Needed only for compatibility with Python 2.6 
      credentials = tools.run(flow, store) 
     print('Storing credentials to ' + credential_path) 
    return credentials 

def main(): 
"""Shows basic usage of the Sheets API. 

Creates a Sheets API service object and prints the names and majors of 
students in a sample spreadsheet: 

https://docs.google.com/spreadsheets/d/\ 
    1ksrW3mUJvPJkmv1HZyWC9Ma1Fbe1cX0CDegSjW2yIAY 
""" 
    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 = '1ksrW3mUJvPJkmv1HZyWC9Ma1Fbe1cX0CDegSjW2yIAY' 
    #see also https://developers.google.com/sheets/api/guides/values 
    #https://developers.google.com/sheets/api/samples/writing 
    PUT https://sheets.googleapis.com/v4/spreadsheets/\ 
    spreadsheets/d/spreadsheetId/values/\ 
    sheet1!A1:D5?valueInputOption=USER_ENTERED 
     values = { 
     "range": "'Main'!A1:D5", 
     "majorDimension": "ROWS", 
     "values": [ 
     ["Item", "Cost", "Stocked", "Ship Date"], 
     ["Wheel", "$20.50", "4", "3/1/2016"], #new row 
     ["Door", "$15", "2", "3/15/2016"], 
     ["Engine", "$100", "1", "30/20/2016"], 
     ["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"] 
     ], 
    } 
    result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheet_id, range=range_name, 
    valueInputOption=value_input_option, body=body).execute() 


if __name__ == '__main__': 
    main() 

I quickstart.py haben Arbeits Abrufen von Daten aus meinem Blatt. https://developers.google.com/drive/v3/web/quickstart/python

Das Blatt ist klar.

Die Fehlermeldung lautet:

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheets/\ 
d/spreadsheetId/values/sheet1!A1:D5?valueInputOption=USER_ENTERED 
      ^

SyntaxError: invalid syntax 
+0

Ich verknüpfte die Dokumente in Ihrer letzten Frage. Ich kann jetzt nicht testen, aber es gibt kein 'PUT' in Python. Ich verstehe die Verwirrung hier nicht, weil der Rest Ihres Codes darauf hindeutet, dass Sie die Sprache gut beherrschen. – roganjosh

+0

Hat meine Antwort funktioniert? Würdest du mir bitte davon erzählen? Das ist auch nützlich für mich zu studieren. Wenn dies funktioniert, können andere Personen, die das gleiche Problem mit Ihnen haben, Ihre Frage auch als eine Frage festlegen, die gelöst werden kann. – Tanaike

Antwort

0

Wie wäre es main() dem folgenden Skript modifizieren?

Sie können die Detailinformationen von spreadsheets.values.update unter here sehen.

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) 

    spreadsheet_id = '1ksrW3mUJvPJkmv1HZyWC9Ma1Fbe1cX0CDegSjW2yIAY' 
    range_name = 'Main!A1:D5' 
    body = { 
     "majorDimension": "ROWS", 
     "values": [ 
      ["Item", "Cost", "Stocked", "Ship Date"], 
      ["Wheel", "$20.50", "4", "3/1/2016"], # new row 
      ["Door", "$15", "2", "3/15/2016"], 
      ["Engine", "$100", "1", "30/20/2016"], 
      ["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"] 
     ], 
    } 
    result = service.spreadsheets().values().update(
     spreadsheetId=spreadsheet_id, 
     range=range_name, 
     body=body, 
     valueInputOption='USER_ENTERED' 
    ).execute() 
    print(result)