Se lo scraping con Excel / VBA è la via «desktop», dove uno script porta i dati direttamente nella cartella di lavoro, Google Sheets offre qualcosa che Excel non ha di serie: formule di importazione integrate. In molti casi non serve scrivere neanche una riga di codice: basta inserire una funzione in una cella e il foglio caricherà da solo i dati dal sito e li terrà aggiornati.
E quando le formule non bastano, arriva in soccorso Google Apps Script, l’equivalente in cloud di VBA, scritto in JavaScript. Sa eseguire richieste HTTP, fare il parsing di JSON e lavorare su pianificazione, e tutto questo gira sui server di Google, non sul tuo computer.
In questo articolo esaminiamo entrambi i livelli: prima le formule per un’estrazione rapida senza codice, poi Apps Script per i compiti complessi.
In cosa Google Sheets differisce da Excel / VBA
Il confronto aiuta a scegliere lo strumento in base al compito:
| Criterio | Excel / VBA | Google Sheets |
|---|---|---|
| Estrazione con una formula, senza codice | Solo Power Query | IMPORTXML, IMPORTHTML ecc. |
| Linguaggio di scripting | VBA | Apps Script (JavaScript) |
| Dove viene eseguito | Sul tuo PC | Nel cloud di Google |
| Esecuzione pianificata | Utilità di pianificazione di Windows + macro | Trigger di serie |
| Lavoro collaborativo | Condividendo il file | In tempo reale, con un link |
| Dati finanziari pronti | No | GOOGLEFINANCE integrata |
| Limiti sulle richieste | Praticamente nessuno | Quote di Google |
La conclusione principale: per un’estrazione leggera o media Google Sheets è spesso più rapido, perché metà dei compiti si risolve con una sola formula. Negli scenari pesanti e non standard la logica è la stessa di VBA: cambia solo la sintassi.
Livello 1. Estrazione con le formule
IMPORTHTML — tabelle ed elenchi
La funzione più semplice. Estrae una tabella o un elenco per intero in base al numero:
=IMPORTHTML("https://example.com/page"; "table"; 1)Argomenti: l’URL, il tipo di elemento ("table" o "list") e il suo numero d’ordine nella pagina. Se la pagina contiene più tabelle, prova gli indici (1, 2, 3...) finché non trovi quella giusta. Il risultato si «espande» automaticamente sulle celle adiacenti.
IMPORTXML — estrazione mirata con XPath
Il più potente tra gli strumenti a formula. Riceve un URL e una query XPath, cioè l’espressione che punta a un elemento specifico del markup:
=IMPORTXML("https://example.com"; "//h1")
=IMPORTXML("https://example.com"; "//div[@class='price']")
=IMPORTXML("https://example.com"; "//span[@id='total']/text()")Alcuni modelli XPath utili:
| Compito | XPath |
|---|---|
| Tutti i titoli h2 | //h2 |
| Elemento per classe | //div[@class='value'] |
| Elemento per id | //*[@id='price'] |
| Un attributo (per esempio un link) | //a/@href |
| Il testo dentro un tag | //span[@class='cur']/text() |
| L’n-esimo elemento di un elenco | (//li)[3] |
Il modo più semplice per ricavare l’XPath è guardarlo nel browser: apri gli strumenti per sviluppatori (F12), individua l’elemento e fai clic destro → Copy → Copy XPath.
IMPORTDATA — CSV e TSV
Se la fonte fornisce un file CSV o TSV già pronto, lo importiamo direttamente:
=IMPORTDATA("https://example.com/data.csv")La funzione distribuisce da sola i valori nelle colonne. Ideale per dataset aperti ed esportazioni.
IMPORTFEED — RSS e Atom
Per i feed di notizie e i blog:
=IMPORTFEED("https://example.com/rss")GOOGLEFINANCE — finanza senza alcuno scraping
Merita una menzione a parte GOOGLEFINANCE, la fonte integrata di dati di borsa e valute. È il caso in cui non serve fare scraping di nulla: Google ha già raccolto tutto per te.
=GOOGLEFINANCE("NASDAQ:AAPL"; "price")
=GOOGLEFINANCE("CURRENCY:USDEUR")
=GOOGLEFINANCE("NASDAQ:GOOGL"; "price"; DATE(2024;1;1); DATE(2024;12;31); "DAILY")Il primo esempio è il prezzo attuale di un’azione; il secondo, il cambio di una coppia di valute; il terzo, le quotazioni storiche di un periodo. Se il tuo compito rientra in ciò che copre GOOGLEFINANCE, questa è la strada più affidabile: niente blocchi né markup rotto. Lo scraping di siti terzi serve solo dove questi dati non esistono o dove ti occorre una fonte non standard.
Livello 2. Google Apps Script
Le formule vanno bene, ma hanno un tetto: non sanno autenticarsi, aggirare protezioni complesse, elaborare il JSON annidato di una API né eseguire una logica con ramificazioni. Qui entra in gioco Apps Script.
Apri il foglio di calcolo → Estensioni → Apps Script e ti ritroverai nell’editor di codice in cloud. È l’equivalente diretto dell’editor VBA dell’articolo su Excel, solo in JavaScript.
Richiesta HTTP: UrlFetchApp
La richiesta di base a una pagina o a una API:
function getResponse(url) {
const options = {
method: 'get',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
},
muteHttpExceptions: true // non fallire sui codici 4xx/5xx
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
}
return 'ERROR: ' + response.getResponseCode();
}Confrontala con la funzione GetResponse dell’articolo su VBA: la logica è identica — aprire la richiesta, impostare lo User-Agent, verificare il codice di risposta. Cambia solo l’involucro: al posto di MSXML2.XMLHTTP qui c’è UrlFetchApp.
Parsing di JSON: nativo
Il grande vantaggio di Apps Script su VBA: il JSON si analizza con un’unica istruzione integrata, senza funzioni scritte a mano né moduli di terze parti.
function getPrice(symbol) {
const url = 'https://example-api.com/quote?symbol=' + symbol;
const json = getResponse(url);
const data = JSON.parse(json); // una riga al posto di ExtractJsonValue
return data.price;
}In VBA, per ottenere lo stesso risultato, bisognava analizzare la stringa a mano o collegare VBA-JSON. Qui basta JSON.parse e lavori subito con l’oggetto.
Scrivere il risultato sul foglio
Scriviamo i dati nelle celle tramite l’oggetto del foglio:
function writeQuotes() {
const tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA'];
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Intestazioni
sheet.getRange(1, 1, 1, 3).setValues([['Ticker', 'Prezzo', 'Ora']]);
const rows = [];
const now = new Date();
tickers.forEach(function (ticker) {
const price = getPrice(ticker);
rows.push([ticker, price, now]);
Utilities.sleep(1000); // pausa di 1 s tra le richieste
});
// Scarichiamo tutto in una sola chiamata: è più veloce
sheet.getRange(2, 1, rows.length, 3).setValues(rows);
}Il principio «accumulare in un array e scaricare tutto in una sola chiamata» è qui importante per la velocità quanto in VBA: setValues sull’intero intervallo è molte volte più veloce della scrittura cella per cella dentro un ciclo.
Parsing di HTML in Apps Script
Con l’analisi dell’HTML integrata le cose si complicano: Apps Script non ha un parser del DOM completo come l’HTMLDocument di VBA. In pratica si usano le espressioni regolari oppure l’estrazione del testo tra marcatori:
function extractByRegex(text, pattern) {
const re = new RegExp(pattern);
const match = text.match(re);
return match ? match[1] : '';
}
// Esempio: estrarre il prezzo da "<span class='price'>152.34</span>"
// const price = extractByRegex(html, "class='price'>([\\d.]+)<");Per i markup complessi a volte si ricorre a librerie di terze parti (per esempio Cheerio tramite un servizio wrapper), ma nella maggior parte dei casi bastano le espressioni regolari o la formula XPath IMPORTXML.
Una funzione personalizzata per la cella
Apps Script permette di creare una formula propria, richiamabile direttamente dal foglio come una funzione integrata:
/**
* Restituisce il prezzo di un ticker.
* @customfunction
*/
function MYPRICE(symbol) {
return getPrice(symbol);
}Dopo il salvataggio, nella cella funzionerà =MYPRICE("AAPL"). VBA ha una possibilità simile con le UDF, ma qui la funzione è subito disponibile per chiunque abbia accesso al foglio.
Aggiornamento automatico pianificato
In VBA, per le esecuzioni periodiche serve l’Utilità di pianificazione esterna di Windows. In Google Sheets la pianificazione è integrata: sono i trigger.
Nell’editor di Apps Script: icona dell’orologio (Trigger) → Aggiungi trigger → scegli la funzione, l’evento «basato sul tempo» e l’intervallo (ogni ora, ogni giorno ecc.).
Oppure via codice:
function setupTrigger() {
ScriptApp.newTrigger('writeQuotes')
.timeBased()
.everyHours(1)
.create();
}Lo script verrà eseguito sui server di Google anche a computer spento e foglio chiuso. Per uno scraper in VBA questo è irraggiungibile senza una macchina sempre accesa.
Limiti e insidie
L’approccio in cloud ha il suo prezzo: le quote di Google.
- Le formule
IMPORT...si aggiornano periodicamente (circa una volta all’ora) e vengono messe in cache. Non vanno bene se ti servono dati aggiornati al secondo. UrlFetchAppha un limite giornaliero di chiamate (dipende dal tipo di account: di solito migliaia di richieste al giorno per quello gratuito).- Il tempo di esecuzione dello script è limitato (nell’ordine dei 6 minuti per esecuzione con gli account gratuiti). Un’estrazione lunga andrà divisa in più parti.
#N/AeLoading...nelle formule spesso significano che la fonte non ha restituito i dati, ha cambiato il markup o ha bloccato la richiesta proveniente dai server di Google.
Queste restrizioni sono il motivo principale per cui lo scraping pesante e frequente a volte torna sul binario «desktop» dell’articolo su Excel / VBA, dove di fatto non ci sono limiti sulle richieste.
Cosa scegliere: Sheets o Excel / VBA
Un promemoria rapido:
- Rapido e senza codice, dati nel foglio, lavoro di squadra → Google Sheets e formule.
- Cambi valutari e quotazioni di borsa → prima
GOOGLEFINANCE, e solo se non basta, lo scraping. - Aggiornamento automatico senza PC acceso → Google Sheets con i trigger.
- Grandi volumi, richieste frequenti, nessun limite, parsing di HTML complesso → Excel / VBA.
- Ambiente aziendale senza cloud, dati locali → Excel / VBA.
Conclusione
Google Sheets copre due livelli di estrazione dati con un solo strumento. Le formule IMPORTHTML, IMPORTXML, IMPORTDATA e GOOGLEFINANCE risolvono i compiti tipici senza una sola riga di codice, mentre Apps Script, con UrlFetchApp e il JSON.parse nativo, si fa carico di tutta la parte complessa — e lo fa in cloud, su pianificazione, senza il tuo computer.
Rispetto all’approccio dell’articolo su Excel / VBA la logica resta la stessa — richiesta, parsing, scrittura, gestione degli errori —, ma la sintassi è più semplice, il JSON si analizza «di fabbrica» e l’automazione non richiede un’utilità di pianificazione esterna. Il prezzo della comodità sono le quote di Google: quando ci sbatti contro, ha senso tornare alla soluzione desktop in VBA. I due strumenti non sono concorrenti, si completano a vicenda: scegli in base al compito concreto.