Come applicare i colori alternati in funzione del giorno
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.
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:
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!
Add new comment