4 métodos efectivos para extraer tablas HTML a Excel (manuales y automatizados)

2025-08-20 09:00:21 zaki zou

Extraer tablas HTML a Excel

Descripción general

Extraer tablas HTML a Excel es un requisito común para analistas de datos, investigadores, desarrolladores y profesionales de negocios que trabajan frecuentemente con datos web estructurados. Las tablas HTML a menudo contienen información valiosa como informes financieros, catálogos de productos, resultados de investigación o estadísticas de rendimiento. Sin embargo, transferir esos datos a Excel en un formato limpio y utilizable puede ser complicado, especialmente cuando se trata de tablas complejas que incluyen celdas combinadas (rowspan, colspan), encabezados anidados o grandes conjuntos de datos.

Afortunadamente, existen múltiples enfoques para convertir tablas HTML en archivos de Excel. Estos métodos van desde acciones rápidas y manuales de copiar y pegar, adecuadas para tareas pequeñas, hasta scripts totalmente automatizados que utilizan VBA o Python para trabajos a gran escala o recurrentes.

En este artículo, exploraremos cuatro métodos efectivos para extraer tablas HTML a Excel:

  1. Copiar y pegar manualmente (método más simple)
  2. Función incorporada de Excel "Desde la Web"
  3. Macro de VBA (Automatización de Excel)
  4. Python (BeautifulSoup + Spire.XLS)

Finalmente, compararemos estos enfoques en una tabla de resumen para ayudarlo a elegir el mejor método según su caso de uso.

Copiar y pegar manualmente (Método más simple)

Para extracciones pequeñas y puntuales, la opción más sencilla es usar copiar y pegar directamente desde su navegador a Excel.

Copiar una tabla HTML

Pasos:

  1. Abra la página HTML en un navegador (por ejemplo, Chrome, Edge o Firefox).
  2. Resalte la tabla que desea extraer.
  3. Cópiela con Ctrl+C (o haga clic derecho → Copiar).
  4. Abra Excel y pegue con Ctrl+V.

Ventajas:

  • Extremadamente simple: no se requiere configuración ni codificación.
  • Funciona instantáneamente para tablas pequeñas и limpias.

Desventajas:

  • Proceso manual: tedioso e ineficiente para conjuntos de datos frecuentes o grandes.
  • No siempre conserva las celdas combinadas o el formato.
  • No puede manejar tablas dinámicas (renderizadas con JavaScript) de manera confiable.

Cuándo usarlo: Ideal para tablas pequeñas, recopilación de datos ad-hoc o pruebas rápidas.

Función incorporada de Excel "Desde la Web"

Excel incluye una potente herramienta "Obtener y transformar datos" (anteriormente Power Query) que permite a los usuarios extraer tablas directamente de una página web.

Función 'Desde la Web' de Excel

Pasos:

  1. Abra Excel.
  2. Vaya a DatosDesde la Web.
  3. Ingrese la URL de la página web que contiene la tabla.
  4. Excel mostrará las tablas detectadas; seleccione la que desee.
  5. Cargue los datos en su hoja de trabajo.

Ventajas:

  • Integración directa en Excel: no se requieren herramientas externas.
  • Funciona bien para tablas HTML estructuradas.
  • Admite la actualización: puede volver a extraer datos actualizados de la misma fuente.

Desventajas:

  • Soporte limitado para contenido dinámico o renderizado con JavaScript.
  • A veces no detecta tablas complejas.
  • Requiere acceso a Internet y una URL válida (no para archivos HTML locales a menos que se importen manualmente).

Cuándo usarlo: Ideal para analistas que extraen datos estructurados en vivo de sitios web que se actualizan regularmente.

Macro de VBA (Automatización de Excel)

Para los usuarios que extraen tablas HTML con frecuencia y desean más control, VBA (Visual Basic for Applications) ofrece una excelente solución. VBA le permite obtener tablas de una URL y procesar correctamente las celdas combinadas, algo que el simple copiar y pegar no puede manejar.

VBA para extraer tabla html a excel

Pasos:

  1. Inicie Microsoft Excel.
  2. Presione Alt + F11 para abrir el editor de VBA.
  3. Haga clic derecho en el explorador de proyectos → InsertarMódulo.
  4. Pegue el código VBA proporcionado.
  5. Cierre el editor de VBA.
  6. Presione Alt + F8, seleccione el nombre de la macro y haga clic en Ejecutar.

Código de muestra de VBA:

Sub ExtractHTMLTableWithProperMerging()
    Dim html As Object, tables As Object, table As Object, row As Object, cell As Object
    Dim ws As Worksheet
    Dim iRow As Long, iCol As Long, realCol As Long
    Dim url As String
    Dim colspan As Integer, rowspan As Integer
    Dim cellTracker() As Boolean ' Rastrear celdas ocupadas

    ' Establecer hoja de trabajo de destino
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.ClearContents
    ws.Cells.UnMerge ' Limpiar cualquier celda combinada existente

    ' Obtener la URL de entrada
    url = InputBox("Ingrese la URL de la página web:", "Extractor de tablas HTML")
    If url = "" Then Exit Sub

    ' Cargar HTML
    Set html = CreateObject("htmlfile")
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        html.body.innerHTML = .responseText
    End With

    ' Obtener la primera tabla (cambiar el índice si es necesario)
    Set tables = html.getElementsByTagName("table")
    If tables.Length = 0 Then
        MsgBox "No se encontraron tablas!", vbExclamation
        Exit Sub
    End If
    Set table = tables(0)

    ' Inicializar la matriz de seguimiento de celdas
    Dim maxRows As Long, maxCols As Long
    maxRows = table.Rows.Length
    maxCols = 0
    For Each row In table.Rows
        If row.Cells.Length > maxCols Then maxCols = row.Cells.Length
    Next
    ReDim cellTracker(1 To maxRows, 1 To maxCols)

    ' Procesar la tabla
    iRow = 1
    For Each row In table.Rows
        realCol = 1 ' Rastrear la posición real de la columna teniendo en cuenta los rowspans

        ' Encontrar la primera columna disponible en esta fila
        While realCol <= maxCols And cellTracker(iRow, realCol)
            realCol = realCol + 1
        Wend

        iCol = 1 ' Rastrear la posición lógica de la columna
        For Each cell In row.Cells
            ' Obtener atributos de combinación
            colspan = 1
            rowspan = 1
            On Error Resume Next ' En caso de que los atributos no existan
            colspan = cell.colspan
            rowspan = cell.rowspan
            On Error GoTo 0

            ' Omitir celdas ya ocupadas (desde rowspan anterior)
            While realCol <= maxCols And cellTracker(iRow, realCol)
                realCol = realCol + 1
            Wend

            If realCol > maxCols Then Exit For

            ' Escribir valor
            ws.Cells(iRow, realCol).Value = cell.innerText

            ' Marcar todas las celdas que serán ocupadas por esta celda
            Dim r As Long, c As Long
            For r = iRow To iRow + rowspan - 1
                For c = realCol To realCol + colspan - 1
                    If r <= maxRows And c <= maxCols Then
                        cellTracker(r, c) = True
                    End If
                Next c
            Next r

            ' Combinar celdas si es necesario
            If colspan > 1 Or rowspan > 1 Then
                With ws.Range(ws.Cells(iRow, realCol), ws.Cells(iRow + rowspan - 1, realCol + colspan - 1))
                    .Merge
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                End With
            End If

            realCol = realCol + colspan
            iCol = iCol + 1
        Next cell
        iRow = iRow + 1
    Next row

    ' Formato
    ws.UsedRange.Columns.AutoFit
    ws.UsedRange.Borders.Weight = xlThin
    MsgBox "¡Tabla extraída con la combinación correcta!", vbInformation
End Sub

Ventajas:

  • Se ejecuta completamente dentro de Excel, sin necesidad de herramientas externas.
  • Maneja tablas complejas con celdas combinadas.
  • Se puede personalizar para múltiples tablas o ejecución programada.

Desventajas:

  • La configuración requiere conocimientos de VBA.
  • No puede manejar datos renderizados con JavaScript sin pasos adicionales.
  • Solo funciona en el escritorio de Excel (no en Excel Online).

Cuándo usarlo: Perfecto para usuarios que extraen tablas similares regularmente y desean una solución de un solo clic.

Python (BeautifulSoup & Spire.XLS)

Para desarrolladores o usuarios avanzados, Python proporciona la solución más flexible, escalable y automatizada. Con bibliotecas como BeautifulSoup para analizar HTML y Spire.XLS for Python para la manipulación de Excel, puede obtener, limpiar y exportar tablas mediante programación con un control total.

Pasos:

  1. Instale Python (se recomienda 3.8+).
  2. Cree un nuevo proyecto en su IDE (por ejemplo, VS Code, PyCharm).
  3. Instale las dependencias:
pip install requests beautifulsoup4 spire.xls
  1. Copie y ejecute el siguiente script.

Código de Python:

import requests

from bs4 import BeautifulSoup
from spire.xls import Workbook, ExcelVersion

# Obtener la cadena HTML de la URL
response = requests.get("https://cdn.e-iceblue.com/resource/sample.html")
html = response.text

# Analizar HTML
soup = BeautifulSoup(html, "html.parser")
table = soup.find("table")  # Obtener la primera tabla

# Inicializar Excel
workbook = Workbook()
sheet = workbook.Worksheets[0]

# Rastrear celdas combinadas para omitirlas más tarde
skip_cells = set()

# Recorrer filas y celdas HTML
for row_idx, row in enumerate(table.find_all("tr")):
    col_idx = 1  # Las columnas de Excel comienzan en 1
    for cell in row.find_all(["th", "td"]):
        # Omitir celdas ya combinadas
        while (row_idx + 1, col_idx) in skip_cells:
            col_idx += 1

        # Obtener valores de colspan/rowspan (por defecto 1 si no están presentes)
        colspan = int(cell.get("colspan", 1))
        rowspan = int(cell.get("rowspan", 1))

        # Escribir el valor de la celda en Excel
        sheet.Range[row_idx + 1, col_idx].Text = cell.get_text(strip=True)

        # Combinar celdas si colspan/rowspan > 1
        if colspan > 1 or rowspan > 1:
            end_row = row_idx + rowspan
            end_col = col_idx + colspan - 1
            sheet.Range[row_idx + 1, col_idx, end_row, end_col].Merge()

            # Marcar las celdas combinadas para omitirlas
            for r in range(row_idx + 1, end_row + 1):
                for c in range(col_idx, end_col + 1):
                    if r != row_idx + 1 or c != col_idx:  # Omitir la celda principal
                        skip_cells.add((r, c))

        col_idx += colspan

# Autoajustar el ancho de las columnas en todo el rango utilizado
sheet.AllocatedRange.AutoFitColumns()

# Guardar en Excel
workbook.SaveToFile("TableToExcel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Ventajas:

  • Control total: puede analizar, limpiar y transformar datos.
  • Maneja correctamente las celdas combinadas.
  • Fácilmente escalable a múltiples tablas o sitios web.
  • Automatizable para tareas programadas o trabajos por lotes.

Desventajas:

  • Requiere instalación de Python y conocimientos básicos de programación.
  • Más configuración que las soluciones integradas de Excel.
  • Dependencias externas (BeautifulSoup, Spire.XLS).

Cuándo usarlo: Ideal para desarrolladores o usuarios avanzados que extraen tablas grandes o complejas con regularidad.

Salida:

Python extrae tablas HTML a Excel

Para mejorar el atractivo visual de la hoja de trabajo de Excel generada en Python, puede aplicar estilos a celdas u hojas de trabajo en Excel.

Tabla de resumen: Mejor método por caso de uso

Método Ideal para Ventajas Desventajas ¿Automatización?
Copiar y pegar manualmente Uso rápido y puntual Rápido, sin configuración Sin automatización, problemas de formato ❌No
Excel Desde la Web Datos estructurados en vivo Integrado, admite actualización Limitado para tablas dinámicas ❌No
Macro de VBA Tareas repetidas en Excel Automatiza la extracción, maneja combinaciones Requiere conocimientos de VBA ✅Sí
Python (BeautifulSoup + Spire.XLS) Desarrolladores, tablas grandes/complejas Control total, escalable, automatizable Requiere codificación y dependencias ✅Sí

Consideraciones finales

El método que elija depende en gran medida de su caso de uso:

  • Si solo necesita tomar una pequeña tabla ocasionalmente, copiar y pegar manualmente es lo más rápido.
  • Si desea extraer datos estructurados de una página web que se actualiza con frecuencia, Excel Desde la Web es conveniente.
  • Para los usuarios de negocios que trabajan en Excel a diario y desean automatización, una macro de VBA es ideal.
  • Para los desarrolladores que manejan múltiples conjuntos de datos o estructuras HTML complejas, Python con BeautifulSoup y Spire.XLS proporciona la mayor flexibilidad y escalabilidad.

Al combinar estos métodos con su flujo de trabajo, puede ahorrar horas de esfuerzo manual y garantizar una extracción de datos más limpia y confiable en Excel.

Véase también

Coupon Code Copied!

Christmas Sale

Celebrate the season with exclusive savings

Save 10% Sitewide

Use Code:

View Campaign Details