Cómo acceder y editar Google Sheets con Python

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
Acesso e edição de Google Sheets com Python

Automatizar Google Sheets con Python permite leer y escribir datos, actualizar informes, importar resultados de otros sistemas y eliminar tareas repetitivas de copia y pega. Una de las opciones más cómodas es utilizar gspread, una biblioteca que simplifica el acceso a la API oficial de Google Sheets.

Antes de empezar, consulta las guías sobre entornos virtuales, bibliotecas de Python, diccionarios, manejo de excepciones y automatización de tareas. Como referencias externas, revisa la documentación oficial de Google Sheets API y la documentación oficial de gspread.

Qué necesitas

Necesitas una cuenta de Google, un proyecto de Google Cloud, la API de Sheets habilitada y credenciales. Para automatizaciones de servidor suele utilizarse una cuenta de servicio. Para aplicaciones que actúan en nombre de usuarios, el flujo OAuth es más apropiado.

Crear un entorno virtual

python -m venv .venv

En Windows:

.venv\Scripts\activate

En macOS o Linux:

source .venv/bin/activate

Después instala las dependencias:

python -m pip install gspread google-auth

Crear una cuenta de servicio

En Google Cloud, crea o selecciona un proyecto, habilita Google Sheets API y genera una cuenta de servicio. Descarga la clave JSON y guárdala fuera del repositorio público. Ese archivo contiene credenciales sensibles.

Después comparte la hoja con el correo de la cuenta de servicio, igual que compartirías el documento con una persona. Si no haces este paso, la API puede autenticar correctamente pero no tendrá acceso a la hoja.

No publicar las credenciales

Añade el nombre del archivo a .gitignore:

credenciales-google.json
.env

En producción, utiliza un gestor de secretos o variables protegidas. No copies la clave dentro del código.

Conectarse a Google Sheets

import gspread
from google.oauth2.service_account import Credentials

ALCANCES = [
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/drive",
]

credenciales = Credentials.from_service_account_file(
    "credenciales-google.json",
    scopes=ALCANCES,
)

cliente = gspread.authorize(credenciales)

El alcance de Sheets permite trabajar con celdas. El de Drive facilita abrir documentos y realizar ciertas operaciones relacionadas.

Abrir una hoja por identificador

Es preferible abrir por ID en lugar de por título, porque los títulos pueden repetirse o cambiar:

ID_HOJA = "1AbC...identificador...XYZ"
libro = cliente.open_by_key(ID_HOJA)
hoja = libro.worksheet("Ventas")

El identificador aparece en la URL del documento entre /d/ y /edit.

Leer una celda

valor = hoja.acell("B2").value
print(valor)

Los valores suelen llegar como texto. Convierte explícitamente cuando necesites números o fechas.

Leer una fila o una columna

encabezados = hoja.row_values(1)
correos = hoja.col_values(3)

Estas funciones son útiles para conjuntos pequeños. Para grandes volúmenes, conviene leer rangos completos en una sola llamada.

Leer todos los registros

registros = hoja.get_all_records()

for registro in registros:
    print(registro["Producto"], registro["Precio"])

La primera fila se utiliza como encabezado y cada fila posterior se convierte en un diccionario.

Leer un rango

valores = hoja.get("A1:D20")

for fila in valores:
    print(fila)

Una petición por rango es más eficiente que hacer una solicitud por celda.

Actualizar una celda

hoja.update_acell("D2", "Procesado")

También puedes utilizar coordenadas numéricas:

hoja.update_cell(2, 4, "Procesado")

Actualizar varias celdas

datos = [
    ["Producto", "Cantidad", "Precio"],
    ["Teclado", 2, 50],
    ["Ratón", 3, 20],
]

hoja.update(range_name="A1:C3", values=datos)

Las actualizaciones por lotes reducen llamadas a la API y hacen el proceso más rápido.

Añadir filas

hoja.append_row(
    ["Monitor", 1, 220],
    value_input_option="USER_ENTERED",
)

USER_ENTERED permite que Sheets interprete fechas, números y fórmulas como si se hubieran escrito manualmente. Usa RAW cuando quieras conservar el contenido literalmente.

Insertar fórmulas

hoja.update_acell("D2", "=B2*C2")

Las fórmulas dependen de la configuración regional de la hoja. Verifica separadores y nombres de funciones si trabajas con documentos de distintos países.

Buscar una fila

celda = hoja.find("Teclado")
print(celda.row, celda.col)

Para búsquedas repetidas en datos grandes, puede ser más eficiente descargar el rango una vez y construir un índice en memoria.

Convertir valores con seguridad

from decimal import Decimal, InvalidOperation


def convertir_decimal(valor):
    texto = str(valor).strip().replace(",", ".")
    try:
        return Decimal(texto)
    except InvalidOperation:
        return None

No supongas que todas las celdas tienen datos válidos. Las hojas suelen contener espacios, encabezados duplicados o números escritos con formatos diferentes.

Evitar una solicitud por celda

Este patrón es lento:

for fila in range(2, 1000):
    valor = hoja.cell(fila, 1).value

Prefiere una lectura única:

valores = hoja.get("A2:A1000")

Las APIs aplican cuotas. Agrupar operaciones mejora velocidad y reduce el riesgo de límites.

Manejo de errores

import time
import gspread


def abrir_hoja(cliente, identificador, intentos=3):
    for intento in range(1, intentos + 1):
        try:
            return cliente.open_by_key(identificador)
        except gspread.exceptions.APIError as error:
            if intento == intentos:
                raise
            espera = intento * 2
            print(f"Error temporal: {error}. Reintento en {espera}s")
            time.sleep(espera)

Los reintentos deben ser limitados. No repitas indefinidamente errores de permisos, credenciales inválidas o identificadores incorrectos.

Registrar cambios

Guarda fecha, cantidad de filas procesadas, hoja utilizada y resultado. Evita registrar claves, tokens o datos personales completos.

import logging

logging.basicConfig(
    filename="sheets.log",
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s",
)

Ejemplo completo: marcar pedidos

def marcar_pedidos_pendientes(hoja):
    datos = hoja.get_all_records()
    actualizaciones = []

    for numero_fila, pedido in enumerate(datos, start=2):
        estado = str(pedido.get("Estado", "")).strip().lower()
        total = convertir_decimal(pedido.get("Total", ""))

        if estado == "pendiente" and total is not None:
            actualizaciones.append({
                "range": f"E{numero_fila}",
                "values": [["Revisar"]],
            })

    if actualizaciones:
        hoja.batch_update(actualizaciones)

    return len(actualizaciones)

La función lee una sola vez, valida campos y envía las modificaciones juntas.

Probar sin tocar la hoja real

Separa la lógica que decide cambios de la parte que llama a la API. Puedes pasar listas de diccionarios a una función pura y verificar el resultado con tests. Para una prueba integrada, utiliza una hoja exclusiva de desarrollo.

Permisos mínimos

Concede únicamente los permisos necesarios. Si el proceso solo necesita lectura, usa un alcance de solo lectura. Comparte únicamente las hojas requeridas con la cuenta de servicio.

Errores frecuentes

Los problemas comunes son olvidar compartir la hoja con la cuenta de servicio, publicar el JSON de credenciales, abrir por un título duplicado, realizar miles de peticiones pequeñas y asumir que las celdas siempre contienen tipos correctos. También es frecuente confundir el ID de la hoja con el identificador numérico de una pestaña.

Conclusión

Python y gspread forman una solución práctica para automatizar Google Sheets. Trabaja con credenciales protegidas, abre documentos por ID, agrupa lecturas y escrituras, valida todos los valores y registra el resultado. Una automatización fiable debe ahorrar trabajo sin comprometer permisos, datos ni cuotas de la API.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Compactação de arquivos ZIP usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo descomprimir archivos ZIP con Python de forma segura

    Descomprime archivos ZIP con Python de forma segura: valida rutas, evita Zip Slip, limita tamaños, verifica integridad y procesa archivos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Python e ícone de e-mail sobre teclado de notebook
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo automatizar correos electrónicos con Python

    Automatiza correos con Python usando EmailMessage y smtplib: texto, HTML, adjuntos, TLS, variables de entorno, reintentos y prevención de duplicados.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Automação de mensagens no WhatsApp usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un bot de WhatsApp con Python de forma responsable

    Crea un bot de WhatsApp con Python usando PyWhatKit o la Cloud API oficial, con validación, seguridad, colas, pruebas y

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Bot em Python para monitorar produtos e avisar quando houver queda de preço automaticamente
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un bot de alerta de precios con Python

    Crea un bot de alerta de precios con Python, Requests y Beautiful Soup, usando Decimal, estado persistente, correo, logs y

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Extração de texto de arquivos PDF usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo extraer texto de archivos PDF con Python

    Extrae texto de PDF con Python usando pypdf y pdfplumber, procesa carpetas, tablas, archivos protegidos y detecta cuándo necesitas OCR.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Automação de tarefas com Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    20 scripts de Python para automatizar tareas cotidianas

    Descubre 20 scripts de Python para organizar archivos, crear backups, procesar CSV, enviar correos, comprobar sitios y automatizar tareas seguras.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026