Encontre logotipos de empresas com a macro ONLYOFFICE

30 agosto 2023By Klaibson

Dados os muitos logotipos que existem, descobrir referências de logotipos pode ser um pouco complicado hoje em dia, podendo levar à confusão. Ainda assim, com macros ONLYOFFICE, você pode automatizar esse processo. Nesta postagem do blog mostraremos como criar uma macro que pode recuperar simultaneamente vários logotipos de uma API externa e inseri-los em sua planilha.

Encontre logotipos de empresas com a macro ONLYOFFICE

Accessando a API

Neste tutorial, utilizaremos o Logo API oferecido pela API Ninjas, uma plataforma online que fornece uma variedade de recursos e insights sobre APIs. Esta plataforma também oferece uma coleção de APIs gratuitas que os desenvolvedores podem incluir em seus projetos. Especificamente, a Logo API permite acesso a imagens de logotipos para uma ampla variedade de empresas.

Construindo a macro

Primeiro, direcionamos a planilha ativa:

// Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();

Então obtemos a seleção no documento. Os valores das células nesta seleção serão usados na solicitação da API:

var selectedRange = Api.GetSelection()

Depois disso adicionamos uma lógica que definiria títulos para os dados que serão inseridos no documento. Começamos criando um array que contém os nomes dos campos (“name”, “ticker”, “image”) e as letras das colunas:

  // Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };

Ao mapear colunas e valores, percorremos cada nome de campo no objetovaluesToInsert. Para cada campo, buscamos a célula correspondente e verificamos se a célula está vazia. Se a célula estiver vazia, o valor predefinido associado ao campo é inserido na célula usando o método oCell.SetValue():

    // Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    } 

Em seguida, usamos a função selectedRange.ForEach() para iterar em cada célula do intervalo selecionado. Para cada célula, ele busca o valor da célula. Se o valor existir, uma solicitação AJAX será feita à API. Em seguida, os dados de resposta são processados no retorno de chamada de sucesso:

// Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
}

Dentro do retorno de chamada de sucesso do AJAX, recuperamos a resposta da API. O código então itera pelos dados de resposta e preenche os dados recuperados em colunas específicas da planilha. A variável currentRow determina a linha a ser preenchida e as colunas correspondentes são preenchidas com dados. A função AutoFit é usada para ajustar as larguras das colunas com base nos dados preenchidos:

 // Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
// Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }

Todo o código da macro é o seguinte:

(function() {
    // Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();
    // Get the currently selected range of cells
    var selectedRange = Api.GetSelection();
    // Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };
    // Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    } 
    // Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
                    console.log(result);
                    // Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
                        // Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }
                },
                error: function ajaxError(jqXHR) {
                    console.error('Error: ', jqXHR.responseText);
                }
            });
        }
    });
})();

Agora vamos executar nossa macro e ver como funciona!

Esperamos que esta macro se torne rapidamente um recurso valioso em seu arsenal. A versatilidade e os recursos da API ONLYOFFICE criam aberturas significativas para personalizar e automatizar suas tarefas.

Enquanto você se aprofunda na elaboração de macros, não negligencie as possibilidades que a API ONLYOFFICE oferece. Se você tiver dúvidas ou ideias inovadoras, encorajamos você a compartilhá-las através dos comentários ou entrando em contato conosco. Seus insights são valiosos e estamos entusiasmados com o potencial de colaboração. Boa sorte em seus empreendimentos exploratórios!