¿Cómo puedo acceder (leer, escribir) hojas de cálculo de Google Sheets con Python?

Me pregunto si puede señalarme un ejemplo de lectura / escritura a / desde un documento de google / hoja de cálculo usando python.

Miré la API de Google docs aquí https://developers.google.com/google-apps/spreadsheets/ pero no estoy seguro de si encuentro el enlace correcto. También un ejemplo será de gran ayuda.

Lo que estoy tratando de hacer es consultar hojas de cálculo basadas en las diferentes columnas más como una consulta de SQL y luego hacer un análisis posterior de los datos y colocarlos en otra hoja de cálculo o documento en Google Docs.

Mejor, -bhi

    (Junio-diciembre de 2016) La mayoría de las respuestas aquí ahora están desactualizadas, ya que: 1) Las API de GData son la generación anterior de las API de Google, y es por eso que a @ Josh Brown le resultó difícil encontrar esa documentación antigua de la API de GData Docs. Si bien no todas las API de GData han quedado en desuso, todas las API de Google más recientes no utilizan el protocolo de datos de Google ; y 2) Google lanzó una nueva API de Google Sheets (no GData). Para utilizar la nueva API, necesita obtener la biblioteca de clientes de las API de Google para Python (es tan fácil como pip install -U google-api-python-client [o pip3 para Python 3]) y usar la última pip3 de Sheets API v4 + , que es mucho más potente y flexible que las versiones anteriores de API.

    Aquí hay una muestra de código de los documentos oficiales para ayudarte a ponerte en marcha. Sin embargo, aquí hay ejemplos un poco más largos, más “reales” de usar la API de la que puedes aprender (videos y publicaciones de blog):

    • Migración de datos SQL a una hoja más código postal de inmersión profunda
    • Formato de texto usando el código de Sheets API más la publicación de inmersión profunda
    • Generación de diapositivas a partir de datos de hoja de cálculo más código postal de buceo profundo

    La última API de Sheets proporciona funciones que no están disponibles en versiones anteriores, es decir, otorga a los desarrolladores acceso programático a una Sheet como si estuviera usando la interfaz de usuario (cree filas congeladas, realice el formateo de celdas, cambie el tamaño de las filas / columnas, agregue tablas dinámicas, cree gráficos, etc.) .), pero NO como si fuera una base de datos en la que podría realizar búsquedas y obtener filas seleccionadas de. Básicamente, tendrías que construir una capa de consulta sobre la API que hace esto. Una alternativa es usar el lenguaje de consulta de la API de visualización de gráficos de Google , que admite consultas de tipo SQL . También puede consultar dentro de la propia hoja . Tenga en cuenta que esta funcionalidad existía antes de la API v4 y que el modelo de seguridad se actualizó en agosto de 2016 . Para obtener más información, revise mi G + reshare para una reseña completa de un Experto en Desarrollo de Google .

    También tenga en cuenta que la API Sheets es principalmente para acceder mediante progtwigción a las operaciones y la funcionalidad de la hoja de cálculo como se describe anteriormente, pero para realizar el acceso a nivel de archivo , como importar / exportar, copiar, mover, renombrar, etc., use la API de Google Drive en su lugar. Ejemplos de uso de la API de Drive:

    • Listado de tus archivos en Google Drive y código postal de inmersión profunda
    • Google Drive: carga y descarga de archivos, además de la publicación de inmersión profunda en el código “pobre para el convertidor de PDF al hombre pobre” (*)
    • Exportar una hoja de Google solo como entrada de blog de CSV

    (*) – TL; DR: cargue un archivo de texto sin formato en Drive, importe / convierta al formato de Google Docs y luego exporte ese Doc como PDF. La publicación anterior utiliza Drive API v2; esta publicación de seguimiento describe cómo migrarla a Drive API v3, y aquí hay un video para desarrolladores que combina las publicaciones de “el pobre hombre”.

    Para obtener más información sobre cómo utilizar las API de Google con Python en general, consulte mi blog y una variedad de videos de desarrolladores de Google ( series 1 y 2 ) que estoy produciendo.

    PD. En lo que respecta a Google Docs , no hay una API REST disponible en este momento, por lo que la única forma de acceder mediante progtwigción a un Doc es mediante el uso de Google Apps Script (que, como Node.js, es JavaScript fuera del navegador, pero en lugar de ejecutándose en un servidor Node, estas aplicaciones se ejecutan en la nube de Google; también pueden ver mi video de introducción . Con Apps Script, puede crear una aplicación de Docs o un complemento para Docs (y otras cosas como Hojas de cálculo y formularios).

    ACTUALIZACIÓN Jul 2018 : El anterior “ps”. ya no es cierto El equipo de desarrolladores de G Suite anunció una nueva API REST de Google Docs en Google Cloud NEXT ’18. Los desarrolladores interesados ​​en ingresar al progtwig de acceso temprano para la nueva API deben registrarse en https://developers.google.com/docs .

    Echa un vistazo a GitHub – gspread .

    Descubrí que es muy fácil de usar y que puedes recuperar una columna completa

     first_col = worksheet.col_values(1) 

    y una fila entera por

     second_row = worksheet.row_values(2) 

    Puedes más o menos construir una selección básica ... donde ... = ... fácilmente.

    Sé que este hilo está viejo ahora, pero aquí hay una documentación decente sobre la API de Google Docs. Fue ridículamente difícil de encontrar, pero útil, así que quizás te ayude un poco. http://pythonhosted.org/gdata/docs/api.html .

    Usé gspread recientemente para un proyecto para graficar los datos de tiempo de los empleados. No sé cuánto podría ayudarlo, pero aquí hay un enlace al código: https://github.com/lightcastle/employee-timecards

    Gspread hizo las cosas bastante fáciles para mí. También pude agregar lógica para verificar varias condiciones para crear resultados de un mes a la fecha y de un año a la fecha. Pero solo importé toda la hoja de cálculo y la analicé desde allí, así que no estoy 100% seguro de que sea exactamente lo que estás buscando. La mejor de las suertes.

    Eche un vistazo al puerto gspread para api v4 – pygsheets . Debe ser muy fácil de usar en lugar del cliente de Google.

    Ejemplo de muestra

     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("myFriend@gmail.com") 

    Vea los documentos aquí .

    Autor aquí

    Los últimos documentos de Google Api documentan cómo escribir en una hoja de cálculo con Python, pero es un poco difícil de navegar. Aquí hay un enlace a un ejemplo de cómo anexar .

    El siguiente código es mi primer bash exitoso de agregar una hoja de cálculo de 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() 

    Podrías echar un vistazo a Sheetfu . El siguiente es un ejemplo de README. Proporciona una syntax muy sencilla para interactuar con hojas de cálculo como si fuera una tabla de base de datos.

     from sheetfu import Table spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('') 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() 

    Descargo de responsabilidad: Soy el autor de esta biblioteca.

    Creo que estás viendo la sección de feeds basados ​​en células en esa página de documento de API. Luego, solo puede usar las solicitudes PUT / GET dentro de su secuencia de comandos de Python, utilizando los commands.getstatusoutput subprocess o subprocess .