Affectation des macros à des objets graphiques dans le tableur ONLYOFFICE

9 septembre 2021By Dasha

Vous utilisez des macros pour automatiser des tâches de routine pour vos calculs ? Dans ce billet de blog, nous allons découvrir un exemple de macro qui peut vous être utile.

Assigning macros to graphic objects in ONLYOFFICE spreadsheets

Pourquoi affecter des macros aux graphiques

La version 6.4 de ONLYOFFICE Docs apporte une nouvelle fonctionnalité au tableur – l’affectation d’une macro à exécuter lorsque vous cliquez sur un objet graphique. Cela vous permet de transformer des objets, par exemple, des formes automatiques en un bouton et de définir n’importe quelle macro comme gestionnaire lorsque vous appuyez dessus.

De cette façon, les utilisateurs peuvent cliquer sur le bouton correspondant à la macro assignée pour effectuer une action. C’est plus pratique, car ils n’ont pas besoin d’ouvrir la liste des macros à chaque fois qu’ils veulent en exécuter une.

Exemple de macro : diagramme automatique pour les taux de change des devises

Pour montrer comment cela fonctionne, nous avons créé 3 macros pour différentes paires de devises* (EUR/USD, USD/EUR, et BTC/USD). Les macros obtiennent des informations sur les taux de change des derniers jours et remplissent le tableau avec les valeurs reçues.

Elles sont affectées à 3 formes automatiques. Lorsque vous cliquez sur chaque image automatique, une macro est exécutée, le tableau est rempli avec les données pertinentes et le graphique correspondant est reconstruit.

Paire de devises USD/EUR

Assigning macros to graphic objects in ONLYOFFICE spreadsheets

La macro a le code suivant :

(function()
{
    var sCurPair = "USD_EUR";
    
    function formatDate(d) {
        var month = '' + (d.getMonth() + 1),
            day = '' + d.getDate(),
            year = d.getFullYear();
    
        if (month.length < 2) 
            month = '0' + month;
        if (day.length < 2) 
            day = '0' + day;
    
        return [year, month, day].join('-');
    }
    
    function previousWeek(){
        var today = new Date();
        var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
        return prevweek;
    }
    
    var sDate = formatDate(previousWeek());
    var sEndDate = formatDate(new Date());
    var apiKey = 'e5ed9f0b2b3aa6f4158f';
    var sUrl = 'https://free.currconv.com/api/v7/convert?q='
            + sCurPair + '&compact=ultra' + '&date=' + sDate + "&endDate=" + sEndDate + '&apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var oData = JSON.parse(xmlHttp.responseText);
        for(var key in oData) {
            var sheet = Api.GetSheet("Sheet1");
            var oRange = sheet.GetRangeByNumber(0, 1);
            oRange.SetValue(key);
            var oDates = oData[key];
            var nRow = 1;
            for(var date in oDates) {
                oRange = sheet.GetRangeByNumber(nRow, 0);
                oRange.SetValue(date);
                oRange = sheet.GetRangeByNumber(nRow, 1);
                oRange.SetValue(oDates[date]);
                nRow++;
            }
        }
    }
})();

Paire de devises EUR/USD

Assigning macros to graphic objects in ONLYOFFICE spreadsheets

La macro a le code suivant :

(function()
{
    var sCurPair = "EUR_USD";
    
     function formatDate(d) {
        var month = '' + (d.getMonth() + 1),
            day = '' + d.getDate(),
            year = d.getFullYear();
    
        if (month.length < 2) 
            month = '0' + month;
        if (day.length < 2) 
            day = '0' + day;
    
        return [year, month, day].join('-');
    }
    
    function previousWeek(){
        var today = new Date();
        var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
        return prevweek;
    }
    
    var sDate = formatDate(previousWeek());
    var sEndDate = formatDate(new Date());
    var apiKey = 'e5ed9f0b2b3aa6f4158f';
    var sUrl = 'https://free.currconv.com/api/v7/convert?q='
            + sCurPair + '&compact=ultra' + '&date=' + sDate + "&endDate=" + sEndDate + '&apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var oData = JSON.parse(xmlHttp.responseText);
        for(var key in oData) {
            var sheet = Api.GetSheet("Sheet1");
            var oRange = sheet.GetRangeByNumber(0, 1);
            oRange.SetValue(key);
            var oDates = oData[key];
            var nRow = 1;
            for(var date in oDates) {
                oRange = sheet.GetRangeByNumber(nRow, 0);
                oRange.SetValue(date);
                oRange = sheet.GetRangeByNumber(nRow, 1);
                oRange.SetValue(oDates[date]);
                nRow++;
            }
        }
    }
})();

Paire de devises BTC/USD

Assigning macros to graphic objects in ONLYOFFICE spreadsheets

La macro a le code suivant :

(function()
{
    var sCurPair = "BTC_USD";
    
 function formatDate(d) {
        var month = '' + (d.getMonth() + 1),
            day = '' + d.getDate(),
            year = d.getFullYear();
    
        if (month.length < 2) 
            month = '0' + month;
        if (day.length < 2) 
            day = '0' + day;
    
        return [year, month, day].join('-');
    }
    
    function previousWeek(){
        var today = new Date();
        var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
        return prevweek;
    }
    
    var sDate = formatDate(previousWeek());
    var sEndDate = formatDate(new Date());
    var apiKey = 'e5ed9f0b2b3aa6f4158f';
    var sUrl = 'https://free.currconv.com/api/v7/convert?q='
            + sCurPair + '&compact=ultra' + '&date=' + sDate + "&endDate=" + sEndDate + '&apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var oData = JSON.parse(xmlHttp.responseText);
        for(var key in oData) {
            var sheet = Api.GetSheet("Sheet1");
            var oRange = sheet.GetRangeByNumber(0, 1);
            oRange.SetValue(key);
            var oDates = oData[key];
            var nRow = 1;
            for(var date in oDates) {
                oRange = sheet.GetRangeByNumber(nRow, 0);
                oRange.SetValue(date);
                oRange = sheet.GetRangeByNumber(nRow, 1);
                oRange.SetValue(oDates[date]);
                nRow++;
            }
        }
    }
})();

*Veuillez noter que dans ces macros, nous avons utilisé le service tiers CurrencyConverterApi.com pour obtenir des informations sur les taux de change. Il existe une limite au nombre de requêtes par heure. Si cette limite est dépassée, la macro ne fonctionnera pas. Si vous souhaitez utiliser cette macro, il est préférable de vous inscrire sur le site Web du service et d’utiliser votre propre clé dans le code de la macro.