Índice
Instalar com Pypi
pip install Spire.XLS
Links Relacionados

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:
- Copiar e Colar Manual (método mais simples)
- Recurso Embutido do Excel "Da Web"
- Macro VBA (Automação do Excel)
- 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.

Passos:
- Abra a página HTML em um navegador (por exemplo, Chrome, Edge ou Firefox).
- Destaque a tabela que deseja extrair.
- Copie-a com Ctrl+C (ou clique com o botão direito → Copiar).
- 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.

Passos:
- Abra o Excel.
- Vá para Dados → Da Web.
- Insira a URL da página da web que contém a tabela.
- O Excel exibirá as tabelas detectadas; selecione a que você deseja.
- 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.

Passos:
- Inicie o Microsoft Excel.
- Pressione Alt + F11 para abrir o editor do VBA.
- Clique com o botão direito no explorador de projetos → Inserir → Módulo.
- Cole o código VBA fornecido.
- Feche o editor do VBA.
- 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:
- Instale o Python (3.8+ recomendado).
- Crie um novo projeto em seu IDE (por exemplo, VS Code, PyCharm).
- Instale as dependências:
pip install requests beautifulsoup4 spire.xls
- 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:

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.