Genera saludos personalizados basados en el género con la macro de ONLYOFFICE

19 julio 2023By Sergey

Saludar a la gente correctamente es crucial en la comunicación, ya que muestra respeto, inclusividad y profesionalidad. En este artículo, te mostramos cómo crear una macro en ONLYOFFICE Docs que utiliza la API de Genderize.io para generar saludos personalizados adecuados.

Genera saludos personalizados basados en el género con la macro de ONLYOFFICE

Acerca de Genderize

Genderize.io es un servicio de API que predice el género asociado a los nombres asignados. Proporciona a los desarrolladores una forma sencilla de integrar la funcionalidad de identificación de género en sus aplicaciones o scripts. Al enviar un nombre como parámetro a la API de Genderize, los usuarios reciben una respuesta que contiene el género predicho e información adicional como el nivel de confianza de la predicción. Genderize.io simplifica el proceso de determinar el género asociado a un nombre dado.

Creación de la macro

Para empezar, inicializamos la variable oWorksheet que contiene una referencia a la hoja activa. Tener acceso a la hoja activa nos permite manipular los datos dentro de la hoja de cálculo:

const oWorksheet = Api.GetActiveSheet()

A continuación, inicializamos la variable ROW a 2 que representa la fila inicial de los datos en la columna A. Esta variable mantiene un registro de la fila actual que se está procesando:

 let ROW = 2

Para procesar cada fila, tenemos la función checkRow. Su principal objetivo es iterar a través de cada fila y manejar la lógica de procesamiento. Dentro de la función checkRow, recuperamos el valor del nombre de la fila actual utilizando la sentencia oWorksheet.GetRange(A${ROW}).GetText(). Esto recupera el valor del texto de la celda en la columna A para la fila actual:

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

Si el nombre recuperado está vacío, indica el final de los datos. En este caso, llamamos a la función reload que se encarga de recargar la hoja. Por otro lado, si el nombre recuperado no está vacío, procedemos a llamar a la función makeRequest, pasando el nombre como parámetro:

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

El propósito de la función makeRequest es enviar una solicitud AJAX a la API de Genderize:

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

Una vez recibida la respuesta de la API de Genderize, se invoca la función successFunction. Dentro de la successFunction, comprobamos en primer lugar si la probabilidad de la determinación del género es superior a 0,9. En caso afirmativo, asignamos el título apropiado basándonos en el valor del género de la respuesta de la API. Si lo es, asignamos el título apropiado basándonos en el valor de género de la respuesta de la API:

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

Para generar el saludo personalizado, utilizamos el método oWorksheet.GetRange(B${ROW}).SetValue(…). Esto nos permite establecer el valor en la columna B de la fila actual. Después de procesar correctamente la fila actual, incrementamos la variable ROW y volvemos a llamar a la función checkRow. Este enfoque recursivo asegura que continuemos iterando a través de cada fila subsiguiente hasta que alcancemos el final de los datos:

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 vez detectado el final de los datos, invocamos la función de recarga. El objetivo de esta función es recargar la hoja, provocando un recálculo de todas las fórmulas. Para ello, utilizamos setInterval para ejecutar periódicamente la función Api.asc_calculate(Asc.c_oAscCalculateType.All) que recalcula todas las fórmulas de la hoja:

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

El código completo de la macro es el siguiente:

(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);
        })    
    }
})()

¡Vamos a ejecutar nuestra macro para ver cómo funciona!

Esperamos que esta macro sea útil para simplificar la rutina de correo y te permita centrarte en otros aspectos importantes de tu flujo de trabajo. Utilizando macros, tienes la oportunidad de desbloquear todo el potencial de ONLYOFFICE y mejorar tu productividad.

También te animamos a seguir explorando las posibilidades de las macros en ONLYOFFICE. Con un conocimiento más profundo de las secuencias de comandos, puedes crear tus propias macros para automatizar tareas repetitivas, mejorar la productividad y personalizar tus documentos para adaptarlos a tus necesidades específicas. Si tienes alguna pregunta o idea para compartir, no dudes en dejar comentarios o ponerte en contacto con nosotros. Estamos abiertos a tus ideas y dispuestos a colaborar contigo. Te deseamos mucha suerte.