61

Mi chiedo se riesci a indicarmi un esempio di lettura/scrittura da/verso un google doc/foglio di calcolo usando python.Come accedere (leggere, scrivere) a fogli di lavoro Fogli Google con Python?

Ho guardato l'API di google docs qui https://developers.google.com/google-apps/spreadsheets/ ma non sono sicuro se ho colpito il collegamento giusto. Anche un esempio sarà di grande aiuto.

Quello che sto cercando di fare è interrogare fogli di calcolo basati su diverse colonne più come una query SQL e poi fare un po 'di analisi downstream con i dati e inserirli in un altro foglio di lavoro o documento su google docs.

migliore, -Abhi

+3

http://code.google.com/p/gdata-python-client/ –

risposta

-2

Penso che stai guardando la sezione a base di cellule alimenta in quella pagina API doc. Quindi puoi semplicemente usare le richieste PUT/GET all'interno del tuo script Python, usando commands.getstatusoutput o subprocess.

51

Dai un'occhiata allo GitHub - gspread.

ho trovato ad essere molto facile da usare e dal momento che è possibile recuperare un'intera colonna da

first_col = worksheet.col_values(1) 

e tutta una riga per

second_row = worksheet.row_values(2) 

si può costruire più o meno un po 'di selezionare base ... dove ... = ... facilmente.

+4

Nota: gspread non sembra avere funzionalità per l'eliminazione di righe, celle o colonne: potrebbe solo ridimensionare il foglio di calcolo o cancellare le celle. Ciò ha reso inutile per i miei scopi. – Moshe

+0

Non credo che sia gspread questo è il problema ... è l'API. Le versioni delle API di Older Sheets (v1-v3) non fornivano tale funzionalità. La [nuova API v4 può fare la cancellazione] (http://developers.google.com/sheets/samples/rowcolumn). Vedi [la mia risposta] (http://stackoverflow.com/a/37868852/5049813) sopra per maggiori informazioni. – wescpy

+0

prova la porta gspread api v4 [pygsheets] (https://github.com/nithinmurali/pygsheets) - autore qui – nithin

28

So che questo thread è vecchio ora, ma qui c'è una discreta documentazione sull'API di Google Docs. Era incredibilmente difficile da trovare, ma utile, quindi forse ti aiuterà. http://pythonhosted.org/gdata/docs/api.html.

Ho usato gspread recentemente per un progetto per rappresentare graficamente i dati del tempo impiegato. Non so quanto possa aiutarti, ma ecco un link al codice: https://github.com/lightcastle/employee-timecards

Gspread ha reso le cose abbastanza facili per me. Sono stato anche in grado di aggiungere la logica per verificare le varie condizioni per creare risultati da inizio anno e da inizio anno. Ma ho appena importato l'intero foglio di calcolo dang e l'ho analizzato da lì, quindi non sono sicuro al 100% che sia esattamente quello che stai cercando. Buona fortuna.

+0

Il secondo link ora reindirizza al primo – Kariamoss

+0

Questa risposta non è più aggiornata. Vedi [risposta di Wescpy] (http://stackoverflow.com/a/37868852/5049813). –

79

(giugno-Dic 2016) La maggior parte delle risposte qui ora sono out-of-date: 1) GData APIs sono alla precedente generazione di API di Google, ed è per questo è stato difficile per @Josh Brown a trovare quel vecchio GData Docs Documentazione API. Sebbene non tutte le API GData siano state deprecate, all newer Google APIs do non utilizza the Google Data protocol; e 2) Google released a new Google Sheets API (non GData). Per utilizzare la nuova API, è necessario ottenere the Google APIs Client Library for Python (è facile come pip install -U google-api-python-client [o pip3 per Python 3]) e utilizzare l'ultimo Sheets API v4+, che è molto più potente & flessibile rispetto alle versioni precedenti dell'API.

Questo è uno code sample dai documenti ufficiali per aiutarti a fare il kickstart.Tuttavia, qui ci sono un po 'più a lungo, più esempi "mondo reale" di utilizzare l'API si può imparare da (video nonché i post del blog):

L'ultima Fogli API fornisce funzionalità non disponibili nelle versioni più vecchie, cioè offrendo agli sviluppatori l'accesso programmatico a un foglio come se si stesse utilizzando l'interfaccia utente (creare file congelati, eseguire la formattazione delle celle, ridimensionare righe/colonne, aggiungere tabelle pivot, creare grafici, ecc.), ma NON come se fosse un database che è possibile eseguire ricerche su e ottenere le righe selezionate da. Fondamentalmente dovresti creare un livello di query sopra l'API che fa questo. Un'alternativa è usare the Google Charts Visualization API query language, che supporta SQL-like querying. Puoi anche query from within the Sheet stesso. Si noti che questa funzionalità esisteva prima dell'API v4 e che lo security model was updated in Aug 2016. Per ulteriori informazioni, controlla my G+ reshare to a full write-up da un Google Developer Expert.

noti inoltre che il Fogli API è principalmente per programmazione accesso operazioni foglio elettronico & funzionalità come descritto sopra, ma per eseguire lima -livello accesso quali importazioni/esportazioni, copiare, spostare, rinominare, ecc, uso il Google Drive API invece. Esempi di utilizzo delle API di azionamento:

(*) - TL; DR: carica il file di testo in Drive, importa/converti nel formato di Google Documenti, quindi esporta quel documento come PDF. Pubblica sopra utilizza Drive API v2; this follow-up post descrive la migrazione a Drive API v3, ed ecco un developer video che combina entrambi i post di "poor man's converter".

Per saperne di più su come utilizzare le API di Google con Python in generale, controlla my blog così come una varietà di Google video per sviluppatori (series 1 e series 2) sto producendo.

ps. Per quanto riguarda lo Google Docs, al momento non è disponibile un'API REST, quindi l'unico modo per accedere a un documento a livello di codice è utilizzare Google Apps Script (che come Node.js è JavaScript al di fuori del browser, ma invece di in esecuzione su un server Node, queste app girano nel cloud di Google, controlla anche il mio intro video.) Con Apps Script, puoi creare un Docs app o un add-on for Docs (e altre cose come Fogli & Moduli).

+5

Grazie a wescpy, questo deve essere urtato. –

6

Gli ultimi documenti di google api documentano come scrivere su un foglio di calcolo con python ma è un po 'difficile da navigare. Ecco un link to an example of how to append.

Il seguente codice è il mio primo tentativo riuscito di accodamento a un foglio di calcolo di Google.

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 __name__ == '__main__': 
    add_todo() 
+0

L'unica risposta specifica alla domanda. – e4c5

5

Date un'occhiata a porto gspread per api v4 - pygsheets. Dovrebbe essere molto facile da usare piuttosto che dal client google.

esempio Esempio

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]") 

Vedi la documentazione here.

Autore qui.

+0

'pygsheets' è una porta di' gspread' o una completa riscrittura? – Xocoatzin

+0

È una riscrittura completa anche se l'api è mantenuta quasi simile – nithin

+0

Contento di averlo fatto scorrere verso il basso. È di gran lunga la soluzione più semplice per me. Qualche informazione su come creare credenziali per autorizzare l'uso dei fogli di google sarebbe utile, qualcosa come questo https://www.themarketingtechnologist.co/google-oauth-2-enable-your-application-to-access-data-from- a-google-user/ – Katu

Problemi correlati