it-swarm.com.de

Wie kann ich mit Python auf Google Sheets-Arbeitsblätter zugreifen (lesen, schreiben)?

Ich frage mich, ob Sie mich auf ein Beispiel für das Lesen/Schreiben in/aus einer Google-Doc Tabelle mit Python verweisen können. 

Ich habe mir Google Docs API hier angesehen/- https://developers.google.com/google-apps/spreadsheets/ , aber nicht sicher, ob ich auf den richtigen Link stecke. Auch ein Beispiel wird sehr hilfreich sein.

Was ich versuche zu tun, ist, Kalkulationstabellen auf der Grundlage der verschiedenen Spalten eher einer SQL-Abfrage abzufragen, dann einige Downstream-Parsing mit den Daten durchzuführen und sie in eine andere Kalkulationstabelle oder ein anderes Dokument in Google Docs einzufügen.

Beste, - Abhi

66
Abhi

Schauen Sie sich GitHub - gspread an. 

Ich fand es sehr einfach zu bedienen und da kann man eine ganze Kolumne abrufen 

first_col = worksheet.col_values(1)

und eine ganze Reihe von 

second_row = worksheet.row_values(2)

sie können mehr oder weniger ein paar einfache Elemente auswählen, wobei ... einfach ... = ... ist.

53
Arthur G

Ich weiß, dass dieser Thread jetzt alt ist, aber hier finden Sie eine anständige Dokumentation zu Google Docs API. Es war lächerlich schwer zu finden, aber nützlich, vielleicht hilft es Ihnen vielleicht ein bisschen. http://pythonhosted.org/gdata/docs/api.html .

Ich habe gspread kürzlich für ein Projekt verwendet, um Mitarbeiterzeitdaten darzustellen. Ich weiß nicht, wie viel es Ihnen helfen könnte, aber hier ist ein Link zum Code: https://github.com/lightcastle/employee-timecards

Gspread machte es mir ziemlich leicht. Ich konnte auch Logik hinzufügen, um nach verschiedenen Bedingungen zu suchen, um die Ergebnisse des Monats und des Jahres zu erstellen. Aber ich habe gerade die gesamte Dang-Tabelle importiert und von dort aus analysiert, daher bin ich nicht zu 100% sicher, dass es genau das ist, wonach Sie suchen. Viel Glück.

28
Josh Brown

Schauen Sie sich gspread port für api v4 - pygsheets an. Es sollte sehr einfach zu verwenden sein, anstatt den Google-Client.

Beispielbeispiel

import pygsheets

gc = pygsheets.authorize()

# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1

# Update a cell with value (just to let him know values is updated ;) )
wks.update_cell('A1', "Hey yank this numpy array")

# update the sheet with array
wks.update_cells('A2', my_nparray.to_list())

# share the sheet with your friend
sh.share("[email protected]")

Siehe die Dokumente hier .

Autor hier. 

7
nithin

Die neuesten Google-API-Dokumente dokumentieren, wie mit Python in eine Kalkulationstabelle geschrieben wird, aber es ist ein wenig schwierig, dorthin zu navigieren. Hier ist ein Link zu einem Beispiel, wie angehängt wird.

Der folgende Code ist mein erster erfolgreicher Versuch, an eine Google-Tabelle anzuhängen.

import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

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'
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,
                                   'mail_to_g_app.json')

    store = oauth2client.file.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 add_todo():
    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 = 'PUT YOUR SPREADSHEET ID HERE'
    rangeName = 'A1:A'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __== '__main__':
    add_todo()
7
Tim McDonald

Sie könnten einen Blick auf Sheetfu werfen. Das folgende ist ein Beispiel aus der README. Es bietet eine sehr einfache Syntax für die Interaktion mit Tabellenkalkulationen, als wäre es eine Datenbanktabelle.

from sheetfu import Table

spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('<insert spreadsheet id here>')
data_range = spreadsheet.get_sheet_by_name('people').get_data_range()

table = Table(data_range, backgrounds=True)

for item in table:
    if item.get_field_value('name') == 'foo':
        item.set_field_value('surname', 'bar')              # this set the surname field value
    age = item.get_field_value('age')
    item.set_field_value('age', age + 1)
    item.set_field_background('age', '#ff0000')             # this set the field 'age' to red color

# Every set functions are batched for speed performance.
# To send the batch update of every set requests you made,
# you need to commit the table object as follow.
table.commit()

Haftungsausschluss: Ich bin der Autor dieser Bibliothek.

0
Philippe Oger

Dieser Thread scheint ziemlich alt zu sein. Wenn jemand noch auf der Suche ist, funktionieren die hier genannten Schritte: https://github.com/burnash/gspread sehr gut.

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os

os.chdir(r'your_path')

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

creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
gc = gspread.authorize(creds)
wks = gc.open("Trial_Sheet").sheet1
wks.update_acell('H3', "I'm here!")

Stellen Sie sicher, dass Sie Ihre json-Anmeldeinformationsdatei in Ihrem aktuellen Verzeichnis ablegen. Benennen Sie es in client_secret.json um.

Möglicherweise treten Fehler auf, wenn Sie die Google Sheet-API nicht mit Ihren aktuellen Anmeldeinformationen aktivieren.

0
Pechi