Usa la macro ONLYOFFICE per ottenere e inserire informazioni dettagliate sull’indirizzo
Molto spesso, lavorare con dati non strutturati inseriti in foglio Excel potrebbe ostacolare i calcoli. Esiste un modo per inserire i dati in Excel in automatico? In questo articolo ti guideremo attraverso la creazione di una macro che recupera informazioni dettagliate sull’indirizzo in base ai dati dell’indirizzo e li inserisce in un foglio di calcolo.
Informazioni sull’API di Geoapify Geocoding
Geoapify Geocoding API è un potente strumento che consente agli sviluppatori di integrare funzionalità di geocoding nelle loro applicazioni e servizi. La geocodifica è il processo di conversione di indirizzi o nomi di luoghi in coordinate geografiche.
Con l’API Geoapify Geocoding, puoi recuperare dati dettagliati sugli indirizzi, inclusi nomi di strade, nomi di città, codici postali, regioni amministrative e altro. E abbiamo in programma di sfruttare questa funzionalità e integrarla nella nostra macro.
Concetto di macro
- Legge l’indirizzo dalla cella specificata.
- Invia una richiesta all’API Geoapify Geocoding per recuperare i dettagli dell’indirizzo.
- Elabora la risposta e crea l’oggetto Dettagli indirizzo.
- Incolla i dettagli dell’indirizzo nel foglio di lavoro.
- Legge l’indirizzo successivo e ripeti il processo.
Costruire la macro
Innanzitutto, segniamo le variabili:
const API_KEY = 'your_API_key'
const ENDPOINT = 'https://api.geoapify.com/v1/geocode/search'
const oWorksheet = Api.GetActiveSheet()
let row = 2
La variabile API_KEY contiene la chiave API Geoapify. La variabile ENDPOINT memorizza l’endpoint API per il servizio di geocodifica. La variabile oWorksheet ha come target il foglio di calcolo attivo. E la variabile row consente di selezionare la riga desiderata.
Quindi aggiungiamo la funzione makeRequest che è responsabile dell’invio di una richiesta all’API:
makeRequest(oWorksheet.GetRange(`A${row}`).GetText())
// REQUEST
function makeRequest(ADDRESS) {
if (ADDRESS === '') return
$.ajax({
url: `${ENDPOINT}?text=${addressToRequest(ADDRESS)}&apiKey=${API_KEY}`,
dataType: 'json',
}).done(successFunction)
}
Utilizza la funzione $.ajax per effettuare una richiesta HTTP GET all’endpoint, passando l’indirizzo come parametro.
Quindi la funzione addressToRequest trasforma l’indirizzo in un formato compatibile con l’URL:
function addressToRequest (address) {
return address.replaceAll(' ', '%20').replaceAll(',', '%2C')
}
Se la richiesta API ha esito positivo, viene chiamata successFunction. Riceve la risposta dall’API come parametro:
function successFunction(response) {
const data = createAddressDetailsObject(response)
pasteAddressDetails(data)
reload()
}
Quindi la funzione createAddressDetailsObject elabora la risposta. Se l’indirizzo non viene trovato, viene restituito un messaggio di errore. In caso contrario, la funzione crea l’oggetto Dettagli indirizzo:
// Create Address Details object if address is found
function createAddressDetailsObject(response) {
if (response.features.length === 0) {
return { error: 'Address not found' }
}
let data = {
country: response.features[0].properties.country,
county: response.features[0].properties.county,
city: response.features[0].properties.city,
post_code: response.features[0].properties.postcode,
full_address_line: response.features[0].properties.formatted
}
data = checkMissingData(data)
return data
}
Per controllare i dati ricevuti, utilizziamo la funzione checkMissingData. Sostituisce i campi mancanti con un trattino:
function checkMissingData(data) {
Object.keys(data).forEach(key => {
if(data[key] === undefined) data[key] = '-'
})
return data
}
Quindi incolliamo i dati con la funzione pasteAddressDetails. La funzione utilizza l’oggetto oWorksheet per indirizzare il foglio attivo e selezionare l’intervallo appropriato:
function pasteAddressDetails(data) {
const oRange = oWorksheet.GetRange(`B${row}:F${row}`)
Se è presente un messaggio di errore, viene incollato nell’intervallo:
if (data.error !== undefined) {
oRange.SetValue([[data.error]])
}
In caso contrario, i dettagli dell’indirizzo vengono popolati nell’intervallo utilizzando la funzione SetValue:
else {
oRange.SetValue([
[data.country],
[data.county],
[data.city],
[data.post_code],
[data.full_address_line]
])
}
La funzione quindi incrementa la riga e chiama in modo ricorsivo makeRequest per elaborare l’indirizzo successivo:
// Execute recursively until "Address" value is empty
row++
makeRequest(oWorksheet.GetRange(`A${row}:A${row}`).GetText())
}
Successivamente, invochiamo la funzione di ricarica. Attiva un ricalcolo del foglio di calcolo dopo l’elaborazione di ciascun indirizzo:
function reload() {
let reload = setInterval(function(){
Api.asc_calculate(Asc.c_oAscCalculateType.All);
})
}
L’intero codice della macro è il seguente:
(function()
{
const API_KEY = 'your_API_key'
const ENDPOINT = 'https://api.geoapify.com/v1/geocode/search'
const oWorksheet = Api.GetActiveSheet()
let row = 2
makeRequest(oWorksheet.GetRange(`A${row}`).GetText())
// REQUEST
function makeRequest(ADDRESS) {
if (ADDRESS === '') return
$.ajax({
url: `${ENDPOINT}?text=${addressToRequest(ADDRESS)}&apiKey=${API_KEY}`,
dataType: 'json',
}).done(successFunction)
}
// London, United Kingdom -> London%2C%20United%20Kingdom
function addressToRequest (address) {
return address.replaceAll(' ', '%20').replaceAll(',', '%2C')
}
// RESPONSE
function successFunction(response) {
const data = createAddressDetailsObject(response)
pasteAddressDetails(data)
reload()
}
// Create Address Details object if address is found
function createAddressDetailsObject(response) {
if (response.features.length === 0) {
return { error: 'Address not found' }
}
let data = {
country: response.features[0].properties.country,
county: response.features[0].properties.county,
city: response.features[0].properties.city,
post_code: response.features[0].properties.postcode,
full_address_line: response.features[0].properties.formatted
}
data = checkMissingData(data)
return data
}
// Replace missing fields with '-'
function checkMissingData(data) {
Object.keys(data).forEach(key => {
if(data[key] === undefined) data[key] = '-'
})
return data
}
// PASTE
function pasteAddressDetails(data) {
const oRange = oWorksheet.GetRange(`B${row}:F${row}`)
if (data.error !== undefined) {
oRange.SetValue([[data.error]])
} else {
oRange.SetValue([
[data.country],
[data.county],
[data.city],
[data.post_code],
[data.full_address_line]
])
}
// Execute recursively until "Address" value is empty
row++
makeRequest(oWorksheet.GetRange(`A${row}:A${row}`).GetText())
}
// Sheet has to be reloaded on changes
function reload() {
let reload = setInterval(function(){
Api.asc_calculate(Asc.c_oAscCalculateType.All);
})
}
})();
Eseguiamo la macro e vediamo come funziona!
Ora, con questa macro, puoi automatizzare la tua routine e recuperare facilmente informazioni dettagliate sull’indirizzo. Ci auguriamo che ti farà risparmiare tempo e ridurrà al minimo l’inserimento manuale dei dati. Questo è solo uno dei tanti esempi di cosa puoi fare implementando i nostri metodi API.
Ti invitiamo gentilmente a sperimentare e creare le tue macro. Non esitate a fare domande o condividere le vostre idee con noi. Siamo aperti alla collaborazione. Buona fortuna!
Crea il tuo account ONLYOFFICE gratuito
Visualizza, modifica e collabora su documenti, fogli, diapositive, moduli e file PDF online.