Mise à jour automatique de la colonne dans la feuille de calcul Google avec la date de dernière modification

37

Essayez de trouver un moyen d'avoir la colonne deux mise à jour automatique pour afficher un horodatage de la dernière mise à jour. Je me rends compte que la doc montre un horodatage de la dernière modification, mais beaucoup de clients ont accès à la doc et l’ajustent en même temps. Donc, cette demande a été faite. J'admets que je n'ai pas encore codé, donc ça me dépasse.

Myanda avait posté quelque chose qui semblait aller dans la bonne direction, mais nous ne savons pas comment le mettre en œuvre pour nos besoins:

Horodatage de la feuille de calcul Google?

RichGonzalez
la source
Cela nous aiderait si vous pouviez nous lier au document ou fournir un exemple de document de ce que vous recherchez. Je peux modifier mon autre réponse en conséquence, mais je ne suis pas sûr de ce que vous demandez. Avez-vous simplement besoin d'une seule cellule mise à jour avec un horodatage indiquant à quel moment la feuille de calcul a été mise à jour?
OnenOnlyWalter
Hey Onen. Ce que nous recherchons, dans la colonne 2, chaque ligne est mise à jour avec un horodatage à chaque fois qu'une cellule de leur ligne est mise à jour. Je ne peux pas poster le doc car c'est confidentiel malheureusement. Mais il contient 21 colonnes et 60 lignes. est-ce que cela aide?
RichGonzalez
Compris, laisse-moi jeter un oeil à mon code original et te
contacter
Très apprécié Onen!
RichGonzalez

Réponses:

36

Ok, voici une version modifiée du code dans ma réponse précédente:

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);
  };
 };

Cela permet de saisir la ligne de toute cellule modifiée et d'attribuer un horodatage à la deuxième colonne de cette ligne particulière.

Pour mettre en œuvre, tout ce que vous avez à faire est d'aller dans la feuille de calcul et de cliquer sur Tools> Script Editor. Dans la page d'édition résultante, collez simplement ceci ici. Comme il s’agit d’une onEdit()fonction, elle devrait fonctionner sans rien ajouter aux cellules de votre feuille de calcul. Il vous suffit de la coller dans l’éditeur et de la sauvegarder.

Pour l'horodatage, j'ai défini le format sur MM / jj / aa et laissé l'heure. Si vous voulez le changer, vous pouvez simplement changer l’utilisation de Utilities.formatDate.

OnenOnlyWalter
la source
Onen, cela fonctionne parfaitement! Merci beaucoup!
RichGonzalez
1
Content de l'entendre! Pouvez-vous cocher cette réponse avec une coche alors :) Je dirais que c’est pour que d’autres personnes sachent que cette solution fonctionne, mais c’est aussi parce que je voudrais les points: P
OnenOnlyWalter le
Ça ira. Cela fonctionne vraiment. Une question de suivi. Rien de complimenté. Passer à PST ne semble pas le changer à l'heure normale du Pacifique, mais EST fonctionne. Java lit-il PST comme une abréviation différente? Et y a-t-il un moyen d’afficher l’heure en tant qu’heure militaire contre 12 heures?
RichGonzalez
1
l'horodatage ne fonctionne pas pour moi. Avec moi, "20yy-MM-jj HH: mm" fonctionne à la place. Je pense 'dd; doit être en minuscule ou cela ne fonctionne pas (à moins que le mois de janvier qui était le cas au moment de la rédaction, ahahahah).
Riccardo
1
Notez que l'utilisation de "JJ" pour .formatDate()vous donnera le "Jour de l'année" - par exemple, 365 pour le 31 décembre. Vous voulez probablement "JJ". Vous pouvez voir une liste complète des valeurs de format de date ici: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen
8

Pour info, la réponse acceptée utilise DDle format de jour, qui vous donnera quelque chose comme "312", c’est-à-dire le 312e jour de l’année.

J'ai utilisé ceci:

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

pour obtenir ceci:

2013-11-12, 03:43:20
Dan Nguyen
la source
1
pourquoi ne pas corriger la réponse acceptée?
alexkovelsky
4

J'espère que c'est OK pour mettre ici. Vous trouverez ci-dessous une modification de la fonction ci-dessus, mais vous devez le faire pour une ligne (ligne 9) plutôt que pour des colonnes. Comprendre comment utiliser l'affectation de colonne était très frustrant, mais s'est avéré extrêmement simple. Merci à OnenOnlyWalter pour le code 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
  };
 };
utilisateur2023699
la source
Cela semblait bien marcher pour moi. Merci d'avoir corrigé l'erreur de la rangée 8 de @ OnenOnlyWalter.
Zlatty
Étant donné que les horloges utilisateur peuvent être inexactes, existe-t-il un moyen standard d’obtenir un horodatage précis côté serveur?
Sim
@Sim Google Apps Script s'exécute côté serveur. Le temps que vous obtenez est du serveur.