Inicio / Excel / Excel Avanzado: Power User / Automatización con APIs y conexiones web

Automatización con APIs y conexiones web

Consumir APIs REST, Outlook y actualizaciones automáticas.

Avanzado
🔒 Solo lectura
📖

Estás en modo lectura

Puedes leer toda la lección, pero para marcar progreso, hacer ejercicios y ganar XP necesitas una cuenta Pro.

Desbloquear por $9/mes

Automatización con APIs y conexiones web

Conecta Excel con el mundo exterior: APIs REST, web scraping y datos en tiempo real.

Web Queries con VBA

Descargar contenido web

Sub DescargarWeb()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    http.Open "GET", "https://api.ejemplo.com/datos", False
    http.send
    
    If http.Status = 200 Then
        Debug.Print http.responseText
    Else
        MsgBox "Error: " & http.Status
    End If
End Sub

Consumir API REST (JSON)

Sub ObtenerDatosAPI()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    Dim url As String
    url = "https://api.exchangerate-api.com/v4/latest/USD"
    
    http.Open "GET", url, False
    http.setRequestHeader "Content-Type", "application/json"
    http.send
    
    If http.Status = 200 Then
        ' Parsear JSON manualmente o con librería
        Dim json As String
        json = http.responseText
        
        ' Extraer valor con InStr (básico)
        Dim pos As Long
        pos = InStr(json, """MXN"":")
        If pos > 0 Then
            Dim valor As String
            valor = Mid(json, pos + 6, 10)
            valor = Left(valor, InStr(valor, ",") - 1)
            Range("B1").Value = "USD/MXN: " & valor
        End If
    End If
End Sub

Con librería JSON (VBA-JSON)

Instala VBA-JSON (módulo JsonConverter):

Sub ConsumirAPIConJSON()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    http.Open "GET", "https://api.ejemplo.com/productos", False
    http.setRequestHeader "Authorization", "Bearer " & Range("Config!B1").Value
    http.send
    
    Dim datos As Object
    Set datos = JsonConverter.ParseJson(http.responseText)
    
    ' Iterar resultados
    Dim fila As Long: fila = 2
    Dim item As Object
    
    For Each item In datos("results")
        Cells(fila, 1).Value = item("id")
        Cells(fila, 2).Value = item("nombre")
        Cells(fila, 3).Value = item("precio")
        fila = fila + 1
    Next item
End Sub

POST con datos

Sub EnviarDatos()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    Dim body As String
    body = "{""nombre"":""" & Range("A2").Value & """,""email"":""" & Range("B2").Value & """}"
    
    http.Open "POST", "https://api.ejemplo.com/clientes", False
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Authorization", "Bearer " & token
    http.send body
    
    If http.Status = 201 Then
        MsgBox "Cliente creado exitosamente"
    Else
        MsgBox "Error: " & http.responseText
    End If
End Sub

Power Query para APIs

Endpoint simple

let
    Origen = Json.Document(Web.Contents("https://api.ejemplo.com/datos")),
    Tabla = Table.FromRecords(Origen[data])
in
    Tabla

Con paginación

let
    ObtenerPagina = (pagina as number) as table =>
    let
        url = "https://api.ejemplo.com/datos?page=" & Text.From(pagina) & "&limit=100",
        respuesta = Json.Document(Web.Contents(url)),
        datos = Table.FromRecords(respuesta[data])
    in
        datos,
    
    totalPaginas = Json.Document(Web.Contents("https://api.ejemplo.com/datos?page=1&limit=100"))[total_pages],
    
    paginas = List.Transform({1..totalPaginas}, each ObtenerPagina(_)),
    Resultado = Table.Combine(paginas)
in
    Resultado

Con autenticación OAuth

let
    token = "tu_token_aqui",
    Origen = Json.Document(Web.Contents(
        "https://api.ejemplo.com/datos",
        [Headers = [Authorization = "Bearer " & token]]
    )),
    Tabla = Table.FromRecords(Origen)
in
    Tabla

Automatización con Outlook

Enviar emails masivos

Sub EnviarEmailsMasivos()
    Dim olApp As Object, olMail As Object
    Set olApp = CreateObject("Outlook.Application")
    
    Dim ultimaFila As Long
    ultimaFila = Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long
    For i = 2 To ultimaFila
        Set olMail = olApp.CreateItem(0)
        
        With olMail
            .To = Cells(i, 2).Value         ' email
            .Subject = "Reporte - " & Cells(i, 1).Value
            .HTMLBody = GenerarHTML(i)
            .Display  ' Cambiar a .Send para envío automático
        End With
        
        Cells(i, 5).Value = "Enviado"
        Cells(i, 6).Value = Now
        
        Set olMail = Nothing
    Next i
End Sub

Function GenerarHTML(fila As Long) As String
    GenerarHTML = "<html><body>" & _
        "<h2>Estimado/a " & Cells(fila, 1).Value & "</h2>" & _
        "<p>Su saldo actual es: <b>$" & Format(Cells(fila, 3).Value, "#,##0.00") & "</b></p>" & _
        "</body></html>"
End Function

Actualización automática de datos

Sub ConfigurarActualizacion()
    ' Actualizar cada 30 minutos
    Application.OnTime Now + TimeValue("00:30:00"), "ActualizarDesdAPI"
End Sub

Sub ActualizarDesdeAPI()
    Call ObtenerDatosAPI
    
    ' Registrar
    Sheets("Log").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Now
    
    ' Reprogramar
    Call ConfigurarActualizacion
End Sub

Resumen

Excel puede conectarse a APIs REST, enviar emails automatizados y actualizar datos en tiempo real. VBA con XMLHTTP para APIs, Power Query para ETL web, y la integración con Outlook crean un ecosistema de automatización completo.

🔒

Ejercicio práctico disponible

Procesamiento de datos JSON

Desbloquear ejercicios
// Procesamiento de datos JSON
// Desbloquea Pro para acceder a este ejercicio
// y ganar +50 XP al completarlo

function ejemplo() {
    // Tu código aquí...
}

¿Te gustó esta lección?

Con Pro puedes marcar progreso, hacer ejercicios, tomar quizzes, ganar XP y obtener tu constancia.

Ver planes desde $9/mes