Seleccionar fecha actual al abrir un sheet con Google Apps Script

En muchas ocasiones nos puede ser útil que se haga una tarea automáticamente al abrir nuestro spreadsheet en referencia al día actual usando Google Apps Script: Marcar ciertas celdas, aplicar formatos, setear textos, etc...

En este ejemplo vamos a montar un sistema que cada día nos seleccione una columna con la fecha actual tal y como podemos ver en este imagen:

Autoselección de columnas



function onOpen()
{
   MarkToday();  
}

function MarkToday()
{
  var today = new Date();
  var today_day   = today.getDate();
  var today_month = today.getMonth();
  var today_year  = today.getFullYear();

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  var range = sheet.getRange(1,1,1,sheet.getLastColumn() );
  var caption = range.getValues()[0];

  //Buscamos el indice de columna que nos concuerda con el dia actual
  var index = 0;
  for(var i = 0 ; i < caption.length ; ++i)
  {       
      var d = new Date(caption[i]);

      //Compensamos la diferencia horaria entre el servidor de Google y nuestra situación.
      //De no compensar esta diferencia nos puede marcar dias diferentes de los reales.
      d.setTime( d.getTime() + 12*60*60*1000 );

      if(today_day == d.getDate() && today_month == d.getMonth() && today_year == d.getFullYear())
      {
        index = i+1;
        break;
      }
  }

  //Eliminamos marcas que pudieramos tener
  range.setBackground("white");

  //Marcamos el dia actual
  sheet.getRange(1,index).setBackground("yellow");
}

Como podéis ver el código no es complicado y se puede adaptar a lo que necesitéis. Se os ocurre alguna otra funcionalidad que se podría aplicar?

No vaciléis en hacerme llegar vuestras dudas.

Nos vemos


2 comentarios:

  1. Perdona mi ignorancia, llevo intentando hacer esto durante mucho tiempo pero no consigo que funcione. Me podrías decir exactamente donde debería introducir el rango en donde tengo las fechas (en columnas) . En mi caso sería C3:NP3
    Te estaría eternamente agradecido

    ResponderEliminar
    Respuestas
    1. Donde se introduce la info es aquí: sheet.getRange(1,index).setBackground("yellow");
      Para tu caso concreto seria:
      // 3 sería el C
      for(var i = 3 ; i < *el numero que tu quieras* ; ++i)
      {
      sheet.getRange(u,3).setBackground("yellow");
      }

      Tal vez te iria bien repasar estos otros tutoriales:
      https://www.tutorialesgoogleappscripts.com/2015/02/como-escribir-en-una-celda-de-una-hoja.html
      https://www.tutorialesgoogleappscripts.com/p/apps-scripts-google-sheets.html

      Eliminar

Tal vez te interese