Usa una macro ONLYOFFICE per calcolare la somma delle celle evidenziate

13 giugno 2024By Alice

Quando si lavora con i fogli di calcolo, capita spesso di dover calcolare la somma di valori specifici. In questo post del blog spiegheremo in dettaglio il processo di creazione di una macro che calcola la somma delle celle evidenziate con un colore di sfondo specifico.

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

Costruzione della macro

  • Accedi al foglio di lavoro attivo
    Questa linea recupera il foglio di lavoro attivo in cui verrà eseguita la macro:

     const oWorksheet = Api.GetActiveSheet();
  • Imposta la cella di riferimento e il colore
    Per aiutare l’editor a identificare il colore di target, occorre innanzitutto creare un riferimento:

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

    Qui impostiamo la cella di riferimento (B1) e il suo colore di sfondo. Il colore è impostato su RGB(91, 155, 213). Per utilizzare i colori dell’intervallo esistente, occorre commentare questa linea:

    const colorReference = range1.SetFillColor(Api.CreateColorFromRGB(91, 155, 213));
  • Definisci l’intervallo mirato e la cella del risultato
    Qui impostiamo l’intervallo mirato da A1 a A16. Il risultato verrà mostrato nella cella A17:

    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
  • Imposta la variabile somma
    Impostiamo a 0 la variabile sum, che conterrà la somma totale dei valori:

        let sum = 0;
        let cellColorCode;
  • Itera attraverso ogni cella dell’intervallo desiderato
    Questo blocco itera ogni cella dell’intervallo A1, verifica se il colore di sfondo della cella corrisponde al colore di riferimento e, in caso affermativo, aggiunge il valore della cella alla somma:

      range2.ForEach(function (range) {
            const cellColor = range.GetFillColor();
           
            if (cellColor!== "No Fill"){
             cellColorCode = cellColor["color"]["ey"]
            } else {
                cellColorCode = null;
            }
            
            if (cellColorCode && cellColorCode === targetedColor["color"]["ey"]) {
                const value = range.GetValue();
                if (!isNaN(parseFloat(value))) {
                    sum += parseFloat(value); 
                }
            }
        });
  • Visualizza il risultato
    Infine, impostiamo il valore della cella A17 per visualizzare la somma calcolata:

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

Ecco l’intero codice della macro:

/*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'
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 
*/

(function () {
    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(function (range) {
        const cellColor = range.GetFillColor();
       
        if (cellColor!== "No Fill"){
         cellColorCode = cellColor["color"]["ey"]
        } else {
            cellColorCode = null;
        }
        
        if (cellColorCode && cellColorCode === targetedColor["color"]["ey"]) {
            const value = range.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); 
            }
        }
    });
    result.SetValue(`The sum: ${sum}`)
})();

Lanciamo la macro e vediamo come funziona!

Questa piccola e originale macro è un modo efficace per automatizzare le attività e migliorare la produttività. Ci auguriamo che diventi un’utile aggiunta al tuo kit di strumenti.

Cogli l’opportunità di sfruttare il potenziale dell’API di ONLYOFFICE. La nostra vasta collezione di metodi API può portare a compimento le tue idee. Il tuo feedback è molto apprezzato. Accogliamo ogni domanda o idea innovativa che tu possa avere, e non vediamo l’ora di lavorare con te! In bocca al lupo con il tuo lavoro!