4 metodi efficaci per estrarre tabelle HTML in Excel (manuale e automatizzato)

2025-08-20 09:07:42 zaki zou

Estrarre tabelle HTML in Excel

Panoramica

L'estrazione di tabelle HTML in Excel è un requisito comune per analisti di dati, ricercatori, sviluppatori e professionisti aziendali che lavorano frequentemente con dati web strutturati. Le tabelle HTML contengono spesso informazioni preziose come rapporti finanziari, cataloghi di prodotti, risultati di ricerche o statistiche sulle prestazioni. Tuttavia, trasferire tali dati in Excel in un formato pulito e utilizzabile può essere complicato, specialmente quando si ha a che fare con tabelle complesse che includono celle unite (rowspan, colspan), intestazioni nidificate o grandi set di dati.

Fortunatamente, esistono diversi approcci per convertire le tabelle HTML in file Excel. Questi metodi vanno da rapide azioni manuali di copia-incolla, adatte a piccoli compiti, a script completamente automatizzati che utilizzano VBA o Python per lavori su larga scala o ricorrenti.

In questo articolo, esploreremo quattro metodi efficaci per estrarre tabelle HTML in Excel:

  1. Copia-Incolla manuale (metodo più semplice)
  2. Funzionalità integrata di Excel "Da Web"
  3. Macro VBA (Automazione di Excel)
  4. Python (BeautifulSoup + Spire.XLS)

Infine, confronteremo questi approcci in una tabella riassuntiva per aiutarti a scegliere il metodo migliore in base al tuo caso d'uso.

Copia-Incolla manuale (Metodo più semplice)

Per piccole estrazioni una tantum, l'opzione più semplice è utilizzare il copia e incolla direttamente dal browser in Excel.

Copia una tabella HTML

Passaggi:

  1. Apri la pagina HTML in un browser (es. Chrome, Edge o Firefox).
  2. Evidenzia la tabella che desideri estrarre.
  3. Copiala con Ctrl+C (o clic destro → Copia).
  4. Apri Excel e incolla con Ctrl+V.

Vantaggi:

  • Estremamente semplice — non è richiesta alcuna configurazione o codifica.
  • Funziona istantaneamente per tabelle piccole e pulite.

Svantaggi:

  • Processo manuale — noioso e inefficiente per set di dati frequenti o di grandi dimensioni.
  • Non sempre conserva le celle unite o la formattazione.
  • Non è in grado di gestire in modo affidabile tabelle dinamiche (renderizzate con JavaScript).

Quando usarlo: Ideale per piccole tabelle, raccolta di dati ad-hoc o test rapidi.

Funzionalità integrata di Excel "Da Web"

Excel include un potente strumento "Recupera e trasforma dati" (precedentemente Power Query) che consente agli utenti di estrarre tabelle direttamente da una pagina web.

Funzionalità 'Da Web' di Excel

Passaggi:

  1. Apri Excel.
  2. Vai su DatiDa Web.
  3. Inserisci l'URL della pagina web contenente la tabella.
  4. Excel visualizzerà le tabelle rilevate; seleziona quella che desideri.
  5. Carica i dati nel tuo foglio di lavoro.

Vantaggi:

  • Integrazione diretta in Excel — non sono necessari strumenti esterni.
  • Funziona bene per tabelle HTML strutturate.
  • Supporta l'aggiornamento — può recuperare nuovamente i dati aggiornati dalla stessa fonte.

Svantaggi:

  • Supporto limitato per contenuti dinamici o renderizzati con JavaScript.
  • A volte non riesce a rilevare tabelle complesse.
  • Richiede l'accesso a Internet e un URL valido (non per file HTML locali a meno che non vengano importati manualmente).

Quando usarlo: Ideale per gli analisti che estraggono dati strutturati in tempo reale da siti web che vengono aggiornati regolarmente.

Macro VBA (Automazione di Excel)

Per gli utenti che estraggono frequentemente tabelle HTML e desiderano un maggiore controllo, VBA (Visual Basic for Applications) offre un'eccellente soluzione. VBA consente di recuperare tabelle da un URL e di elaborare correttamente le celle unite, cosa che il semplice copia-incolla non può fare.

VBA per estrarre una tabella html in excel

Passaggi:

  1. Avvia Microsoft Excel.
  2. Premi Alt + F11 per aprire l'editor VBA.
  3. Fai clic con il pulsante destro del mouse sull'esploratore del progetto → InserisciModulo.
  4. Incolla il codice VBA fornito.
  5. Chiudi l'editor VBA.
  6. Premi Alt + F8, seleziona il nome della macro e fai clic su Esegui.

Codice VBA di esempio:

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 ' Tieni traccia delle celle occupate

    ' Imposta il foglio di lavoro di destinazione
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.ClearContents
    ws.Cells.UnMerge ' Rimuovi eventuali celle unite esistenti

    ' Ottieni l'URL di input
    url = InputBox("Inserisci l'URL della pagina web:", "Estrattore di tabelle HTML")
    If url = "" Then Exit Sub

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

    ' Ottieni la prima tabella (modifica l'indice se necessario)
    Set tables = html.getElementsByTagName("table")
    If tables.Length = 0 Then
        MsgBox "Nessuna tabella trovata!", vbExclamation
        Exit Sub
    End If
    Set table = tables(0)

    ' Inizializza la matrice di tracciamento delle celle
    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)

    ' Elabora la tabella
    iRow = 1
    For Each row In table.Rows
        realCol = 1 ' Tieni traccia della posizione effettiva della colonna tenendo conto dei rowspan

        ' Trova la prima colonna disponibile in questa riga
        While realCol <= maxCols And cellTracker(iRow, realCol)
            realCol = realCol + 1
        Wend

        iCol = 1 ' Tieni traccia della posizione logica della colonna
        For Each cell In row.Cells
            ' Ottieni gli attributi di unione
            colspan = 1
            rowspan = 1
            On Error Resume Next ' Nel caso in cui gli attributi non esistano
            colspan = cell.colspan
            rowspan = cell.rowspan
            On Error GoTo 0

            ' Salta le celle già occupate (da rowspan sopra)
            While realCol <= maxCols And cellTracker(iRow, realCol)
                realCol = realCol + 1
            Wend

            If realCol > maxCols Then Exit For

            ' Scrivi il valore
            ws.Cells(iRow, realCol).Value = cell.innerText

            ' Contrassegna tutte le celle che saranno occupate da questa cella
            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

            ' Unisci le celle se necessario
            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

    ' Formattazione
    ws.UsedRange.Columns.AutoFit
    ws.UsedRange.Borders.Weight = xlThin
    MsgBox "Tabella estratta con unione corretta!", vbInformation
End Sub

Vantaggi:

  • Funziona interamente all'interno di Excel — non sono necessari strumenti esterni.
  • Gestisce tabelle complesse con celle unite.
  • Può essere personalizzato per più tabelle o per l'esecuzione pianificata.

Svantaggi:

  • La configurazione richiede conoscenze di VBA.
  • Non può gestire dati renderizzati con JavaScript senza passaggi aggiuntivi.
  • Funziona solo in Excel desktop (non in Excel Online).

Quando usarlo: Perfetto per gli utenti che estraggono regolarmente tabelle simili e desiderano una soluzione con un solo clic.

Python (BeautifulSoup & Spire.XLS)

Per sviluppatori o utenti esperti, Python offre la soluzione più flessibile, scalabile e automatizzata. Con librerie come BeautifulSoup per l'analisi di HTML e Spire.XLS for Python per la manipolazione di Excel, è possibile recuperare, pulire ed esportare tabelle a livello di codice con un controllo totale.

Passaggi:

  1. Installa Python (consigliato 3.8+).
  2. Crea un nuovo progetto nel tuo IDE (es. VS Code, PyCharm).
  3. Installa le dipendenze:
pip install requests beautifulsoup4 spire.xls
  1. Copia ed esegui il seguente script.

Codice Python:

import requests

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

# Ottieni la stringa HTML dall'URL
response = requests.get("https://cdn.e-iceblue.com/resource/sample.html")
html = response.text

# Analizza l'HTML
soup = BeautifulSoup(html, "html.parser")
table = soup.find("table")  # Ottieni la prima tabella

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

# Tieni traccia delle celle unite per saltarle in seguito
skip_cells = set()

# Itera attraverso le righe e le celle HTML
for row_idx, row in enumerate(table.find_all("tr")):
    col_idx = 1  # Le colonne di Excel iniziano da 1
    for cell in row.find_all(["th", "td"]):
        # Salta le celle già unite
        while (row_idx + 1, col_idx) in skip_cells:
            col_idx += 1

        # Ottieni i valori di colspan/rowspan (predefinito 1 se non presenti)
        colspan = int(cell.get("colspan", 1))
        rowspan = int(cell.get("rowspan", 1))

        # Scrivi il valore della cella in Excel
        sheet.Range[row_idx + 1, col_idx].Text = cell.get_text(strip=True)

        # Unisci le celle 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()

            # Contrassegna le celle unite da saltare
            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:  # Salta la cella principale
                        skip_cells.add((r, c))

        col_idx += colspan

# Adatta automaticamente la larghezza delle colonne nell'intervallo utilizzato
sheet.AllocatedRange.AutoFitColumns()

# Salva in Excel
workbook.SaveToFile("TableToExcel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Vantaggi:

  • Controllo completo — può analizzare, pulire e trasformare i dati.
  • Gestisce correttamente le celle unite.
  • Facilmente scalabile per più tabelle o siti web.
  • Automatizzabile per attività pianificate o lavori in batch.

Svantaggi:

  • Richiede l'installazione di Python e conoscenze di base di programmazione.
  • Maggiore configurazione rispetto alle soluzioni integrate di Excel.
  • Dipendenze esterne (BeautifulSoup, Spire.XLS).

Quando usarlo: Ideale per sviluppatori o utenti avanzati che estraggono regolarmente tabelle grandi o complesse.

Output:

Python estrae tabelle HTML in Excel

Per migliorare l'aspetto visivo del foglio di lavoro di Excel generato in Python, è possibile applicare stili a celle o fogli di lavoro in Excel.

Tabella riassuntiva: Metodo migliore per caso d'uso

Metodo Ideale per Vantaggi Svantaggi Automazione?
Copia-Incolla manuale Uso rapido e una tantum Veloce, nessuna configurazione Nessuna automazione, problemi di formattazione ❌No
Excel Da Web Dati strutturati in tempo reale Integrato, supporta l'aggiornamento Limitato per tabelle dinamiche ❌No
Macro VBA Attività ripetute in Excel Automatizza l'estrazione, gestisce le unioni Richiede conoscenze di VBA ✅Sì
Python (BeautifulSoup + Spire.XLS) Sviluppatori, tabelle grandi/complesse Controllo totale, scalabile, automatizzabile Richiede programmazione e dipendenze ✅Sì

Considerazioni finali

Il metodo che scegli dipende in gran parte dal tuo caso d'uso:

  • Se hai solo bisogno di prendere una piccola tabella occasionalmente, il copia-incolla manuale è il più veloce.
  • Se vuoi estrarre dati strutturati da una pagina web che si aggiorna frequentemente, la funzione Da Web di Excel è comoda.
  • Per gli utenti aziendali che lavorano quotidianamente in Excel e desiderano l'automazione, una macro VBA è l'ideale.
  • Per gli sviluppatori che gestiscono più set di dati o strutture HTML complesse, Python con BeautifulSoup e Spire.XLS offre la massima flessibilità e scalabilità.

Combinando questi metodi con il tuo flusso di lavoro, puoi risparmiare ore di lavoro manuale e garantire un'estrazione di dati più pulita e affidabile in Excel.

Vedi anche