Columna de actualización automática en la hoja de cálculo de Google que muestra la última fecha de modificación

37

Intentando encontrar una manera de hacer que la columna dos se actualice automáticamente para mostrar una marca de tiempo de la última actualización. Me doy cuenta de que el documento muestra una marca de tiempo de la última modificación, pero tenemos muchos clientes que acceden y ajustan el documento al mismo tiempo. Así que esta solicitud fue presentada. Admito que no he hecho la codificación, así que esto está más allá de mí.

Myanda había publicado algo que parecía en el camino correcto, pero no estamos seguros de cómo implementarlo para nuestras necesidades:

¿Marca de tiempo de hoja de cálculo de Google?

RichGonzalez
fuente
Sería útil si nos pudiera vincular al documento o proporcionar un documento de ejemplo de lo que está buscando. Puedo modificar mi otra respuesta en consecuencia, pero no estoy seguro exactamente de lo que estás preguntando. ¿Solo necesita una sola celda actualizada con una marca de tiempo que muestre cuándo se actualizó toda la hoja de cálculo?
OnenOnlyWalter
Hola Onen Lo que estamos buscando es, en la columna 2, cada fila se actualiza con una marca de tiempo cada vez que se actualiza cualquier celda en su fila respectiva. No puedo publicar el documento porque es confidencial, lamentablemente. Pero contiene 21 columnas y 60 filas. ¿Esto ayuda?
RichGonzalez
Lo tengo, déjame echar un vistazo a mi código original y
responderte
Muy apreciado Onen!
RichGonzalez

Respuestas:

36

Ok, aquí hay una versión modificada del código en mi respuesta anterior:

function onEdit(e) {
  // Your sheet params
  var sheetName = "MySheet";
  var dateModifiedColumnIndex = 2;
  var dateModifiedColumnLetter = 'B';

  var range = e.range; // range just edited
  var sheet = range.getSheet();
  if (sheet.getName() !== sheetName) {
    return;
  }

  // If the column isn't our modified date column
  if (range.getColumn() != dateModifiedColumnIndex) { 
    var row = range.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
    var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
    dateModifiedRange.setValue(time);
  };
 };

Lo que esto hace es tomar la fila de cualquier celda que se cambie y asignar una marca de tiempo a la segunda columna de esa fila en particular.

Para implementar, todo lo que necesita hacer es ir a la hoja de cálculo y hacer clic en Tools> Script Editor. En la página del editor resultante, simplemente pegue esto allí. Dado que esta es una onEdit()función, debería funcionar sin tener que agregar nada más a las celdas de su hoja de cálculo, simplemente péguela en el editor y guárdela.

Para la marca de tiempo, configuré el formato en MM / dd / aa y dejé la hora. Si desea cambiarlo, simplemente puede cambiar el uso de Utilities.formatDate.

OnenOnlyWalter
fuente
Onen, ¡esto funciona perfectamente! Muchas gracias!
RichGonzalez
1
¡Alegra oírlo! ¿Puede marcar esta respuesta con una marca de verificación entonces :) Diría que fue para que otras personas puedan saber que esta solución funciona, pero también es porque me gustaría los puntos: P
OnenOnlyWalter
Lo haré Definitivamente funciona. Una pregunta de seguimiento. Nada tan halagado. Cambiar a PST no parece cambiarlo a la hora estándar del Pacífico, pero EST funciona. ¿Java lee PST como una abreviatura diferente? ¿Y hay una manera de mostrar el tiempo como un tiempo de 12 horas vs tiempo militar?
RichGonzalez
1
La marca de tiempo no funciona para mí. Conmigo "20yy-MM-dd HH: mm" funciona en su lugar. Pienso 'dd; tiene que estar en minúsculas o no funciona (a menos que sea enero, que fue el caso cuando esto se escribió, jajajaja).
Riccardo
1
Tenga en cuenta que el uso de "DD" para .formatDate()obtendrá el "Día del año", por ejemplo, 365 para el 31 de diciembre. Probablemente desee "dd". Puede ver una lista completa de los valores de formato de fecha aquí: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen
8

Para su información, la respuesta aceptada se utiliza DDcomo formato de día, lo que le dará algo así como "312", es decir, el día 312 del año.

Usé esto:

"yyyy-MM-dd, hh:mm:ss"

para obtener esto:

2013-11-12, 03:43:20
Dan Nguyen
fuente
1
¿Por qué no corregir la respuesta aceptada?
alexkovelsky
4

Espero que esto esté bien poner aquí. A continuación se muestra una modificación de la función anterior, pero para hacerlo para una fila (fila 9) en lugar de columnas. Descubrir cómo usar la asignación de columna fue muy frustrante, pero terminó siendo extremadamente simple. Gracias a OnenOnlyWalter por el código original:


function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); // Get spreadsheet name 
    var r = s.getActiveCell(); // store active cell name in current spreadsheet 
  var cell1 = 9 // This is the row I want to put values
  if(r.getRow() != cell1) { // Ignores this row (where I put the dates)
    var column = r.getColumn();  // Get column # from active cell
    var time = new Date(); // Get date and time of last mod
    time = Utilities.formatDate(time, "GMT-08:00", "MM/DD/yy, hh:mm:ss"); // Format date and time
    SpreadsheetApp.getActiveSheet().getRange(cell1,column).setValue(time); // put in time in cell
  };
 };
user2023699
fuente
Esto pareció funcionar bastante bien para mí. Gracias por corregir el error de la fila 8 de @ OnenOnlyWalter.
Zlatty
Dado que los relojes de los usuarios pueden ser inexactos, ¿existe una forma estándar de obtener una marca de tiempo precisa y del lado del servidor?
Sim
@Sim Google Apps Script se ejecuta en el lado del servidor. El tiempo que obtienes es del servidor.