Salta al contenuto principale

Microsoft Excel - Power Query - Accesso sito web cambio valute

Scenario

Vogliamo recuperare il cambio delle principali valute rispetto all'euro sul sito https://www.bancaditalia.it 

I cambi sono memorizzati nella pagina https://www.bancaditalia.it/compiti/operazioni-cambi/cambio/cambi_rif_aaammgg 

L'idea sarà quindi indicare la data da cui recuperare i cambi

Soluzione

Inseriamo la data nella cella B1 nel formato 'aaaammgg. È importare inserire l'apice per indicare ad Excel che stiamo inserendo un testo. Ad esempio vogliamo prendere i cambi di riferimento del 16 ottobre 2024 inseriremo  '20241016.

Microsoft Excel - Power Query - Accesso sito web cambio valute

Assegnano a questa cella il nome data_estrazione

Microsoft Excel - Power Query - Accesso sito web cambio valute

Accediamo ora al sito dei cambi con già una data impostata: ad esempio

https://www.bancaditalia.it/compiti/operazioni-cambi/cambio/cambi_rif_20241016/ 

Andiamo si Dati > Recupera dati > Da altre origini > Da Web

Microsoft Excel - Power Query - Accesso sito web cambio valute

Inseriamo il sito

Microsoft Excel - Power Query - Accesso sito web cambio valute

A questo punto vengono rilevate le varie tabelle presenti nella pagina web

La prima tabella è quella che ci serve Tabella dei cambi

Microsoft Excel - Power Query - Accesso sito web cambio valute

Confermiamo con Trasforma dati.

Microsoft Excel - Power Query - Accesso sito web cambio valute

Poiché la tabella non ha intestazioni, diamo dei nomi alle colonne: Valuta e Cambio. 

Per eliminare la riga del Rublo Russo che non ha quotazione, possiamo usare i filtri sulla seconda colonna. 

Il risultato è il seguente

Microsoft Excel - Power Query - Accesso sito web cambio valute

A questo punto possiamo tipizzare la seconda colonna come valuta

Microsoft Excel - Power Query - Accesso sito web cambio valute

Salviamo la query con Chiudi e Carica > Chiudi e carica in

Microsoft Excel - Power Query - Accesso sito web cambio valute

Questo ci da la possibilità di salvare il risultato nello stesso foglio dove abbiamo impostato la data

Faremo quindi click sulla cella A3

Microsoft Excel - Power Query - Accesso sito web cambio valute

Otteniamo il risultato che però non utilizza la data impostata nella cella B1

Microsoft Excel - Power Query - Accesso sito web cambio valute

Lettura della data dalla cella B1

Modifichiamo la query facendo doppio click sulla Tabella dei cambi 

Occorre fare una modifica utilizzando il linguaggio M. Per fare questo andiamo in Visualizza > Editor avanzato.

Microsoft Excel - Power Query - Accesso sito web cambio valute

Andiamo a modificare la seconda riga che contiene un riferimento fisso

Microsoft Excel - Power Query - Accesso sito web cambio valute

Il codice diventa il seguente

Microsoft Excel - Power Query - Accesso sito web cambio valute

In pratica inseriamo una riga in cui andiamo a recuperare la data dalla cella B1a cui abbiamo dato il nome data_estrazione

DataRif = Excel.CurrentWorkbook(){[Name="data_estrazione"]}[Content][Column1]{0},

Ora la variabile DataRif contiene la data. La utilizziamo nella seconda riga per costruire l'URL del sito nella variabile URL

URL = "https://www.bancaditalia.it/compiti/operazioni-cambi/cambio/cambi_rif_" & DataRif,

Il questo modo la riga di accesso al sito diventa

Origine = Web.BrowserContents(URL),


Il Codice completo

let
   DataRif = Excel.CurrentWorkbook(){[Name="data_estrazione"]}[Content][Column1]{0},
   URL = "https://www.bancaditalia.it/compiti/operazioni-cambi/cambio/cambi_rif_" & DataRif,
   Origine = Web.BrowserContents(URL),
   #"Tabella estratta da HTML" = Html.Table(Origine, {{"Column1", "TABLE[id='cambi'] > * > TR > :nth-child(1)"}, {"Column2", "TABLE[id='cambi'] > * > TR > :nth-child(2)"}}, [RowSelector="TABLE[id='cambi'] > * > TR"]),
   #"Rinominate colonne" = Table.RenameColumns(#"Tabella estratta da HTML",{{"Column1", "Valuta"}, {"Column2", "Cambio"}}),
   #"Filtrate righe" = Table.SelectRows(#"Rinominate colonne", each ([Cambio] <> "-")),
   #"Filtrate righe1" = Table.SelectRows(#"Filtrate righe", each [Valuta] <> null and [Valuta] <> ""),
   #"Ordinate righe" = Table.Sort(#"Filtrate righe1",{{"Valuta", Order.Ascending}}),
   #"Modificato tipo" = Table.TransformColumnTypes(#"Ordinate righe",{{"Cambio", Currency.Type}})
in
   #"Modificato tipo"

 

Allegato