Genera le mail personalizzate con la macro ONLYOFFICE

21 luglio 2023By Elena

Rivolgersi correttamente alle persone è fondamentale nella comunicazione in quanto mostra rispetto, inclusività e professionalità. In questo articolo, ti mostriamo come creare una macro in ONLYOFFICE Docs che utilizza l’API Genderize.io per generare saluti personalizzati adeguati.

Generate personalized gender-based greetings with ONLYOFFICE macro

 

Informazioni su Genderize

Genderize.io è un servizio API che prevede il genere associato a determinati nomi. Fornisce agli sviluppatori un modo semplice per integrare la funzionalità di identificazione del genere nelle loro applicazioni o script. Inviando un nome come parametro all’API Genderize, gli utenti ricevono una risposta contenente il sesso previsto e informazioni aggiuntive come il livello di confidenza della previsione. Genderize.io semplifica il processo di determinazione del genere associato a un determinato nome.

Costruzione della macro

Iniziamo inizializzando la variabile oWorksheet, che contiene un riferimento al foglio attivo. L’accesso al foglio attivo ci consente di manipolare i dati all’interno del foglio di calcolo:

const oWorksheet = Api.GetActiveSheet()

Successivamente, inizializziamo la variabile ROW su 2, che rappresenta la riga iniziale dei dati nella colonna A. Questa variabile tiene traccia della riga corrente in fase di elaborazione:

 let ROW = 2

Per elaborare ogni riga, abbiamo la funzione checkRow. Il suo obiettivo principale è scorrere ogni riga e gestire la logica di elaborazione. All’interno della funzione checkRow, recuperiamo il valore del nome della riga corrente utilizzando l’istruzione oWorksheet.GetRange(A${ROW}).GetText(). Questo recupera il valore di testo della cella nella colonna A per la riga corrente

function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
}

Se il nome recuperato è vuoto, indica la fine dei dati. In questo caso, chiamiamo la funzione reload, che è responsabile del ricaricamento del foglio. Se invece il nome recuperato non è vuoto, procediamo a chiamare la funzione makeRequest, passando il nome come parametro:

   function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
        if (name === '') {
            return reload()
        }
        makeRequest(name)
    }

Lo scopo della funzione makeRequest è inviare una richiesta AJAX all’API Genderize:

function makeRequest(name) {
        $.ajax({
            url: `https://api.genderize.io?name=${name}`,
            dataType: 'json',
        }).done(successFunction)
    }

Una volta ricevuta la risposta dall’API Genderize, viene richiamata successFunction. All’interno della successFunction, controlliamo innanzitutto se la probabilità della determinazione del genere è maggiore di 0,9. Se lo è, assegniamo il titolo appropriato in base al valore di genere dalla risposta API:

function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
        }
    }

Per generare il saluto personalizzato, utilizziamo il metodo oWorksheet.GetRange(B${ROW}).SetValue(…). Questo ci permette di impostare il valore nella colonna B della riga corrente. Dopo aver elaborato correttamente la riga corrente, incrementiamo la variabile ROW e quindi chiamiamo nuovamente la funzione checkRow. Questo approccio ricorsivo assicura che continuiamo a scorrere ogni riga successiva fino a raggiungere la fine dei dati:

function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
            oWorksheet.GetRange(`B${ROW}`).SetValue(`Dear ${title} ${data.name}!`)
        }
        ROW++
        checkRow()
    }

Una volta rilevata la fine dei dati, invochiamo la funzione reload. Lo scopo di questa funzione è ricaricare il foglio, attivando un ricalcolo di tutte le formule. Per ottenere ciò, utilizziamo setInterval per eseguire periodicamente la funzione Api.asc_calculate(Asc.c_oAscCalculateType.All), che ricalcola tutte le formule nel foglio:

    function reload() {
        let reload = setInterval(function(){
            Api.asc_calculate(Asc.c_oAscCalculateType.All);
        })    
    }
})()

L’intero codice della macro è il seguente:

(function()
{
    const oWorksheet = Api.GetActiveSheet()
    let ROW = 2
    checkRow()
    
    // Recursively request each name until 'A' column value is empty
    //
    // checkName -> makeRequest -> successFunction (ROW + 1) ->
    // checkName -> ... -> checkName -> name is empty -> reload
    function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
        if (name === '') {
            return reload()
        }
        makeRequest(name)
    }
    
    // Request
    function makeRequest(name) {
        $.ajax({
            url: `https://api.genderize.io?name=${name}`,
            dataType: 'json',
        }).done(successFunction)
    }
    // Response
    function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
            oWorksheet.GetRange(`B${ROW}`).SetValue(`Dear ${title} ${data.name}!`)
        }
        ROW++
        checkRow()
    }
    
    // Sheet has to be reloaded on changes
    function reload() {
        let reload = setInterval(function(){
            Api.asc_calculate(Asc.c_oAscCalculateType.All);
        })    
    }
})()

Eseguiamo la nostra macro e vediamo come funziona!

Ci auguriamo che questa macro possa essere utile per semplificare la routine di invio e consentirti di concentrarti su altri aspetti importanti del tuo flusso di lavoro di comunicazione. Utilizzando le macro, hai l’opportunità di sbloccare tutto il potenziale di ONLYOFFICE e migliorare la tua produttività.

Ti invitiamo inoltre a continuare a esplorare le possibilità delle macro in ONLYOFFICE. Con una comprensione più approfondita dello scripting, puoi creare le tue macro per automatizzare le attività ripetitive, migliorare la produttività e personalizzare i tuoi documenti in base alle tue esigenze specifiche. Se hai domande o idee da condividere, sentiti libero di lasciare commenti o conttatarci.