Encuentra logotipos de empresas con la macro de ONLYOFFICE

30 agosto 2023By Sergey

Teniendo en cuenta la gran cantidad de logotipos que existen, descubrir referencias de logotipos puede ser un poco complicado hoy en día, lo que puede llevar a confusión. Sin embargo, con las macros de ONLYOFFICE, puedes hacer que este proceso sea automático. En este artículo te mostraremos cómo crear una macro que puede recuperar simultáneamente varios logotipos de una API externa e insertarlos en tu hoja de cálculo.

Encuentra logotipos de empresas con la macro de ONLYOFFICE

Acceso a la API

En este tutorial, utilizaremos la Logo API ofrecida por API Ninjas, una plataforma en línea que proporciona una serie de recursos y conocimientos sobre las API. Esta plataforma también ofrece una colección de API gratuitas que los desarrolladores pueden incluir en sus proyectos. En concreto, la Logo API permite acceder a imágenes de logotipos de una amplia variedad de empresas.

Creación de la macro

Primero seleccionamos la hoja activa:

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

A continuación, obtenemos la selección en el documento. Los valores de las celdas dentro de esta selección se utilizarán en la solicitud API:

var selectedRange = Api.GetSelection()

Después añadimos la lógica que establecería los títulos de los datos que se van a insertar en el documento. Comenzamos creando una matriz que contiene los nombres de los campos (“name”, “ticker”, “image”) y las letras de las columnas:

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

Tras asignar las columnas y los valores, pasamos por cada nombre de campo del objeto valuesToInsert. Para cada campo, buscamos la celda correspondiente y comprobamos si está vacía. Si la celda está vacía, el valor predefinido asociado con el campo se inserta en la celda utilizando el 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);
    } 

Luego usamos la función selectedRange.ForEach() para iterar a través de cada celda en el rango seleccionado. Para cada celda, se obtiene el valor de la celda. Si el valor existe, se realiza una solicitud AJAX a la API. A continuación, los datos de respuesta se procesan en la devolución de llamada exitosa:

// 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) {
}

En la devolución de llamada exitosa de AJAX, recuperamos la respuesta de la API. A continuación, el código itera a través de los datos de respuesta y rellena los datos recuperados en columnas específicas de la hoja de cálculo. La variable currentRow determina la fila a rellenar, y las columnas correspondientes se rellenan con datos. La función AutoFit se utiliza para ajustar el ancho de las columnas en función de los datos rellenados:

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

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

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

Ahora vamos a ejecutar nuestra macro y ver cómo funciona:

Esperamos que esta macro se convierta rápidamente en una herramienta valiosa en tu arsenal. La versatilidad y las capacidades de la API de ONLYOFFICE crean aperturas significativas para personalizar y automatizar tus tareas.

Mientras que te dedicas a la creación de macros, no ignores las posibilidades que ofrece la API de ONLYOFFICE. Si alguna vez tienes preguntas o ideas innovadoras, te animamos a compartirlas a través de los comentarios o poniéndote en contacto con nosotros. Tus ideas son valiosas y nos entusiasma el potencial de colaboración. Te deseamos mucha suerte en tus esfuerzos exploratorios.