Conectar a Google Sheets de Drive desde Python

¡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.

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

crear proyecto google developer console
Creando el proyecto

Ahora introducimos el nombre del mismo:

rellenar información proyecto google developer console
Rellenando la información el proyecto

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

apis y servicios google developer console
Apis y servicios

A continuación seleccionamos la biblioteca:

biblioteca de apis google developer console
Biblioteca de apis

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

buscador biblioteca google developer console google drive
Buscando en biblioteca api google drive
buscador biblioteca google developer console google sheets
Buscando en biblioteca api google sheets

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

api google developer console activada
Api activada

Ahora hemos de navegar al apartado de «credenciales»:

credenciales proyecto google developer console
Credenciales del proyecto

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

crear cuenta servicio credenciales google developer console
creando credenciales servicio

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

cuenta servicio credenciales google developer console
Creamos las credenciales

Una vez creada, nos aparecerá algo así:

gestionar claves cuenta servicio google developer console
Gestión de claves

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

crear clave nueva cuenta servicio google developer console
Creando una nueva clave

El tipo ha de ser JSON:

crear nueva clave json cuenta servicio google developer console
Nueva clave tipo 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»:

json credenciales acceder api google sheets drive
Json de credenciales para el api de Sheets y Drive

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

compartir hoja google sheets drive acceder mediante api
Compartir hoja de google sheets en drive

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!