Inhaltsverzeichnis
Installation mit Pypi
pip install Spire.XLS
Verwandte Links

Überblick
Das Extrahieren von HTML-Tabellen in Excel ist eine häufige Anforderung für Datenanalysten, Forscher, Entwickler und Geschäftsleute, die häufig mit strukturierten Webdaten arbeiten. HTML-Tabellen enthalten oft wertvolle Informationen wie Finanzberichte, Produktkataloge, Forschungsergebnisse oder Leistungsstatistiken. Die Übertragung dieser Daten in ein sauberes und nutzbares Format in Excel kann jedoch knifflig sein – insbesondere bei komplexen Tabellen mit verbundenen Zellen (rowspan, colspan), verschachtelten Kopfzeilen oder großen Datenmengen.
Glücklicherweise gibt es mehrere Ansätze, um HTML-Tabellen in Excel-Dateien zu konvertieren. Diese Methoden reichen von schnellen, manuellen Kopier- und Einfügeaktionen, die für kleine Aufgaben geeignet sind, bis hin zu vollständig automatisierten Skripten mit VBA oder Python für große oder wiederkehrende Aufgaben.
In diesem Artikel werden wir vier effektive Methoden zur Extraktion von HTML-Tabellen nach Excel untersuchen:
- Manuelles Kopieren und Einfügen (einfachste Methode)
- Excel’s integrierte „Aus dem Web“-Funktion
- VBA-Makro (Excel-Automatisierung)
- Python (BeautifulSoup + Spire.XLS)
Schließlich vergleichen wir diese Ansätze in einer Zusammenfassungstabelle, um Ihnen bei der Auswahl der besten Methode für Ihren Anwendungsfall zu helfen.
Manuelles Kopieren und Einfügen (einfachste Methode)
Für kleine, einmalige Extraktionen ist die einfachste Option, direkt aus Ihrem Browser in Excel zu kopieren und einzufügen.

Schritte:
- Öffnen Sie die HTML-Seite in einem Browser (z. B. Chrome, Edge oder Firefox).
- Markieren Sie die Tabelle, die Sie extrahieren möchten.
- Kopieren Sie sie mit Strg+C (oder Rechtsklick → Kopieren).
- Öffnen Sie Excel und fügen Sie sie mit Strg+V ein.
Vorteile:
- Extrem einfach – keine Einrichtung oder Programmierung erforderlich.
- Funktioniert sofort für kleine, saubere Tabellen.
Nachteile:
- Manueller Prozess – mühsam und ineffizient bei häufigen oder großen Datenmengen.
- Behält nicht immer verbundene Zellen oder Formatierungen bei.
- Kann dynamische (JavaScript-gerenderte) Tabellen nicht zuverlässig handhaben.
Wann verwenden: Am besten geeignet für kleine Tabellen, Ad-hoc-Datenerfassung oder schnelle Tests.
Excel’s integrierte „Aus dem Web“-Funktion
Excel enthält ein leistungsstarkes „Daten abrufen und transformieren“-Tool (früher Power Query), mit dem Benutzer Tabellen direkt von einer Webseite abrufen können.

Schritte:
- Öffnen Sie Excel.
- Gehen Sie zu Daten → Aus dem Web.
- Geben Sie die URL der Webseite ein, die die Tabelle enthält.
- Excel zeigt die erkannten Tabellen an; wählen Sie die gewünschte aus.
- Laden Sie die Daten in Ihr Arbeitsblatt.
Vorteile:
- Direkte Integration in Excel – keine externen Tools erforderlich.
- Funktioniert gut für strukturierte HTML-Tabellen.
- Unterstützt die Aktualisierung – kann aktualisierte Daten aus derselben Quelle erneut abrufen.
Nachteile:
- Begrenzte Unterstützung für dynamische oder JavaScript-gerenderte Inhalte.
- Erkennt manchmal komplexe Tabellen nicht.
- Erfordert Internetzugang und eine gültige URL (nicht für lokale HTML-Dateien, es sei denn, sie werden manuell importiert).
Wann verwenden: Am besten für Analysten, die live strukturierte Daten von Websites abrufen, die regelmäßig aktualisiert werden.
VBA-Makro (Excel-Automatisierung)
Für Benutzer, die häufig HTML-Tabellen extrahieren und mehr Kontrolle wünschen, bietet VBA (Visual Basic for Applications) eine hervorragende Lösung. Mit VBA können Sie Tabellen von einer URL abrufen und verbundene Zellen korrekt verarbeiten, was mit einfachem Kopieren und Einfügen nicht möglich ist.

Schritte:
- Starten Sie Microsoft Excel.
- Drücken Sie Alt + F11, um den VBA-Editor zu öffnen.
- Klicken Sie mit der rechten Maustaste auf den Projektexplorer → Einfügen → Modul.
- Fügen Sie den bereitgestellten VBA-Code ein.
- Schließen Sie den VBA-Editor.
- Drücken Sie Alt + F8, wählen Sie den Makronamen aus und klicken Sie auf Ausführen.
Beispiel-VBA-Code:
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 ' Belegte Zellen verfolgen
' Zielarbeitsblatt festlegen
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Cells.ClearContents
ws.Cells.UnMerge ' Alle vorhandenen verbundenen Zellen löschen
' URL-Eingabe abrufen
url = InputBox("Geben Sie die Webseiten-URL ein:", "HTML-Tabellen-Extraktor")
If url = "" Then Exit Sub
' HTML laden
Set html = CreateObject("htmlfile")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
html.body.innerHTML = .responseText
End With
' Erste Tabelle abrufen (Index bei Bedarf ändern)
Set tables = html.getElementsByTagName("table")
If tables.Length = 0 Then
MsgBox "Keine Tabellen gefunden!", vbExclamation
Exit Sub
End If
Set table = tables(0)
' Zell-Tracker-Array initialisieren
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)
' Tabelle verarbeiten
iRow = 1
For Each row In table.Rows
realCol = 1 ' Tatsächliche Spaltenposition unter Berücksichtigung von Rowspans verfolgen
' Erste verfügbare Spalte in dieser Zeile finden
While realCol <= maxCols And cellTracker(iRow, realCol)
realCol = realCol + 1
Wend
iCol = 1 ' Logische Spaltenposition verfolgen
For Each cell In row.Cells
' Zusammenführungsattribute abrufen
colspan = 1
rowspan = 1
On Error Resume Next ' Falls Attribute nicht existieren
colspan = cell.colspan
rowspan = cell.rowspan
On Error GoTo 0
' Bereits belegte Zellen überspringen (durch Rowspan von oben)
While realCol <= maxCols And cellTracker(iRow, realCol)
realCol = realCol + 1
Wend
If realCol > maxCols Then Exit For
' Wert schreiben
ws.Cells(iRow, realCol).Value = cell.innerText
' Alle Zellen markieren, die von dieser Zelle belegt werden
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
' Zellen bei Bedarf verbinden
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
' Formatierung
ws.UsedRange.Columns.AutoFit
ws.UsedRange.Borders.Weight = xlThin
MsgBox "Tabelle mit korrekter Zusammenführung extrahiert!", vbInformation
End Sub
Vorteile:
- Läuft vollständig in Excel – keine externen Tools erforderlich.
- Behandelt komplexe Tabellen mit verbundenen Zellen.
- Kann für mehrere Tabellen oder geplante Ausführungen angepasst werden.
Nachteile:
- Einrichtung erfordert Kenntnisse in VBA.
- Kann JavaScript-gerenderte Daten nicht ohne zusätzliche Schritte verarbeiten.
- Funktioniert nur in der Desktop-Version von Excel (nicht in Excel Online).
Wann verwenden: Perfekt für Benutzer, die regelmäßig ähnliche Tabellen extrahieren und eine Ein-Klick-Lösung wünschen.
Python (BeautifulSoup & Spire.XLS)
Für Entwickler oder Power-User bietet Python die flexibelste, skalierbarste und automatisierteste Lösung. Mit Bibliotheken wie BeautifulSoup zum Parsen von HTML und Spire.XLS for Python für die Excel-Bearbeitung können Sie Tabellen programmgesteuert abrufen, bereinigen und mit voller Kontrolle exportieren.
Schritte:
- Installieren Sie Python (3.8+ empfohlen).
- Erstellen Sie ein neues Projekt in Ihrer IDE (z. B. VS Code, PyCharm).
- Installieren Sie die Abhängigkeiten:
pip install requests beautifulsoup4 spire.xls
- Kopieren und führen Sie das folgende Skript aus.
Python-Code:
import requests
from bs4 import BeautifulSoup
from spire.xls import Workbook, ExcelVersion
# HTML-String von der URL abrufen
response = requests.get("https://cdn.e-iceblue.com/resource/sample.html")
html = response.text
# HTML parsen
soup = BeautifulSoup(html, "html.parser")
table = soup.find("table") # Die erste Tabelle abrufen
# Excel initialisieren
workbook = Workbook()
sheet = workbook.Worksheets[0]
# Verbundene Zellen verfolgen, um sie später zu überspringen
skip_cells = set()
# Durch HTML-Zeilen und -Zellen iterieren
for row_idx, row in enumerate(table.find_all("tr")):
col_idx = 1 # Excel-Spalten beginnen bei 1
for cell in row.find_all(["th", "td"]):
# Bereits verbundene Zellen überspringen
while (row_idx + 1, col_idx) in skip_cells:
col_idx += 1
# Colspan/Rowspan-Werte abrufen (Standardwert 1, falls nicht vorhanden)
colspan = int(cell.get("colspan", 1))
rowspan = int(cell.get("rowspan", 1))
# Zellenwert in Excel schreiben
sheet.Range[row_idx + 1, col_idx].Text = cell.get_text(strip=True)
# Zellen verbinden, wenn 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()
# Verbundene Zellen zum Überspringen markieren
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: # Die Hauptzelle überspringen
skip_cells.add((r, c))
col_idx += colspan
# Spaltenbreite im gesamten genutzten Bereich automatisch anpassen
sheet.AllocatedRange.AutoFitColumns()
# In Excel speichern
workbook.SaveToFile("TableToExcel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
Vorteile:
- Volle Kontrolle – kann Daten parsen, bereinigen und transformieren.
- Behandelt verbundene Zellen korrekt.
- Leicht skalierbar für mehrere Tabellen oder Websites.
- Automatisierbar für geplante Aufgaben oder Stapelverarbeitungen.
Nachteile:
- Erfordert Python-Installation und grundlegende Programmierkenntnisse.
- Mehr Einrichtungsaufwand als bei integrierten Excel-Lösungen.
- Externe Abhängigkeiten (BeautifulSoup, Spire.XLS).
Wann verwenden: Am besten für Entwickler oder fortgeschrittene Benutzer, die regelmäßig große oder komplexe Tabellen extrahieren.
Ausgabe:

Um die visuelle Attraktivität des generierten Excel-Arbeitsblatts in Python zu verbessern, können Sie Stile auf Zellen oder Arbeitsblätter in Excel anwenden.
Zusammenfassungstabelle: Beste Methode nach Anwendungsfall
| Methode | Am besten geeignet für | Vorteile | Nachteile | Automatisierung? |
|---|---|---|---|---|
| Manuelles Kopieren & Einfügen | Schnelle, einmalige Verwendung | Schnell, keine Einrichtung | Keine Automatisierung, Formatierungsprobleme | ❌Nein |
| Excel aus dem Web | Live strukturierte Daten | Integriert, unterstützt Aktualisierung | Begrenzt für dynamische Tabellen | ❌Nein |
| VBA-Makro | Wiederholte Aufgaben in Excel | Automatisiert die Extraktion, behandelt Zusammenführungen | Erfordert VBA-Kenntnisse | ✅Ja |
| Python (BeautifulSoup + Spire.XLS) | Entwickler, große/komplexe Tabellen | Volle Kontrolle, skalierbar, automatisierbar | Erfordert Programmierung & Abhängigkeiten | ✅Ja |
Abschließende Gedanken
Die Methode, die Sie wählen, hängt stark von Ihrem Anwendungsfall ab:
- Wenn Sie nur gelegentlich eine kleine Tabelle benötigen, ist das manuelle Kopieren und Einfügen am schnellsten.
- Wenn Sie strukturierte Daten von einer Webseite abrufen möchten, die häufig aktualisiert wird, ist Excel aus dem Web praktisch.
- Für Geschäftsanwender, die täglich in Excel arbeiten und eine Automatisierung wünschen, ist ein VBA-Makro ideal.
- Für Entwickler, die mehrere Datensätze oder komplexe HTML-Strukturen verarbeiten, bietet Python mit BeautifulSoup und Spire.XLS die größte Flexibilität und Skalierbarkeit.
Durch die Kombination dieser Methoden mit Ihrem Arbeitsablauf können Sie Stunden manueller Arbeit sparen und eine sauberere, zuverlässigere Datenextraktion nach Excel gewährleisten.