Google Spreadsheet (excel) fórmula o macros

El día de hoy busco ayuda con un script, quisiera poder llevar el control de tiempo de una tarea asignada a una persona activándose al escanear su "ID". Ya había visto uno en Microsoft excel pero el escrip no funciono en la versión Excel de Google,
La idea general seria así:

En la hoja 1 hay una celda donde se escanea el ID de la persona, al scanearse se pone automáticamente el ID y nombre con la hora del escaneo, como "hora de inicio" y al escanear por segunda vez, busca a esa persona y le pone la hora final o de salida, dejo un ejemplo :


Primero me disculpo por lo simple del ejemplo, pero era similar en la versión que funcionaba en Microsoft excel, la celda al lado de ID, osea B1, siempre estaba libre, al escanearlo esta agregaba abajo el ID, nombre y hora de inicio, múltiples personas podían escanear su DI, y al scarnear por segunda vez buscaba su primer escaneo y le ponía una ahora final, temas como duración solo los puse como ejemplo, en realidad solo busco el script o fórmula que me ayude con lo que comento, en la Hoja2 había una lista, ahí se podía agregar o quitar personas, al mismo tiempo era la base de datos de donde el script ligaba IDs con nombres, se veía así:

Siempre que una persona y ID eran agregados, el scanner estaba lo reconocía de inmediato como lo hacen las listas desplegables, temas como el scanner yo lo tengo, funciona con funciones normales como BuscarV, pero como digo, lo que busco es el script o fórmula que de una hora de inicio y luego busque de nuevo a la persona para darle una salida.

Respuesta
1

Como veo que nadie te responde te contesto.
En primera quiero aclarar que casi no le muevo al javascript así que tal vez tenga alguna forma mucho más fácil ya que no conozco todas sus funciones, pero bueno, al grano:

function buscar() {
  var sheet=SpreadsheetApp.getActive();
  sheet.setActiveSheet(sheet.getSheetByName('Hoja 1'), true);
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var last=ss.getLastRow();
  var data=spreadsheet.getRange(1,1,last,2).getValues();
  sheet.setActiveSheet(sheet.getSheetByName('Hoja 2'), true);
  var valA=sheet.getRange('B2').getValue()
  sheet.setActiveSheet(sheet.getSheetByName('Hoja 1'), true);
  for(nn=0;nn<data.length;++nn){
    if (data[nn][0]==valA){break} ;
 }
    var res=(data[nn][1]);
  {
   var now = new Date();
   var hora = now.getHours();
   var minutos = now.getMinutes();
   var hoy = hora + ":" +  minutos + "\n";
  }
    {
  sheet.setActiveSheet(sheet.getSheetByName('Hoja 2'), true);
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var data = spreadsheet.getDataRange().getValues();
 for(n=0;n<data.length;++n)
   if(data[n][0].toString().match(valA)==valA)
      { data[n][3] = hoy};
 Logger.log(data)
 spreadsheet.getRange(1,1,data.length,data[0].length).setValues(data); 
 }
{
  sheet.setActiveSheet(sheet.getSheetByName('Hoja 2'), true);
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var last=ss.getLastRow();
  spreadsheet.getRange(last+1,1).setValue(valA);
  spreadsheet.getRange(last+1,2).setValue(res);
  spreadsheet.getRange(last+1,3).setValue(hoy);}
      } 

Básicamente lo que hace es buscar el contenido de la celda b2 de la hoja 2 que es donde se ingresa el id para posteriormente buscar ese id en la columna a de la hoja 1 para regresarte el nombre y lo ingresa justo debajo de tus encabezados para ir creando una lista y les coloca la hora del registro.
Ahora bien, tal como te comentaba el código está incompleto pero cumple el objetivo ya que si vuelves a registrar un código que ya esta en la nueva lista si te registra la hora de salida pero no pude ponerle una condicional para que se registre solo esa hora, así que te crea otro valor en la lista (el cual puedes eliminar sin problema).

La segunda cosa a tomar en cuenta es que es solo la función, para que se ejecute solita al cambiar el valor de la celda, se hace con un evento llamado onEdit pero sinceramente no se como funciona.

En fin espero te sirva, aun así cumple el objetivo solo que tu lo tienes que ejecutar manualmente.
Igual y alguien mas te ayuda a modificarlo para que cumpla enteramente lo que requiere.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas