Utilisez la macro ONLYOFFICE pour calculer la somme des cellules surlignées

13 juin 2024By Dasha

Lorsque l’on travaille avec des feuilles de calcul, il est souvent nécessaire de calculer la somme de valeurs spécifiques. Dans cet article de blog, nous allons détailler le processus de création d’une macro qui calcule la somme des cellules mises en évidence par une couleur d’arrière-plan spécifique.

Use an ONLYOFFICE macro to calculate the sum of the highlighted cells

Construction de la macro

  • Accédez à la feuille de calcul active
    Cette ligne permet de récupérer la feuille de calcul active sur laquelle la macro sera exécutée :

     const oWorksheet = Api.GetActiveSheet();
  • Définissez la cellule de référence et la couleur
    Pour aider l’éditeur à identifier la couleur cible, nous devons d’abord créer une référence :

    <code class="language-javascript"> const range1 = oWorksheet.GetRange("B1"); // Set your range for the color reference
      const colorReference = range1.SetFillColor(Api.CreateColorFromRGB(91, 155, 213)); // Set targeted background color. To use fill color form the exisiting range, comment this line out
      const targetedColor = range1.GetFillColor()</code>

    Ici, nous définissons la cellule de référence (B1) et sa couleur d’arrière-plan. La couleur est définie sur RGB(91, 155, 213). Pour utiliser des couleurs de la gamme existante, commentez cette ligne :

    const colorReference = range1.SetFillColor(Api.CreateColorFromRGB(91, 155, 213));
  • Définissez la plage ciblée et la cellule de résultat
    Ici, nous définissons la plage ciblée de A1 à A16. Le résultat sera affiché dans la cellule A17 :

    <code class="language-javascript">const range2 = oWorksheet.GetRange("A1:A16"); // Set the targeted range on the spreadsheet
    const result = oWorksheet.GetRange("A17"); // Set the cell where the result will be displayed</code>
  • Initialisez la variable somme
    Nous initialisons la variable sum à 0, qui contiendra la somme totale des valeurs :

        let sum = 0;
        let cellColorCode;
  • Itérez à travers chaque cellule de la plage ciblée
    Ce bloc parcourt chaque cellule de la plage A1, vérifie si la couleur d’arrière-plan de la cellule correspond à la couleur de référence et, le cas échéant, ajoute la valeur de la cellule à la somme :

    <code class="language-javascript">  range2.ForEach(<span class="hljs-function">function</span><span class="hljs-function"> (</span><span class="hljs-function hljs-params">range</span><span class="hljs-function">) </span>{
            const cellColor = range.GetFillColor();
           
            if (cellColor!== "No Fill"){
             cellColorCode = cellColor.GetRGB() 
            } else {
                cellColorCode = null;
            }
            
            if (cellColorCode &amp;amp;&amp;amp; cellColorCode === targetedColor.GetRGB()) {
                const value = range.GetValue();
                if (!isNaN(parseFloat(value))) {
                    sum += parseFloat(value); 
                }
            }
        });</code>
  • Affichez le résultat
    Enfin, nous définissons la valeur de la cellule A17 pour afficher la somme calculée :

    result.SetValue(`The sum: ${sum}`)

Le code macro complet est le suivant :

<code class="language-javascript">/*About the script:
This script will calculate the sum of the values in the range A1:A16 that have the same background color as the cell B1.
The result will be displayed in the cell A17.
Order of operations:
1) Set the cell for the color reference in the variable 'range1' 
2) Set the targeted fill color in the variable 'colorReference'. To use fill color form the exisiting range, comment this line out
3) Set the targeted range in the variable 'range2'
3) Set the cell for dispalying the result in the variable 'result'
4) Before runing the macro, make sure that none of the cells in the range A1:A16 are in the active selection 
*/


(<span class="hljs-function">function</span><span class="hljs-function"> (</span><span class="hljs-function">) </span>{
    const oWorksheet = Api.GetActiveSheet();
    const range1 = oWorksheet.GetRange("B1"); // Set your range for the color reference
    const colorReference = range1.SetFillColor(Api.CreateColorFromRGB(91, 155, 213)); // Set targeted background color. To use fill color form the exisiting range, comment this line out
    const targetedColor = range1.GetFillColor()
    const range2 = oWorksheet.GetRange("A1:A16"); // Set the targeted range on the spreadsheet
    const result = oWorksheet.GetRange("A17"); // Set the cell where the result will be displayed
    let sum = 0;
    let cellColorCode;

    range2.ForEach(<span class="hljs-function">function</span><span class="hljs-function"> (</span><span class="hljs-function hljs-params">range</span><span class="hljs-function">) </span>{
        const cellColor = range.GetFillColor();
       
        if (cellColor!== "No Fill"){
         cellColorCode = cellColor.GetRGB() 
        } else {
            cellColorCode = null;
        }
        
        if (cellColorCode &amp;amp;&amp;amp; cellColorCode === targetedColor.GetRGB()) {
            const value = range.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); 
            }
        }
    });
    result.SetValue(`The sum: ${sum}`)
})();</code>

Exécutons notre macro et voyons comment elle fonctionne !

Cette petite macro excentrique est un moyen puissant d’automatiser des tâches et d’améliorer votre productivité. Nous espérons qu’elle deviendra un complément utile à votre boîte à outils.

Saisissez l’opportunité d’exploiter le potentiel de l’API ONLYOFFICE. Notre vaste collection de méthodes API peut concrétiser vos idées. Vos commentaires sont très appréciés. Nous sommes ouverts à toute question ou concept innovant que vous pourriez avoir et nous nous réjouissons de la possibilité d’une collaboration. Nous vous souhaitons bonne chance dans vos projets exploratoires !