¡Hola! En esta entrada vamos a ver cómo podemos leer información de una hoja de cálculo (Google Sheets) alojada en nuestro Google Drive, usando Python.
Para poder leer o escribir información desde Python de una hoja de cálculo en Google Drive, primero hemos de obtener acceso a la API.
Índice de contenido
Obtener acceso al api de Google Sheets y Google Drive
Primero hemos de entrar a la url de la consola de desarrolladores de Google y crear un nuevo proyecto (o usar uno existente):

Ahora introducimos el nombre del mismo:

Una vez creado, entramos en él y buscamos la opción de APIS y servicios:

A continuación seleccionamos la biblioteca:

Nos aparecerá un cuadro de texto donde buscaremos el API de Google Drive y el de Google Sheets:


Entraremos a cada uno de ellos y pulsaremos en «activar», una vez hecho nos aparecerá habilitada:

Ahora hemos de navegar al apartado de «credenciales»:

Donde crearemos unas credenciales de tipo «cuenta de servicio»:

Introducimos los datos, en mi caso los opcionales los dejé vacíos:

Una vez creada, nos aparecerá algo así:

Entrando al detalle de la cuenta, vamos al apartado de claves y agregamos una nueva:

El tipo ha de ser JSON:

Una vez creada, se nos descargará un fichero json que usaremos en el último paso.
Compartir hoja de cálculo en Google Drive
Para poder acceder a una hoja de cálculo necesitamos compartirla con la dirección de email generada para nuestra cuenta de servicio, la cual está en el fichero json anteriormente descargado, campo «client_email»:

Para compartir una hoja, simplemente la abrimos en el navegador, pulsamos en compartir y agregamos esta cuenta de correo:

Listo, por último solo nos queda el código Python.
Conectar API Google Sheets de Drive con Python
Vamos a usar un código bastante sencillo:
import gspread from oauth2client.service_account import ServiceAccountCredentials scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope) client = gspread.authorize(creds) sheet = client.open("MI_FICHERO").sheet1 #Abrir spreadhseet data = sheet.get_all_records() #Obtener todos los registros col = sheet.col_values(1) #Obtener columna especifica insertRow = ["hello", 5, "red", "blue"] #Preparando lista a insertar sheet.add_rows(insertRow, 4) #Insertar lista en la fila 4 sheet.update_cell(2,2, "CHANGED") #Actualizar columna numRows = sheet.row_count #Obtener numero de filas de la hoja cell = sheet.cell(2,1).value #Obtener el valor de una celda row = sheet.row_values(1) #Obtener una fila completa
Pasamos a explicar un poco el código:
- La variable «creds» hace referencia al fichero json descargado en el primer paso, donde están las credenciales para conectar al api
- Con «client.open», estamos indicando por parámetro el nombre de la hoja de cálculo que queremos tratar
- El resto de líneas posteriores está explicado en comentarios de python
Podemos ver cómo de sencillo es acceder a todos los datos de la hoja, insertar filas, actualizarlas, obtener filas completas, obtener celdas específicas…
En mi caso, lo he usado para poder activar o desactivar distintas tareas automáticas que realiza uno de mis equipos, cada script lee ciertas celdas de la hoja de Drive y, en función de si encuentra un 1 o un 0, ejecuta la tarea correspondiente o no, sirviendo como «bandera de activación». Esto me soluciona la problemática de tener que estar activando y desactivando las tareas cron que uso para mis scripts automáticos. Por ejemplo, si llega una semana de vacaciones y no quiero que mi script para fichar en el trabajo se ejecute, lo deshabilito en esta hoja desde el móvil y listo, no tengo que habilitar y deshabilitar el cron antes y después de las vacaciones en el equipo que lo ejecuta.
Un saludo!