2013-11-22 25 views
10

Ho un foglio di lavoro di Google Documenti, dove nella colonna A sono le date (A1: 2013-11-22, A2: 2013-11-23, A3: 2013-11-24 ecc.). Vorrei evidenziare automaticamente - impostare un colore di sfondo per una riga, dove nella colonna A è la data di oggi. Per avere ogni giorno una riga diversa evidenziata.Come impostare il colore di sfondo per una riga in base alla data corrente nel foglio di calcolo di Google Documenti?

Mi aspetto che avrò bisogno di uno script, IMHO questo non è possibile con la formulazione condizionale in SpreadSheet di Google Documenti.

Qualche idea su come farlo? Molte grazie!

risposta

3

Ho modificato un esempio da Serge (grazie, Serge!), Le date sono nella colonna A. Le righe con una data hanno il colore di sfondo cancellato, le altre righe sono intatte. Bonus: un menu personalizzato per eseguire uno script sul foglio attivo.

/* check for a cell format */ 
function isValidDate(d) { 
    if (Object.prototype.toString.call(d) !== "[object Date]") 
    return false; 
    return !isNaN(d.getTime()); 
} 

/* check for a cell format */ 
function colorRow() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 

    customOnOpen(sh); 
} 

/* set the background - main function, sh is a sheet */ 
function customOnOpen(sh) { 
    var headers = sh.getRange(1,1,sh.getLastRow()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers.length;++n){ 
    var date = new Date(headers[n][0]).setHours(0,0,0,0); 
    Logger.log('Test row '+n); 
    if(date==today){ 
     Logger.log('Set bg at '+n); 
     sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground('yellow'); 
    } 
    else 
    { 
     if (isValidDate(headers[n][0])){ 
     Logger.log('Clear bg at'+n); 
     sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground(null); 
     } 
     else{ 
     Logger.log('Not a date at'+n); 
     } 
    } 
    } 
} 


function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 

    /* prepare the custom menu */ 
    var entries = [{ 
    name : "Set background", 
    functionName : "colorRow" 
    }]; 
    sheet.addMenu("My menu", entries); 

    /* run the function for two specific sheets */ 
    customOnOpen(sheet.getSheetByName('Sheet1')); 
    customOnOpen(sheet.getSheetByName('Sheet2')); 
}; 
2

Se vuoi che sia automatico sul foglio di calcolo aperto devi installare un oggetto installabile su Open che chiamerà la funzione seguente (da editor di script goto risorse> questo trigger di script> aggiungi un nuovo trigger> foglio di lavoro/su Apri)

E qui è il codice per le colonne: (vedi sotto per le righe)

function customOnOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 
    var headers = sh.getRange(1,1,1,sh.getLastColumn()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers[0].length;++n){ 
    var date = new Date(headers[0][n]).setHours(0,0,0,0); 
    Logger.log(today+' =? '+date) 
    if(date==today){ 
     n++ 
     Logger.log('match on column '+n) 
     if(n>=2){sh.getRange(1,n-1,sh.getMaxRows(),1).setBackground(null);};// resets the backGround for yesterday if not the first column 
     sh.getRange(1,n,sh.getMaxRows(),1).setBackground('yellow'); 
     break; 
    } 
    } 
} 

questa versione per colorare le righe

function customOnOpen2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 
    var headers = sh.getRange(1,1,sh.getLastRow()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers.length;++n){ 
    var date = new Date(headers[n][0]).setHours(0,0,0,0); 
    Logger.log(today+' =? '+date) 
    if(date==today){ 
     n++ 
     Logger.log('match on column '+n) 
     if(n>=2){sh.getRange(n-1,1,1,sh.getMaxColumns()).setBackground(null);} 
     sh.getRange(n,1,1,sh.getMaxColumns()).setBackground('yellow'); 
     break; 
    } 
    } 
} 

Nota: se si vuoi che venga eseguito automaticamente in base a un timer è perfettamente fattibile, basta cambiare la variabile ss e sh usando openById e getSheetByName (see doc here) e impostare un timer per farlo funzionare tutti i giorni intorno all'una.

0

Si potrebbe anche solo avere una nuova colonna nel foglio di calcolo fare l'abbinamento data e restituire un flag se è oggi ...

=ARRAYFORMULA(IF(A1:A =TODAY(), 1, "")) - formula nella cella D1

quindi provare ..

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = ss.getSheetByName('Sheet1'); 

function onOpen() { 
    var values = ss.getRange('D1:D').getValues(); // column of date flag 

    for (var row = 0; row < values.length; row++) { 
    if (values[row][0]) { 
     break; // assuming only 1 row has today's date 
    } 
    } 

    s.getRange('A1:D').setBackground(null); // range to clear 
    s.getRange(row + ":" + row).offset(1, 0).setBackground('yellow'); 

} 
+0

ci dovrebbe essere; nella funzione ARRAYFORMULA, ma grazie per un esempio – machj

0

Questo è piuttosto semplice.

Selezionare l'area che deve effettuare e Fare clic destro sul foglio di calcolo e selezionare 'formato condizionale' Da questo menu selezionare 'formula personalizzata' (potrebbe nome diverso, ma è l'ultima scelta nel menu)

quando hanno bisogno di fila per essere formattato quando una cella nella colonna> 1, utilizzare questo nella casella formula

=$A$1:$A$100 > 1 

Selezionare l'area che si desidera avere effetto come

A1:G100 

questo è il

2

Dove risiedono le case, prova questo.

  • Fare clic destro
  • Formattazione condizionale
  • modifica alla "Formula personalizzato è" in casella a sulla sinistra del
  • giù Inserire questa formula personalizzata:

    =(A=TODAY()) 
    
  • Scegli il tuo background e colore del testo

  • Intervallo: A1: 1
8

Ecco come l'ho fatto. Ho fatto la formattazione condizionale e presi la mia fascia, poi in "Formato celle se ..." Ho scelto personalizzato e utilizzato questa formula:

=$B$2:$B$92 = today() 

ho le mie date nella colonna B e questo mette in evidenza l'intera riga, all'interno la mia gamma, per la data di oggi.

0

La risposta semplice è come Clinet.

Formato -> Formattazione condizionale ...-> (cellule formato se ...) la formula su misura è

quindi compilare = cellule-range = oggi()

Ad esempio: = $ I $ 2: $ BC $ 2 = TODAY()