Python es uno de los lenguajes de programación más nobles y sencillos de aprender que existen. Es muy práctico usarlo para automatizar todo tipo de tareas, sobre todo las que tienen que ver con datos. Es por eso que es el complemento perfecto para trabajar con Google Sheets. Entonces hoy aprenderemos a utilizar Python para conectarnos a una hoja de cálculo de Google Sheets para leer y escribir datos de la misma.

Preparando nuestros datos

Primero vamos a preparar una hoja con algunos datos sencillos, una simple lista de nombres, por ejemplo.

También creamos un directorio nuevo en cualquier parte de nuestra computadora, para poder guardar nuestras credenciales y código de Python.

Nuestro objetivo para esta hoja será muy concreto: usar Python para leer los nombres y también para escribir nuevos nombres en esta lista.

Crear un proyecto de Google Cloud Platform

Ahora, antes de poder usar Python para lograrlo, tenemos que realizar unos pasos necesarios para que nuestro programa tenga el permiso adecuado para leer y escribir en la hoja.

Primero es necesario crear un proyecto de Google Cloud Platform. Esto es porque la hoja de cálculo vive en la nube de Google y está asociada a nuestra cuenta, entonces requerimos crear esas credenciales antes. No te preocupes si te suena un poco engorroso, estos paso solo los haremos una vez, pero es importante entender cómo funciona este proceso.

Entonces, vamos a la página https://console.cloud.google.com/ , donde se encuentra nuestra consola de Google Cloud.

Aquí debemos encontrar la opción que nos permita crear un nuevo proyecto. Esta inferfaz suele cambiar con el tiempo, pero usualmente se encuentra fácilmente si vamos al menú de proyectos en la parte superior. Luego veremos una pantalla con nuestros proyectos activos, y la opción que buscamos: ‘Nuevo proyecto’

Si no lo encuentras, puedes usar este link para ir directamente: https://console.cloud.google.com/projectcreate

Lo que sigue es nombrar nuestro proyecto como queramos. Si estás en una cuenta corporativa, también te preguntará si quieres asociar el proyecto a tu dominio. Esto es algo administrativo y depende de tu caso, si tienes dudas por ahora déjalo como está, pues mientras no usemos una API que tenga un costo, no nos afectará.

Damos click en el botón de Crear y en la lista de proyectos nos aseguramos de tener seleccionado el que acabamos de crear.

Habilitar API de Google Sheets en nuestro proyecto de Google Cloud

Ahora tenemos que habilitar la API de Google Sheets para nuestro proyecto, porque es la API que tiene las funcionalidades necesarias para manipular hojas de cálculo. En la parte superior de la pantalla usamos el buscador para encontrar “google sheets api”. Veremos algunos resultados sobre documentación, pero el que nos interesa es el que dice solamente Google Sheets API.

Si no lo encuentras, solamente usa este link para ir directamente: https://console.cloud.google.com/flows/enableapi?apiid=sheets.googleapis.com

En esta pantalla, damos click en el botón de Enable, osea Habilitar.

Crear service account y credenciales para el proyecto de Python y Google Sheets

Una vez habilitada la API, debe llevarnos automáticamente a una pantalla para administrarla. Aquí, vamos a la opción del menú Credentials (osea Credenciales). Esto es necesario porque Google requiere que todas las partes involucradas tengan permiso explícito de manipular datos. En este caso crearemos credenciales para nosotros mismos y parece redundante, pero es necesario.

Lo que sigue es crear una Service account. Una Service account es una cuenta especial que tiene como propósito representar a un usuario que necesita acceso a ciertos recursos, pero que no es necesariamente una persona, sino que es algo más parecido a una cuenta bot que nos servirá de apoyo.

Entonces elegimos la opción de + Create credentials (osea crear credenciales) y después Service account

Llenamos el nombre de la service account con lo que sea, y el ID se generará automáticamente. Ahora damos click en el botón Create and continue (crear y continuar), porque nos falta darle acceso a esta service account a nuestro proyecto.

En este paso, buscamos el rol de Project – Editor

Damos click en Continue y el último paso ya no es necesario, entonces damos click también en Done.

Crear keys para proyecto de Python y Google Sheets

Como puedes ver, ya tenemos creada nuestra service account. Damos click en nuestra service account para entrar a configurarla.

La cuenta tiene asociado un correo, que después usaremos, entonces cópialo en algún lado.

Ahora, vamos a la pestaña de KEYS. Luego usamos la opción de ADD KEY – Create new key

Elegimos JSON para el formato de archivo de la llave, y al dar click en CREATE nos preguntará dónde la queremos guardar. Elegimos el directorio que creamos al principio y nombramos el archivo como key.json para que sea fácil de manipular.

Compartir hoja de cálculo a la service account

La última cosa que tenemos que hacer antes de ir ya a Python, es compartirle el documento de la hoja de cálculo a nuestra service account. Si regresamos a la pestaña de DETAILS, podemos encontrar el correo de esta service account. Lo copiamos, y en nuestra hoja de cálculo vamos a la opción Compartir, pegamos ese correo y listo.

Sé que estos pasos pueden ser algo tediosos, pero si me has seguido paso a paso, no deberías tener problema. Además, esto solo se necesita hacer una vez.

Preparar Python

¡Ahora sí, vamos a Python! Primero, asegúrate de tener instalada una versión reciente de Python, como Python 3. Yo estoy usando Windows y PowerShell con la app oficial de Terminal, pero no cambia realmente nada de lo que haremos si estás usando Mac o Linux o VS Code para integrar tu código y tu terminal.

En este link puedes descargar e instalar Python si aun no lo tienes: https://www.python.org/downloads/

Mi recomendación específica para Windows, es que al instalar, actives la opción de agregar Python al PATH.

Entonces, en una terminal, nos situamos en el directorio donde pusimos nuestro archivo de key.json.

Y para hacer bien las cosas, empezamos creando un ambiente virtual y lo activamos. No te preocupes, por ahora no entraremos en detalle sobre los ambientes virtuales en Python, entonces este paso te lo puedes saltar si quieres, pero yo lo recomiendo siempre que hagas un nuevo proyecto, para no mezclar tus dependencias en un futuro.

python -m venv venv
Lenguaje del código: PowerShell (powershell)

Activamos el ambiente virtual que acabamos de hacer. Si ya lo tenías creado, puedes solo activarlo, no lo tienes que recrear:

.\venv\Scripts\activate
Lenguaje del código: PowerShell (powershell)

Como nota, yo estoy usando Python 3 en Windows y tengo otras versiones instaladas al mismo tiempo. Como tengo instalado el launcher de py.exe que viene con la instalación normal de Windows, para mi primer comando en vez de usar el comando python usé el comando py, pero no cambia nada si es la primera vez que usas Python y solo tienes una versión.

Lo siguiente que debemos hacer es instalar las dependencias necesarias para conectarnos a Google Cloud. Te comparto el comando listo para copiar y pegar de pip install:

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Código de Python para leer datos desde una hoja de cálculo de Google Sheets

¡Ahora sí, al fin viene lo bueno! Para nuestro ejemplo, vamos a crear dos programas: uno para leer de la hoja y otro para escribir. Podríamos hacer solo uno con argumentos, pero mejor vamos a mantenerlo muy simple por ahora.

Primero creamos un archivo nuevo en nuestro directorio llamado leer.py y pegamos este código, que explicaremos a continuación:

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
KEY = 'key.json'
# Escribe aquí el ID de tu documento:
SPREADSHEET_ID = ''

creds = None
creds = service_account.Credentials.from_service_account_file(KEY, scopes=SCOPES)

service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

# Llamada a la api
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range='Hoja 1!A1:A8').execute()
# Extraemos values del resultado
values = result.get('values',[])
print(values)
Lenguaje del código: Python (python)

En este código podemos ver que primero importamos las librerías que acabamos de instalar. Después elegimos el scope correcto que tiene que ver con la API que habilitamos hace unos minutos. En KEY, le decimos qué archivo contiene las credenciales que también hace un momento creamos, es decir, key.json. Luego, en SPREADSHEET_ID, debemos ingresar el ID del documento que vamos a consultar. Si vemos la URL de nuestra hoja de cálculo, este será lo que está entre /d/ y /edit

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
KEY = 'key.json'
# Escribe aquí el ID de tu documento:
SPREADSHEET_ID = ''
Lenguaje del código: Python (python)

Después, cargamos las credenciales en el objeto de service_account junto con sus scopes.

Esto lo integramos a un objeto que llamamos service, y llamamos al método spreadsheets del mismo para crear el objeto que controlará todo, y le llamamos sheet. Osea, con este objeto manipularemos nuestra hoja desde Python.

creds = None
creds = service_account.Credentials.from_service_account_file(KEY, scopes=SCOPES)

service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
Lenguaje del código: Python (python)

Finalmente llamamos a la API con el método values y get, indicándole el rango de la hoja que queremos traer. No hay que olvidar llamar el método execute al final. En ese resultado vienen muchos metadatos, pero el que nos interesa es values. Y finalmente imprimimos el resultado.

# Llamada a la api
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range='Hoja 1!A1:A8').execute()
# Extraemos values del resultado
values = result.get('values',[])
print(values)
Lenguaje del código: Python (python)

Si ejecutamos nuestro código, obtenemos el resultado:

python leer.py

No te asustes si te parece algo rebuscado, puedes encontrar la documentación de todo esto en el sitio de desarrolladores de Google Cloud.

Código de Python para escribir datos a una hoja de cálculo de Google Sheets

Finalmente, vamos a completar el ejemplo escribiendo en esta misma hoja de cálculo.

El código para escribir.py es muy similar, realmente solo cambia la última parte:

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
KEY = 'key.json'
SPREADSHEET_ID = ''

creds = None
creds = service_account.Credentials.from_service_account_file(KEY, scopes=SCOPES)

service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

# Debe ser una matriz por eso el doble [[]]
values = [['Prueba!']]
# Llamamos a la api
result = sheet.values().append(spreadsheetId=SPREADSHEET_ID,
							range='A1',
							valueInputOption='USER_ENTERED',
							body={'values':values}).execute()
print(f"Datos insertados correctamente.\n{(result.get('updates').get('updatedCells'))}")
Lenguaje del código: PHP (php)

Entonces expliquemos esa última parte. Hay varios métodos disponibles para nosotros para manipular la hoja de cálculo, los más importantes son get, update y append. Get es el que usamos hace un momento para obtener o leer datos. Luego está update, que nos permite actualizar el valor de un rango específico. Y finalmente tenemos append, que nos permite agregar datos a un rango, sin tener que saber dónde termina.

Una cosa importante que debemos entender al escribir en una hoja de cálculo desde Python, es que para Google Sheets, todos los rangos se agrupan internamente en tablas. Si hay más datos en la misma hoja, pueden o no ser parte de la misma tabla. Esto será importante al indicar el rango.

Para nuestro ejemplo usaremos append indicando el rango A1, porque queremos agregar nombres al final de la tabla que le corresponde a A1, sin preocuparnos por saber en qué celda está el último nombre agregado. Con este método de append, solo tenemos que indicarle algún rango de nuestra tabla, y la API sabrá escribirlo siempre al final de la misma. Esto es muy útil para datos que se van agregando continuamente.

Aquí debemos enviar una matriz de valores, por eso usamos los corchetes para crear un arreglo doble, porque aunque solo es un elemento esta vez, el método espera una matriz.

Si probamos nuestro código, vemos que funciona correctamente, agregando el valor de ‘Prueba!’ al final del rango

python escribir.py

¿Está genial no? 😉

De aquí en adelante las posibilidades son realmente infinitas, pues Python es un lenguaje muy poderoso. Puedes, por ejemplo, hacer un programa que reciba datos de otra fuente como otra hoja de cálculo, una página, una API externa, etc. y los escriba en tu hoja de cálculo. Es cosa de que estudies la documentación API de Google Sheets y de Python para lograr tu objetivo.

Guía en video

Si tienes dudas puedes ver esta misma guía explicada en video

¡Espero que te haya sido útil esta guía! No olvides seguirnos en YouTube para más tips, trucos y guías de productividad.

Si te interesa aprender más sobre Google Sheets, checa nuestro Curso: Aprende Sheets en el que podrás elevar tu aprendizaje de hojas de cálculo al nivel experto.

Aprende Sheets: Curso práctico de Hojas de cálculo de Google
Aprende Sheets: Curso práctico de Hojas de cálculo de Google