Gere saudações personalizadas baseadas em gênero com a macro ONLYOFFICE

19 julho 2023Por Klaibson

Abordar as pessoas corretamente é crucial na comunicação, pois mostra respeito, inclusão e profissionalismo. Neste artigo, mostramos como criar uma macro em ONLYOFFICE Docs que utiliza a API Genderize.io para gerar saudações personalizadas adequadas.

Gere saudações personalizadas baseadas em gênero com a macro ONLYOFFICE

Sobre Genderize

Genderize.io é um serviço de API que prevê o gênero associado a determinados nomes. Ele fornece aos desenvolvedores uma maneira fácil de integrar a funcionalidade de identificação de gênero em seus aplicativos ou scripts. Ao enviar um nome como parâmetro para a API Genderize, os usuários recebem uma resposta contendo o gênero previsto e informações adicionais, como o nível de confiança da previsão. Genderize.io simplifica o processo de determinação do gênero associado a um determinado nome.

Construindo a macro

Começamos inicializando a variável oWorksheet, que contém uma referência à planilha ativa. Ter acesso à planilha ativa nos permite manipular os dados dentro da planilha:

const oWorksheet = Api.GetActiveSheet()

Em seguida, inicializamos a variável ROW com 2, representando a linha inicial dos dados na coluna A. Essa variável acompanha a linha atual que está sendo processada:

 let ROW = 2

Para processar cada linha, temos a função checkRow. Seu principal objetivo é percorrer cada linha e manipular a lógica de processamento. Dentro da função checkRow, recuperamos o valor do nome da linha atual usando a instrução oWorksheet.GetRange(A${ROW}).GetText(). Isso recupera o valor de texto da célula na coluna A para a linha atual:

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

Se o nome recuperado estiver vazio, indica o fim dos dados. Neste caso, chamamos a função reload, que é responsável por recarregar a planilha. Por outro lado, se o nome recuperado não estiver vazio, passamos a chamar a função makeRequest, passando o nome como parâmetro:

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

O objetivo da função makeRequest é enviar uma solicitação AJAX para a API Genderize:

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

Depois que a resposta é recebida da API Genderize, o successFunction é invocado. Dentro do successFunction, primeiro verificamos se a probabilidade da determinação do gênero é maior que 0,9. Se for, atribuímos o título apropriado com base no valor de gênero da resposta da API:

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

Para gerar a saudação personalizada, utilizamos o método oWorksheet.GetRange(B${ROW}).SetValue(…). Isso nos permite definir o valor na coluna B da linha atual. Depois de processar com sucesso a linha atual, incrementamos a variável ROW e então chamamos a função checkRow novamente. Essa abordagem recursiva garante que continuemos iterando em cada linha subseqüente até chegarmos ao final dos dados:

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

Uma vez detectado o fim dos dados, invocamos a função reload. O objetivo desta função é recarregar a planilha, acionando um recálculo de todas as fórmulas. Para isso, usamos setInterval para executar periodicamente a função Api.asc_calculate(Asc.c_oAscCalculateType.All), que recalcula todas as fórmulas da planilha:

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

Todo o código da macro é o seguinte:

(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 rodar nossa macro e ver como funciona!

Esperamos que esta macro seja útil para simplificar a rotina de correspondência e permitir que você se concentre em outros aspectos importantes do seu fluxo de trabalho de comunicação. Ao utilizar macros, você tem a oportunidade de liberar todo o potencial do ONLYOFFICE e aumentar sua produtividade.

Também encorajamos você a continuar explorando as possibilidades de macros no ONLYOFFICE. Com uma compreensão mais profunda de scripts, você pode criar suas próprias macros para automatizar tarefas repetitivas, aumentar a produtividade e personalizar seus documentos para atender às suas necessidades específicas. Se você tiver alguma dúvida ou ideia para compartilhar, sinta-se à vontade para deixar comentários ou fale conosco. Estamos abertos para ouvir suas ideias e estamos ansiosos para colaborar com você. Boa sorte em seus esforços exploratórios!

Crie sua conta gratuita no ONLYOFFICE

Visualize, edite e colabore em documentos, planilhas, slides, formulários e arquivos PDF online.