web-dev-qa-db-fra.com

Comment accéder (lire, écrire) aux feuilles de calcul Google Python?

Je me demande si vous pouvez m'indiquer un exemple de lecture/écriture dans/à partir d'un document Google/d'une feuille de calcul utilisant python. 

J'ai regardé l'API google docs ici https://developers.google.com/google-apps/spreadsheets/ mais je ne sais pas si j'ai cliqué sur le bon lien. Un exemple sera également d'une grande aide.

Ce que j'essaie de faire est d'interroger les feuilles de calcul en fonction des différentes colonnes, comme s'il s'agissait d'une requête SQL, puis d'analyser les données en aval et de les insérer dans une autre feuille de calcul ou un autre document sur Google Documents.

Meilleur, - Abhi

66
Abhi

Regardez GitHub - gspread

Je l’ai trouvé très facile à utiliser et puisque vous pouvez récupérer toute une colonne en 

first_col = worksheet.col_values(1)

et toute une rangée de 

second_row = worksheet.row_values(2)

vous pouvez plus ou moins construire un élément de base sélectionner ...... = ... facilement.

53
Arthur G

Je sais que ce fil est ancien maintenant, mais voici une documentation décente sur l'API Google Docs. C'était ridiculement difficile à trouver, mais utile, alors peut-être que cela vous aidera. http://pythonhosted.org/gdata/docs/api.html .

J'ai récemment utilisé gspread pour un projet afin de représenter graphiquement les données de temps des employés. Je ne sais pas dans quelle mesure cela pourrait vous aider, mais voici un lien vers le code: https://github.com/lightcastle/employee-timecards

Gspread a rendu les choses assez faciles pour moi. J'ai également pu ajouter de la logique pour vérifier diverses conditions afin de créer des résultats mensuels et annuels. Mais je viens d'importer le tableur entier et de le analyser à partir de là, donc je ne suis pas sûr à 100% que c'est exactement ce que vous recherchez. Bonne chance.

28
Josh Brown

Jetez un coup d'œil au port gspread pour api v4 - pygsheets . Il devrait être très facile à utiliser plutôt que le client Google.

Exemple

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

Voir les docs ici .

Auteur ici. 

7
nithin

La dernière version de Google Api Docs explique comment écrire sur une feuille de calcul avec Python, mais il est un peu difficile de naviguer. Voici un lien vers un exemple montrant comment ajouter .

Le code suivant est ma première tentative réussie d’ajout à une feuille de calcul 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 __== '__main__':
    add_todo()
7
Tim McDonald

Vous pouvez jeter un oeil à Sheetfu . Voici un exemple tiré du fichier README. Il offre une syntaxe extrêmement facile pour interagir avec des feuilles de calcul comme s'il s'agissait d'une table de base de données.

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()

Disclaimer: Je suis l'auteur de cette bibliothèque.

0
Philippe Oger

Ce fil semble être assez vieux. Si quelqu'un cherche toujours, les étapes mentionnées ici: https://github.com/burnash/gspread fonctionnent très bien.

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

Assurez-vous de déposer votre fichier json d'informations d'identification dans votre répertoire actuel. Renommez-le en tant que client_secret.json.

Vous risquez de rencontrer des erreurs si vous n'activez pas l'API Google Sheet avec vos informations d'identification actuelles.

0
Pechi