4 métodos eficazes para extrair tabelas HTML para Excel (manual e automatizado)

2025-08-20 09:06:02 zaki zou

Extrair Tabelas HTML para o Excel

Visão Geral

Extrair tabelas HTML para o Excel é um requisito comum para analistas de dados, pesquisadores, desenvolvedores e profissionais de negócios que trabalham frequentemente com dados estruturados da web. As tabelas HTML geralmente contêm informações valiosas, como relatórios financeiros, catálogos de produtos, resultados de pesquisas ou estatísticas de desempenho. No entanto, transferir esses dados para o Excel em um formato limpo e utilizável pode ser complicado, especialmente ao lidar com tabelas complexas que incluem células mescladas (rowspan, colspan), cabeçalhos aninhados ou grandes conjuntos de dados.

Felizmente, existem várias abordagens para converter tabelas HTML em arquivos do Excel. Esses métodos variam de ações rápidas e manuais de copiar e colar, adequadas para pequenas tarefas, a scripts totalmente automatizados usando VBA ou Python para trabalhos em grande escala ou recorrentes.

Neste artigo, exploraremos quatro métodos eficazes para extrair tabelas HTML para o Excel:

  1. Copiar e Colar Manual (método mais simples)
  2. Recurso Embutido do Excel "Da Web"
  3. Macro VBA (Automação do Excel)
  4. Python (BeautifulSoup + Spire.XLS)

Finalmente, compararemos essas abordagens em uma tabela resumo para ajudá-lo a escolher o melhor método com base no seu caso de uso.

Copiar e Colar Manual (Método mais simples)

Para extrações pequenas e pontuais, a opção mais simples é usar o copiar e colar diretamente do seu navegador para o Excel.

Copiar uma tabela HTML

Passos:

  1. Abra a página HTML em um navegador (por exemplo, Chrome, Edge ou Firefox).
  2. Destaque a tabela que deseja extrair.
  3. Copie-a com Ctrl+C (ou clique com o botão direito → Copiar).
  4. Abra o Excel e cole com Ctrl+V.

Prós:

  • Extremamente simples — não é necessária configuração ou codificação.
  • Funciona instantaneamente para tabelas pequenas e limpas.

Contras:

  • Processo manual — tedioso e ineficiente para conjuntos de dados frequentes ou grandes.
  • Nem sempre preserva células mescladas ou formatação.
  • Não consegue lidar de forma confiável com tabelas dinâmicas (renderizadas por JavaScript).

Quando usar: Melhor para tabelas pequenas, coleta de dados ad-hoc ou testes rápidos.

Recurso Embutido do Excel "Da Web"

O Excel inclui uma poderosa ferramenta “Obter e Transformar Dados” (anteriormente Power Query) que permite aos usuários extrair tabelas diretamente de uma página da web.

Recurso 'Da Web' do Excel

Passos:

  1. Abra o Excel.
  2. Vá para DadosDa Web.
  3. Insira a URL da página da web que contém a tabela.
  4. O Excel exibirá as tabelas detectadas; selecione a que você deseja.
  5. Carregue os dados em sua planilha.

Prós:

  • Integração direta no Excel — não são necessárias ferramentas externas.
  • Funciona bem para tabelas HTML estruturadas.
  • Suporta atualização — pode extrair novamente dados atualizados da mesma fonte.

Contras:

  • Suporte limitado para conteúdo dinâmico ou renderizado por JavaScript.
  • Às vezes, falha em detectar tabelas complexas.
  • Requer acesso à Internet e URL válida (não para arquivos HTML locais, a menos que importados manualmente).

Quando usar: Melhor para analistas que extraem dados estruturados ao vivo de sites que são atualizados regularmente.

Macro VBA (Automação do Excel)

Para usuários que extraem tabelas HTML com frequência e desejam mais controle, o VBA (Visual Basic for Applications) oferece uma excelente solução. O VBA permite buscar tabelas de uma URL e processar corretamente as células mescladas, algo que o simples copiar e colar não consegue fazer.

VBA para extrair tabela html para o excel

Passos:

  1. Inicie o Microsoft Excel.
  2. Pressione Alt + F11 para abrir o editor do VBA.
  3. Clique com o botão direito no explorador de projetos → InserirMódulo.
  4. Cole o código VBA fornecido.
  5. Feche o editor do VBA.
  6. Pressione Alt + F8, selecione o nome da macro e clique em Executar.

Exemplo de Código 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 células ocupadas

    ' Definir planilha de destino
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.ClearContents
    ws.Cells.UnMerge ' Limpar quaisquer células mescladas existentes

    ' Obter URL de entrada
    url = InputBox("Digite a URL da página da web:", "Extrator de Tabela HTML")
    If url = "" Then Exit Sub

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

    ' Obter a primeira tabela (alterar o índice, se necessário)
    Set tables = html.getElementsByTagName("table")
    If tables.Length = 0 Then
        MsgBox "Nenhuma tabela encontrada!", vbExclamation
        Exit Sub
    End If
    Set table = tables(0)

    ' Inicializar a matriz de rastreamento de células
    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)

    ' Processar a tabela
    iRow = 1
    For Each row In table.Rows
        realCol = 1 ' Rastrear a posição real da coluna considerando os rowspans

        ' Encontrar a primeira coluna disponível nesta linha
        While realCol <= maxCols And cellTracker(iRow, realCol)
            realCol = realCol + 1
        Wend

        iCol = 1 ' Rastrear a posição lógica da coluna
        For Each cell In row.Cells
            ' Obter atributos de mesclagem
            colspan = 1
            rowspan = 1
            On Error Resume Next ' Caso os atributos não existam
            colspan = cell.colspan
            rowspan = cell.rowspan
            On Error GoTo 0

            ' Pular células já ocupadas (de rowspan acima)
            While realCol <= maxCols And cellTracker(iRow, realCol)
                realCol = realCol + 1
            Wend

            If realCol > maxCols Then Exit For

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

            ' Marcar todas as células que serão ocupadas por esta célula
            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

            ' Mesclar células, se necessário
            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

    ' Formatação
    ws.UsedRange.Columns.AutoFit
    ws.UsedRange.Borders.Weight = xlThin
    MsgBox "Tabela extraída com a mesclagem correta!", vbInformation
End Sub

Prós:

  • Executa inteiramente dentro do Excel — não são necessárias ferramentas externas.
  • Lida com tabelas complexas com células mescladas.
  • Pode ser personalizado para várias tabelas ou execução agendada.

Contras:

  • A configuração requer conhecimento de VBA.
  • Não consegue lidar com dados renderizados por JavaScript sem etapas extras.
  • Funciona apenas no Excel para desktop (não no Excel Online).

Quando usar: Perfeito para usuários que extraem regularmente tabelas semelhantes e desejam uma solução de um clique.

Python (BeautifulSoup & Spire.XLS)

Para desenvolvedores ou usuários avançados, o Python oferece a solução mais flexível, escalável e automatizada. Com bibliotecas como BeautifulSoup para análise de HTML e Spire.XLS for Python para manipulação do Excel, você pode buscar, limpar e exportar tabelas programaticamente com controle total.

Passos:

  1. Instale o Python (3.8+ recomendado).
  2. Crie um novo projeto em seu IDE (por exemplo, VS Code, PyCharm).
  3. Instale as dependências:
pip install requests beautifulsoup4 spire.xls
  1. Copie e execute o seguinte script.

Código Python:

import requests

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

# Obter a string HTML da url
response = requests.get("https://cdn.e-iceblue.com/resource/sample.html")
html = response.text

# Analisar o HTML
soup = BeautifulSoup(html, "html.parser")
table = soup.find("table")  # Obter a primeira tabela

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

# Rastrear células mescladas para pulá-las mais tarde
skip_cells = set()

# Iterar sobre as linhas e células HTML
for row_idx, row in enumerate(table.find_all("tr")):
    col_idx = 1  # As colunas do Excel começam em 1
    for cell in row.find_all(["th", "td"]):
        # Pular células já mescladas
        while (row_idx + 1, col_idx) in skip_cells:
            col_idx += 1

        # Obter valores de colspan/rowspan (padrão para 1 se não estiverem presentes)
        colspan = int(cell.get("colspan", 1))
        rowspan = int(cell.get("rowspan", 1))

        # Escrever o valor da célula no Excel
        sheet.Range[row_idx + 1, col_idx].Text = cell.get_text(strip=True)

        # Mesclar células se 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 células mescladas para pular
            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:  # Pular a célula principal
                        skip_cells.add((r, c))

        col_idx += colspan

# Ajustar automaticamente a largura da coluna em todo o intervalo usado
sheet.AllocatedRange.AutoFitColumns()

# Salvar no Excel
workbook.SaveToFile("TableToExcel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Prós:

  • Controle total — pode analisar, limpar e transformar dados.
  • Lida corretamente com células mescladas.
  • Facilmente escalável para várias tabelas ou sites.
  • Automatizável para tarefas agendadas ou trabalhos em lote.

Contras:

  • Requer instalação do Python e conhecimentos básicos de programação.
  • Mais configuração do que as soluções integradas do Excel.
  • Dependências externas (BeautifulSoup, Spire.XLS).

Quando usar: Melhor para desenvolvedores ou usuários avançados que extraem regularmente tabelas grandes ou complexas.

Saída:

Python Extrai Tabelas HTML para o Excel

Para melhorar o apelo visual da planilha do Excel gerada em Python, você pode aplicar estilos a células ou planilhas no Excel.

Tabela Resumo: Melhor Método por Caso de Uso

Método Melhor Para Prós Contras Automação?
Copiar e Colar Manual Uso rápido e único Rápido, sem configuração Sem automação, problemas de formatação ❌Não
Excel Da Web Dados estruturados ao vivo Integrado, suporta atualização Limitado para tabelas dinâmicas ❌Não
Macro VBA Tarefas repetidas no Excel Automatiza a extração, lida com mesclagens Requer conhecimento de VBA ✅Sim
Python (BeautifulSoup + Spire.XLS) Desenvolvedores, tabelas grandes/complexas Controle total, escalável, automatizável Requer codificação e dependências ✅Sim

Considerações Finais

O método que você escolhe depende muito do seu caso de uso:

  • Se você só precisa pegar uma pequena tabela ocasionalmente, o copiar e colar manual é o mais rápido.
  • Se você deseja extrair dados estruturados de uma página da web que é atualizada com frequência, o recurso Da Web do Excel é conveniente.
  • Para usuários de negócios que trabalham no Excel diariamente e desejam automação, uma macro VBA é ideal.
  • Para desenvolvedores que lidam com vários conjuntos de dados ou estruturas HTML complexas, o Python com BeautifulSoup e Spire.XLS oferece a maior flexibilidade e escalabilidade.

Ao combinar esses métodos com seu fluxo de trabalho, você pode economizar horas de esforço manual e garantir uma extração de dados mais limpa e confiável para o Excel.

Veja Também