Use uma macro do ONLYOFFICE para calcular a soma das células destacadas

14 junho 2024By Klaibson

Ao trabalhar com planilhas, muitas vezes há ocasiões em que precisamos calcular a soma de valores específicos. Nesta postagem do blog detalharemos o processo de criação de uma macro que calcula a soma das células destacadas com uma cor de fundo específica.

Use uma macro do ONLYOFFICE para calcular a soma das células destacadas

Construindo a macro

  • Acesse a planilha ativa
    Esta linha busca a planilha ativa onde a macro será executada:
 const oWorksheet = Api.GetActiveSheet();
  • Defina a célula de referência e a cor
    Para ajudar o editor a identificar a cor alvo, primeiro precisamos criar uma referência:
   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()

Aqui definimos a célula de referência (B1) e sua cor de fundo. A cor está definida como RGB(91, 155, 213). Para usar cores do intervalo existente, comente esta linha:

const colorReference = range1.SetFillColor(Api.CreateColorFromRGB(91, 155, 213));
  • Defina o intervalo de destino e a célula de resultado
    Aqui definimos o intervalo alvo de A1 a A16. O resultado será exibido na célula 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
  • Inicialize a variável de soma
    Inicializamos a variável sum como 0, que conterá a soma total dos valores:
    let sum = 0;
    let cellColorCode;
  • Iterar em cada célula no intervalo de destino
    Este bloco percorre cada célula do intervalo A1, verifica se a cor de fundo da célula corresponde à cor de referência e, em caso afirmativo, adiciona o valor da célula à soma:
     range2.ForEach(function (range) {
        const cellColor = range.GetFillColor();
       
        if (cellColor!== "No Fill"){
         cellColorCode = cellColor.GetRGB() 
        } else {
            cellColorCode = null;
        }
        
        if (cellColorCode && cellColorCode === targetedColor.GetRGB()) {
            const value = range.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); 
            }
        }
    });
  • Exibir o resultado
    Por fim, definimos o valor da célula A17 para exibir a soma calculada:
result.SetValue(`The sum: ${sum}`)

Todo o código da macro é o seguinte:

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


(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.GetRGB() 
        } else {
            cellColorCode = null;
        }
        
        if (cellColorCode && cellColorCode === targetedColor.GetRGB()) {
            const value = range.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); 
            }
        }
    });
    result.SetValue(`The sum: ${sum}`)
})();

Vamos executar nossa macro e ver como funciona!

Esta pequena macro peculiar é uma forma poderosa de automatizar tarefas e aumentar sua produtividade. Esperamos que se torne uma adição útil ao seu kit de ferramentas.

Aproveite a oportunidade para aproveitar o potencial da API ONLYOFFICE. Nossa vasta coleção de métodos de API pode dar vida às suas ideias. Seu feedback é altamente valorizado. Congratulamo-nos com qualquer perguntas ou conceitos inovadores você pode ter e estamos ansiosos pela possibilidade de colaboração. Boa sorte em seus empreendimentos exploratórios!