Utiliza el método attachEvent para manejar eventos en tu código de macros

13 noviembre 2024By Dea

A medida que actualizamos continuamente nuestros editores y mejoramos su funcionalidad, nos esforzamos por brindar a nuestros usuarios la capacidad de personalizarlos según sus necesidades específicas. Una de las herramientas de personalización más poderosas disponibles son las macros de ONLYOFFICE. En esta entrada del blog, presentaremos el método attachEvent y explicaremos cómo funciona con los eventos en tu código de macros. El script que utilizaremos ejecutará dos macros separadas en una sola ejecución.

Utiliza el método attachEvent para manejar eventos en tu código de macros

Sobre el método attachEvent 

Este médita escucha el evento especificado y llama a la función de devolución de llamada cuando se activa el evento, lo que nos permite ejecutar un script adicional dentro de esta devolución de llamada. A continuación, se muestra un ejemplo de implementación utilizando el evento onWorksheetChange:

var oWorksheet = Api.GetActiveSheet();
var oRange = oWorksheet.GetRange("A1");
oRange.SetValue("1");
Api.attachEvent("onWorksheetChange", function(oRange){
    console.log("onWorksheetChange");
    console.log(oRange.GetAddress());
});

Usa el método attachEvent para ejecutar dos macros en una sola ejecución

En la primera parte de nuestro script, utilizaremos la macro Importar CSV para importar datos desde un archivo CSV externo e insertarlos en una tabla. En la segunda parte, que se ejecutará dentro de la devolución de llamada, calcularemos todos los valores de una columna específica y mostraremos el resultado.

Primero importamos el CSV externo e insertamos los datos en la tabla:

const oWorksheet = Api.GetActiveSheet();
    const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
    const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
    let sum = 0;

    function LoadFile() {
        $.ajax({
            url: 'pathToCsVfile',
            dataType: 'text',
        }).done(successFunction);
    }

    function successFunction(data) {
        const arrAllRows = data.split(/\r?\n|\r/);
        let i = 1;
        let j = 1;

        for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            const rowCells = arrAllRows[singleRow].split(',');
            for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
                oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
                j += 1;
            }
            i += 1;
            j = 1;
        }
    }

Luego, introducimos la función calculateSum() que calculará los valores en el rango seleccionado:

function calculateSum() {
        sum = 0; // Reset the sum
       oRange.ForEach(function(cell) { // Loop over all cells in the range
          const value = cell.GetValue();
            if (!isNaN(parseFloat(value))) {
             sum += parseFloat(value); // Add the cell's numeric value to the sum
            }
        });
    }

A continuación, invocamos la función LoadFile y ejecutamos el método attachEvent, que escuchará cualquier cambio en la hoja de trabajo. Cuando se produzca un cambio, la función calculateSum() se ejecutará dentro de la devolución de llamada:

    LoadFile();

    // Attach event to recalculate sum when cells change
    Api.attachEvent("onWorksheetChange", function() {
        calculateSum();
    });

Al final de nuestro macro, ejecutamos la función arc_calculate para recargar la hoja de cálculo y monstrar el resultado del cálculo en la celda seleccionada:

// Update the cell B17 with the calculated sum
    let reload = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
        result.SetValue(`The sum: ${sum}`);
    });

El código completo de los macros es el siguiente:

(function() {
    const oWorksheet = Api.GetActiveSheet();
    const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
    const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
    let sum = 0;

    function LoadFile() {
        $.ajax({
            url: 'pathToCsVfile',
            dataType: 'text',
        }).done(successFunction);
    }

    function successFunction(data) {
        const arrAllRows = data.split(/\r?\n|\r/);
        let i = 1;
        let j = 1;

        for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            const rowCells = arrAllRows[singleRow].split(',');
            for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
                oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
                j += 1;
            }
            i += 1;
            j = 1;
        }
    }

    function calculateSum() {
        sum = 0; // Reset the sum
        oRange.ForEach(function(cell) { // Loop over all cells in the range
            const value = cell.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); // Add the cell's numeric value to the sum
            }
        });
    }

    LoadFile();

    // Attach event to recalculate sum when cells change
    Api.attachEvent("onWorksheetChange", function() {
        calculateSum();
    });

    // Update the cell B17 with the calculated sum
    let reload = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
        result.SetValue(`The sum: ${sum}`);
    });
})();

Ahora, ¡ejecutemos los macros y veamos cómo funciona!

En el ámbito de ONLYOFFICE, siempre nos esforzamos por mejorar la flexibilidad y versatilidad de nuestro producto. Los macros de ONLYOFFICE son una herramienta excelente que te permite personalizar la funcionalidad y abordar tus necesidades específicas. Nuestra amplia biblioteca de métodos API, que se actualiza continuamente, te permite crear tus propias soluciones.

Te animamos a que aproveches este recurso y crees tus propias macros. Si tienes alguna pregunta o macro para compartir, no dudes en contractarnos. Damos la bienvenida a la discusión y colaboración. ¡Te deseamos mucha suerte en tus exploraciones!

Crea tu cuenta gratuita de ONLYOFFICE

Visualiza, edita y colabora en documentos, hojas, diapositivas, formularios y archivos PDF en línea.