Come applicare i colori alternati in funzione del giorno

Pubblicato da Nicola Rainiero il 02-07-2018 (aggiornato il 04-07-2018)

Prosegue il miglioramento del mio script per esportare i propri eventi da un calendario Google ad un foglio di calcolo. Nell'articolo mostro come aggiungere una comoda funzione per alternare i colori delle righe quando varia il giorno dell'evento, comodo quando per esempio si hanno più turni e si vuole migliorarne la leggibilità della tabella.

Come applicare i colori alternati in funzione del giorno

 

Rispetto all'originale che ancora uso perché più completo di questo, sto cercando di semplificare il risultato a video evitando di creare moltissime colonne inutili che mi servono solo per svolgere delle formule. In questo caso ne ho dovuta creare una per convertire la data in un intero:

=(DATE(YEAR(i3);MONTH(i3);DAY(i3))-DATE(YEAR(i3);1;0))

Utile poi nel ciclo for per confrontare di volta in volta le date delle righe con quelle precedenti e se diverse cambiarne il colore. Questo è il codice inserito:

// Variabili usate per i colori alternati
var columnColorCalc = 28;
var color = firstColor;
var FirstWorkingDay = sheet.getRange(firstRowDate,columnColorCalc).setFormula('=(DATE(YEAR(A' +firstRowDate+ ');MONTH(A' +firstRowDate+ ');DAY(A' +firstRowDate+ '))-DATE(YEAR(A' +firstRowDate+ ');1;0))').getValue();

// Qui miglioro la formattazione della tabella
for (var i=firstRowDate; i <= totalRows; i+=1){
    sheet.getRange(i,1).setNumberFormat("-DD/MM-").setHorizontalAlignment("center");
    sheet.getRange(i,3,totalRows,2).setNumberFormat("HH:mm");

    // Codice per i colori alternati
    var workingDay = sheet.getRange(i,columnColorCalc).setFormula('=(DATE(YEAR(A' +i+ ');MONTH(A' +i+ ');DAY(A' +i+ '))-DATE(YEAR(A' +i+ ');1;0))').getValue();
    if( FirstWorkingDay == workingDay ){
        sheet.getRange(i, 1, 1, totalColumns).setBackground(color);
    } else if (color == firstColor) { var FirstWorkingDay = sheet.getRange(i,columnColorCalc).setFormula('=(DATE(YEAR(A' +i+ ');MONTH(A' +i+ ');DAY(A' +i+ '))-DATE(YEAR(A' +i+ ');1;0))').getValue(); var color = secondColor; sheet.getRange(i, 1, 1, totalColumns).setBackground(color);
    } else if (color == secondColor) { var FirstWorkingDay = sheet.getRange(i,columnColorCalc).setFormula('=(DATE(YEAR(A' +i+ ');MONTH(A' +i+ ');DAY(A' +i+ '))-DATE(YEAR(A' +i+ ');1;0))').getValue(); var color = firstColor; sheet.getRange(i, 1, 1, totalColumns).setBackground(color);
    }
    // Codice per i colori alternati

}

Una volta ottenuta la formattazione ho poi proceduto a cancellare la colonna con questo altro ciclo for:

// Puliza delle colonne usate per i calcoli
for (var i=firstRowDate; i <= totalRows; i+=1){
    // La colonna usata per cambiare i colori
    sheet.getRange(i,columnColorCalc).clear();
}

Mi rendo conto che non è una soluzione ottimale, ma non sono riuscito ancora a capire come salvare una variabile senza scomodare le due funzioni getRange e setFormula. Ovviamente sono ben graditi i consigli dei più esperti!

Questo è il risultato finale:

Risultato finale dell'applicazione di colori alternati in funzione del giorno
Nella parte superiore gli eventi presi dal calendario, in basso il risultato nel foglio di calcolo

Download

Il mio script aggiornato e funzionante lo puoi trovare qui:

Per installarlo puoi leggere il mio articolo precedente 5 steps to auto-transfer your Calendar entries into a spreadsheet o seguire il video, dove ti guido passo passo:

P.S. Questo è il primo video in cui registro anche la voce, quindi mi scuso in anticipo per le tante incertezze e pause presenti!



Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.