Utilisez la méthode attachEvent pour gérer les événements dans votre code macro

13 novembre 2024By Dasha

Alors que nous mettons continuellement à jour nos éditeurs et améliorons leurs fonctionnalités, nous nous efforçons de fournir à nos utilisateurs la possibilité de les adapter à leurs besoins précis. Les macros ONLYOFFICE sont l’un des puissants outils de personnalisation disponibles. Dans ce billet de blog, nous allons présenter la méthode attachEvent et expliquer comment elle fonctionne avec les événements dans le code de votre macro. Le script que nous utiliserons exécutera deux macros distinctes en une seule fois.

Use the attachEvent method to handle events in your macro code

À propos de la méthode attachEvent

Cette méthode est à l’écoute de l’événement spécifié et appelle la fonction de rappel lorsque l’événement est déclenché, ce qui nous permet d’exécuter un script supplémentaire dans le cadre de ce rappel. Voici un exemple de mise en œuvre utilisant l’événement 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());
});

Utilisation de la méthode attachEvent pour exécuter deux macros en une seule fois

Dans la première partie de notre script, nous utiliserons la macro Import CSV pour importer des données à partir d’un fichier CSV externe et les insérer dans un tableau. Dans la seconde partie, exécutée dans le callback, nous calculerons toutes les valeurs d’une colonne spécifique et afficherons le résultat.

Nous commençons donc par importer le fichier CSV externe et par insérer les données dans le tableau :

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

Nous introduisons ensuite la fonction calculateSum() qui calcule les valeurs dans la plage sélectionnée :

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

Ensuite, nous invoquons la fonction LoadFile et exécutons la méthode attachEvent, qui est à l’écoute de tout changement sur la feuille de calcul. Lorsqu’une modification se produit, la fonction calculateSum() est exécutée dans la fonction de rappel :

    LoadFile();

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

A la fin de notre macro, nous exécutons la fonction asc_calculate pour recharger la feuille de calcul et afficher le résultat du calcul dans la cellule sélectionnée :

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

Le code macro complet est le suivant :

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

Exécutons maintenant la macro et voyons comment elle fonctionne !

Dans le domaine d’ONLYOFFICE, nous nous efforçons toujours d’améliorer la flexibilité et la polyvalence de notre produit. Les macros ONLYOFFICE sont un superbe outil qui vous permet de personnaliser les fonctionnalités et de répondre à vos besoins spécifiques. Notre vaste bibliothèque de méthodes API, qui est constamment mise à jour, vous permet de créer vos propres solutions.

Nous vous encourageons à profiter de cette ressource et à créer vos propres macros. Si vous avez des questions ou des macros à partager, n’hésitez pas à nous contacter. Nous sommes ouverts à la discussion et à la collaboration. Nous vous souhaitons bonne chance dans vos projets exploratoires !

Créez votre compte ONLYOFFICE gratuit

Affichez, modifiez et coéditez des documents texte, feuilles de calcul, diapositives, formulaires et fichiers PDF en ligne.