Evidenzia valori maggiori di con la macro ONLYOFFICE

22 luglio 2022By Elena

Molto spesso, lavorare con i fogli di calcolo potrebbe sembrare noioso e poco gratificante. Ed è allora che le macro sono utili. Questi piccoli script aiutano ad automatizzare le attività di routine e migliorare la nostra produttività.

In questo post del blog parleremo di una piccola macro che mette in evidenza tutti i valori maggiori di o minori di una certa cifra.

Highlight greater than values with ONLYOFFICE macro

Macro di riferimento

Per riferimento, abbiamo utilizzato una macro VBA. Questa macro richiama una casella di input in cui inserisci il valore maggiore di, quindi cerca la selezione sul foglio di calcolo ed evidenzia le celle di destinazione.

Il codice della macro è il seguente:

 Sub HighlightGreaterThanValues()
Dim i As Integer
i = InputBox("Enter Greater Than Value", "Enter Value")
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlGreater, Formula1:=i
Selection.FormatConditions(Selection.FormatConditions.Count).S
tFirstPriority
With Selection.FormatConditions(1)
.Font.Color = RGB(0, 0, 0)
.Interior.Color = RGB(31, 218, 154)
End With
End Sub

Tuttavia, le macro di ONLYOFFICE sono basate su JavaScript, il che significa che sono più versatili, utilizzeremo approcci diversi per affrontare questo compito.

Evidenzia i valori con un solo colore

Sarebbe un’opzione più semplice. Ma d’altra parte, questa macro può evidenziare anche tutti i valori minori di. In questo caso, puoi evidenziare tutti i valori maggiori di con un colore e tutti i valori minori di con un altro.

Quindi iniziamo! Prima dobbiamo ottenere il foglio attivo. Lo facciamo utilizzando il metodo Api.ActiveSheet che restituisce un oggetto che rappresenta un foglio attivo. E poi miriamo alla selezione sul foglio di calcolo:

(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
})();

Ora dobbiamo ottenere un valore di ogni cella dalla selezione. Questa volta useremo il metodo ForEach. Esegue una funzione esatta una volta per ogni cella:

(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
  });
    
})();

Quindi aggiungiamo un’istruzione if che verificherà se i valori nella selezione sono maggiori di un certo numero. Nel nostro caso, è 5. Se sono maggiori di 5, cambiamo il colore di riempimento delle celle utilizzando il metodo SetFillColor. Crea un colore di riempimento dal codice RGB:

(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value > 5) {
            range.SetFillColor(Api.CreateColorFromRGB(255,0,255));
        }
    });

Eseguiamo la nostra macro.

Highlight greater than values with ONLYOFFICE macro

In alternativa, puoi modificare il colore del carattere dei valori target. Per farlo, sostituiremo il metodo SetFillColor con SetFontColor:

Highlight greater than values with ONLYOFFICE macro

Per evidenziare i valori minori di, cambiamo il parametro dell’istruzione if. Ora, se il valore di una cella nella selezione è inferiore a 5, il colore di sfondo della cella cambierà.

(function () 
{
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value < 5) {
            range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
        }
    });
    
})();

Highlight greater than values with ONLYOFFICE macro
Highlight greater than values with ONLYOFFICE macro

Evidenzia i valori con più colori

Ora, facciamo un passo avanti e creiamo una macro che evidenzierà le celle target con più colori.

Innanzitutto, abbiamo bisogno di questi colori unici. Usiamo il metodo CreateColorFromRGB per generarli e memorizziamo questi colori nell’array uniqueColors:

var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
        Api.CreateColorFromRGB(204, 204, 255),
        Api.CreateColorFromRGB(0, 255, 0),
        Api.CreateColorFromRGB(0, 128, 128),
        Api.CreateColorFromRGB(192, 192, 192),
        Api.CreateColorFromRGB(255, 204, 0),
        Api.CreateColorFromRGB(255, 0, 0),
        Api.CreateColorFromRGB(0, 255, 255),
        Api.CreateColorFromRGB(255, 0, 255),
        Api.CreateColorFromRGB(218, 128, 128),
        Api.CreateColorFromRGB(128, 0, 0),
        Api.CreateColorFromRGB(128, 0, 128),
        Api.CreateColorFromRGB(0, 0, 128),
        Api.CreateColorFromRGB(165, 42, 42),
        Api.CreateColorFromRGB(220, 20, 60),
        Api.CreateColorFromRGB(255, 99, 71),
        Api.CreateColorFromRGB(205, 92, 92),
        Api.CreateColorFromRGB(240, 128, 128),
        Api.CreateColorFromRGB(255, 165, 0),
        Api.CreateColorFromRGB(255, 215, 0),
        Api.CreateColorFromRGB(184, 134, 11),
        Api.CreateColorFromRGB(218, 165, 32),
        Api.CreateColorFromRGB(173, 255, 47),
        Api.CreateColorFromRGB(0, 100, 0),
        Api.CreateColorFromRGB(50, 205, 50),
        Api.CreateColorFromRGB(70, 130, 80),
        Api.CreateColorFromRGB(75, 0, 130),
        Api.CreateColorFromRGB(72, 61, 139),
        Api.CreateColorFromRGB(255, 182, 193),
        Api.CreateColorFromRGB(188, 143, 143),
        Api.CreateColorFromRGB(112, 128, 144),
        Api.CreateColorFromRGB(210, 180, 140),
        Api.CreateColorFromRGB(105, 105, 105),
        Api.CreateColorFromRGB(216, 191, 216),
        Api.CreateColorFromRGB(240, 248, 255),
        Api.CreateColorFromRGB(102, 205, 170),
        Api.CreateColorFromRGB(255, 240, 245)];

Quindi dichiariamo la variabile uniqueColorIndex e la impostiamo su 0. Useremo questa variabile come indice per selezionare colori univoci dall’array. Per farlo, aggiungiamo un’istruzione if che attraverserà l’array e incrementa l’indice:

var uniqueColorIndex = 0;
        
        function getColor() {
            
            if (uniqueColorIndex === uniqueColors.length) {
                uniqueColorIndex = 0;
            }
            return uniqueColors[uniqueColorIndex++];

Quindi, abbiamo bisogno di un’istruzione if che trovi i valori target e applichi il colore univoco alle celle. Il concetto è simile alla macro precedente. Puntiamo sul foglio attivo. Quindi, otteniamo i valori delle celle nella selezione. E aggiungiamo un’istruzione if che cercherà i valori maggiori di o minori di e li evidenzierà con il metodo SetFillColor . Ma questa volta, il colore verrà generato con la funzione getColor:

    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value > 5) {
            range.SetFillColor(getColor());
        } 
    });

Il codice completo della macro è il seguente:

(function () 
{
    
           
    var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
        Api.CreateColorFromRGB(204, 204, 255),
        Api.CreateColorFromRGB(0, 255, 0),
        Api.CreateColorFromRGB(0, 128, 128),
        Api.CreateColorFromRGB(192, 192, 192),
        Api.CreateColorFromRGB(255, 204, 0),
        Api.CreateColorFromRGB(255, 0, 0),
        Api.CreateColorFromRGB(0, 255, 255),
        Api.CreateColorFromRGB(255, 0, 255),
        Api.CreateColorFromRGB(218, 128, 128),
        Api.CreateColorFromRGB(128, 0, 0),
        Api.CreateColorFromRGB(128, 0, 128),
        Api.CreateColorFromRGB(0, 0, 128),
        Api.CreateColorFromRGB(165, 42, 42),
        Api.CreateColorFromRGB(220, 20, 60),
        Api.CreateColorFromRGB(255, 99, 71),
        Api.CreateColorFromRGB(205, 92, 92),
        Api.CreateColorFromRGB(240, 128, 128),
        Api.CreateColorFromRGB(255, 165, 0),
        Api.CreateColorFromRGB(255, 215, 0),
        Api.CreateColorFromRGB(184, 134, 11),
        Api.CreateColorFromRGB(218, 165, 32),
        Api.CreateColorFromRGB(173, 255, 47),
        Api.CreateColorFromRGB(0, 100, 0),
        Api.CreateColorFromRGB(50, 205, 50),
        Api.CreateColorFromRGB(70, 130, 80),
        Api.CreateColorFromRGB(75, 0, 130),
        Api.CreateColorFromRGB(72, 61, 139),
        Api.CreateColorFromRGB(255, 182, 193),
        Api.CreateColorFromRGB(188, 143, 143),
        Api.CreateColorFromRGB(112, 128, 144),
        Api.CreateColorFromRGB(210, 180, 140),
        Api.CreateColorFromRGB(105, 105, 105),
        Api.CreateColorFromRGB(216, 191, 216),
        Api.CreateColorFromRGB(240, 248, 255),
        Api.CreateColorFromRGB(102, 205, 170),
        Api.CreateColorFromRGB(255, 240, 245)];
    var uniqueColorIndex = 0;
        
        function getColor() {
            
            if (uniqueColorIndex === uniqueColors.length) {
                uniqueColorIndex = 0;
            }
            return uniqueColors[uniqueColorIndex++];
        }
    
    var activeSheet = Api.ActiveSheet;
    var selection = activeSheet.Selection;
    selection.ForEach(function (range) {
        var value = range.GetValue();
        if (value > 5) {
            range.SetFillColor(getColor());
        } 
    });
    
})();

Ora, eseguiamo la nostra macro!

Highlight greater than values with ONLYOFFICE macro
Highlight greater than values with ONLYOFFICE macro

 

E ancora, in alternativa, puoi utilizzare il metodo SetFontColor:

Highlight greater than values with ONLYOFFICE macro

Questa piccola macro è solo una delle tante possibili implementazioni dei nostri metodi API. Le macro di ONLYOFFICE sono estremamente versatili e ti invitiamo a sperimentare e creare i tuoi script. Sentiti libero di condividere le tue idee o le tue macro con noi. Siamo sempre aperti alla discussione e alla cooperazione. In bocca al lupo per i tuoi sforzi esplorativi!