Temporizador de tareas en Google Sheets con Apps Script – Project Management

La idea es tener nuestro propio manejador de tareas en una hoja de calculo con Google Sheets y la posibilidad de poder pausar una tarea y que el Temporizador lo contemple, para esto usaremos un pequeño script con Google Apps script que nos ayude a ejecutar esta funcionalidad. La funcionalidad es básica pero si no te es ajena la programación te puede servir de base para realizar un manejador de tareas más potente.

Columnas contendrá nuestra hoja de excel en Google Sheets
  • Estado de la tarea (En espera, Iniciar, Pausa, Continuar, Terminado)
  • Titulo de la tarea
  • Fecha inicio de la tarea
  • Fecha Fin de la tarea
  • Tiempo usado para realizar la tarea en formato h:mm

Creamos una primer tarea en nuestro Excel llenando únicamente las siguientes columnas
  • Columna Status, convertimos la celda en un dropdown creando en está columna un Data validation permitiendo únicamente los valores de estado que definimos anteriormente.
  • Columna Task, ingresamos el titulo de la tarea

googlesheet-apps-script-task-timer-tracking

Opcionalmente podemos ocultar la columna Z.

Agregamos el código Apps script necesario para ejecutar el Temporizador

Para esto nos vamos a herramientas, editor de secuencia de comandos y en el archivo Code.gs adjuntamos el código que nos va a permitir realizar el tracking del tiempo para cada tarea.

El código Google Apps scripts a continuación:

const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const currentSheet = spreadSheet.getActiveSheet();

function onEdit(e){
  var range = e.range;
  var column = range.getColumn();
  var row = range.getRow();

  var startDateCell = currentSheet.getRange(row,3);
  var finishedDateCell = currentSheet.getRange(row,4);  
  var clockCell = currentSheet.getRange(row,5);  
  var timerCell = currentSheet.getRange(row,26);  

  var dropdown = currentSheet.getRange(row,1).getValue();  
  var currentTime = new Date().getTime();
  var lastTime = timerCell.getValue();
  var msTime = 0;  

  if(column != 1){
    return;
  }

  switch (dropdown) {
    case 'Start':
      startDateCell.setValue(new Date()).setNumberFormat('dd/MM/yyyy');
      finishedDateCell.setValue('');
      clockCell.setValue('');
      timerCell.setValue(currentTime);      
      break;

    case 'Pause':
      if (lastTime > 1000000000000){
        msTime = currentTime - lastTime;
        timerCell.setValue(msTime);      
      }      
      break;

    case 'Continue':
      if (lastTime < 1000000000000){
        msTime = timerCell.getValue();
        timerCell.setValue(currentTime - msTime);              
      }
      break;

    case 'Finished':
      var min = 0;
      var sec = 0;
      var hr = 0;
      var minStr = "";
      var hrStr = "";

      if (lastTime > 1000000000000){
        msTime = currentTime - lastTime;
        timerCell.setValue(msTime);
      } else {
        msTime = timerCell.getValue();
      }

      sec = Math.floor(msTime / 1000);
      min = Math.floor(sec / 60);
      hr = Math.floor(min / 60);
      min = Math.floor(min % 60);

      minStr = min > 9 ? String(min) : "0" + String(min);
      hrStr = hr > 9 ? String(hr) : "0" + String(hr);
      clockCell.setValue(hrStr + ":" + minStr);
      finishedDateCell.setValue(new Date()).setNumberFormat('dd/MM/yyyy');
      break;
  }
}
Agregamos un activador de proyecto

Finalmente en el editor de código de Google Apps scripts, agregamos un activador de proyecto para la función onEdit: en el editor de código Google Apps script nos vamos al menú editar, activadores del proyecto activo y en la pantalla que nos aparece damos clic en añadir activador, lo asignamos a la función onEdit definida en nuestro código y en tipo de evento seleccionamos al editarse.

Aquí les dejo el código para Google Apps script en github
Aquí les dejo la liga a la hoja de excel en Google Sheets donde la pueden clonar: Google Sheets

Clic here to found this entry post on english version.

Share: