¿Cómo puedo configurar automáticamente la celda "última actualización" en la hoja de cálculo de Google Docs?

21

¿Cómo puedo configurar automáticamente la celda "última actualización" en la hoja de cálculo Google Docs?

Quiero crear una columna donde el valor de las celdas se establecerá automáticamente cuando la fila se modificó por última vez. es posible? ¿Cómo hago esto / qué opción uso para configurar esto?

Veo una solución alternativa para MS Excel, pero creo que Google Docs debería tener algo similar, ¿verdad? (dedos cruzados)

Tenemos varias personas editando una hoja grande. Podemos ver el historial de revisiones, pero sería mejor si tuviéramos una columna de fechas de "última actualización" también.

cwd
fuente
¿Has probado? Si funciona, marque como tal, consulte webapps.stackexchange.com/faq#howtoask .
Jacob Jan Tuinstra

Respuestas:

20

Puede intentar agregar un Script de Google Apps para capturar cuando se edita una celda y agregar una marca de tiempo a una celda diferente. Aquí hay una respuesta anterior que es similar: ¿ Marca de tiempo de hoja de cálculo de Google?

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
   var r = s.getActiveCell();
   if( r.getColumn() == 13 ) { //checks the column
     var nextCell = r.offset(0, 1);
     if( nextCell.getValue() === '' ) //is empty?
       var time = new Date();
       time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
       nextCell.setValue(time);
   };
 };
}
OnenOnlyWalter
fuente
14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())cada vez que las celdas de la fila cambian, la fórmula se vuelve a calcular. con la "x" en la ecuación garantiza un error. que a cambio, devuelve la fecha.

Robert
fuente
55
Esa es una mezcla interesante.
ale
1
La solución más hermosa que he visto :)
mafonya
55
Por lo que puedo decir, esto en realidad no funciona. Para ser claros, funciona, pero no se actualiza para filas específicas. Cuando coloco esto y lo arrastro a través de varias filas, luego edito cualquier cosa en cualquier lugar de la hoja, todas las filas se recalculan y actualizan.
nhgrif
1
¡Guauu! Funcionó para mi. Aquí hay una versión abreviada: = iferror (SUM (A2: O2) + "x", today ()) y arrastrándola automáticamente actualiza los números de fila.
Ilya Evdokimov
1

Este es mi script, ponga en la última columna esta información:

  1. Insertar en la celda (en la última celda = última columna para la fila que modifica) - Fecha en GMT -3, si desea poner lo mismo en otra TZ simplemente modifique -3 para su zona horaria concurrente. Si desea poner la fecha automáticamente en su TZ predeterminada, simplemente modifique esto:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. Inserte un comentario con el usuario de Cell + que lo modifica.

  3. Aparece una ventana emergente cuando actualiza algo. Solo aparece al usuario activo.

    function onEdit(event)
    {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var actSht = event.source.getActiveSheet();
        var actRng = event.source.getActiveRange();
    
        var index = actRng.getRowIndex();
        var dateCol = actSht.getLastColumn();
        var lastCell = actSht.getRange(index,dateCol);
        var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    
        lastCell.setValue(date);
        lastCell.setComment("Ultima Modificacion: " + actRng.getA1Notation() +' por '+Session.getActiveUser());
        ss.toast('Ultima Modificacion = '+ actRng.getA1Notation()+' por '+Session.getActiveUser());
    }
    
Matias
fuente
1

He creado una función que escribe una nueva Fecha cuando se modifica la celda referenciada. En este caso, el valor de la celda es VERDADERO o FALSO, pero puede editarlo a cualquier valor.

function WhenUpdated(cell1) {
  if(cell1){
    return new Date();
  }
  else return null;
}
Gonzalo
fuente
1

Aquí hay una versión que encuentra la columna usando el encabezado, en lugar de codificar el número de columna, y usa una zona horaria personalizada:

function updateModified(options) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (options.sheetName && sheet.getName() != options.sheetName) {
    return;
  }

  var modifiedColumnName = options.modifiedColumnName || 'Modified';
  var header = sheet.getDataRange().offset(0, 0, 1).getValues()[0];
  var modifiedColumn;
  for (var i=0; i < header.length; i++) {
    if (header[i].trim() == modifiedColumnName) {
      modifiedColumn = i + 1;
      break;
    }
  }
  if (typeof modifiedColumn != 'number') {
    throw new Error("Can't find column with name: " + modifiedColumnName);
  }

  var activeCell = sheet.getActiveCell();
  if (activeCell.getColumn() == modifiedColumn) {
    return;
  }

  var modifiedCell = sheet.getRange(activeCell.getRow(), modifiedColumn);
  var formattedDate = Utilities.formatDate(new Date(), "America/Los_Angeles", "M/dd/yy HH:mm");
  modifiedCell.setValue(formattedDate);
}

function onEdit() {
  updateModified({sheetName: 'Jobs'});
}

Para usar UTC, simplemente cambie la zona horaria a UTC.

Benjamin Atkin
fuente
-4

Simplemente escriba "Última actualización:" en una celda y escriba "= ahora ()" en la celda junto a ella. ¡Eso debería hacer el trabajo!

Ye Yaroo
fuente
1
Esto solo funcionará por celda, no por fila como se indica en la pregunta
1owk3y