Comment puis-je définir automatiquement la dernière cellule mise à jour dans les feuilles de calcul Google Docs?

21

Comment puis-je définir automatiquement la dernière cellule mise à jour dans les feuilles de calcul Google Docs?

Je veux créer une colonne où la valeur des cellules sera automatiquement définie à la dernière modification de cette ligne. Est-ce possible? Comment dois-je procéder / quelle option dois-je utiliser pour définir cela?

Je vois une solution de contournement pour MS Excel, mais je pense que Google Docs devrait avoir quelque chose de similaire, non? (doigts croisés)

Nous avons plusieurs personnes qui éditent une grande feuille. Nous pouvons voir l'historique des révisions, mais ce serait mieux si nous avions également une colonne des dates de «dernière mise à jour».

cwd
la source
As-tu essayé? Si cela fonctionne, veuillez le marquer comme tel, voir webapps.stackexchange.com/faq#howtoask .
Jacob Jan Tuinstra

Réponses:

20

Vous pouvez essayer d'ajouter un script Google Apps pour capturer lorsqu'une cellule est modifiée et ajouter un horodatage à une cellule différente. Voici une réponse précédente qui est similaire: Google Spreadsheet Timestamp?

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
la source
semble bon je vais essayer
cwd
Veuillez essayer ma réponse à la barre latérale du service HTML
Daniel
14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())chaque fois que les cellules de la ligne changent, la formule recalcule. avec le "x" dans l'équation, il garantit une erreur. qui en retour, renvoie la date.

Robert
la source
5
C'est une kluge intéressante.
ale
1
La plus belle solution que j'ai jamais vue :)
mafonya
5
Pour autant que je sache, cela ne fonctionne pas vraiment. Pour être clair, cela fonctionne, mais il n'est pas mis à jour pour des lignes spécifiques. Lorsque je le mets et le fais glisser sur plusieurs lignes, puis que je modifie n'importe quoi sur la feuille, toutes les lignes sont recalculées et mises à jour.
nhgrif
1
Hou la la! Ça a marché pour moi. Voici une version raccourcie: = iferror (SUM (A2: O2) + "x", today ()) et en le faisant glisser, les numéros de ligne sont automatiquement mis à jour.
Ilya Evdokimov
1

Voici mon script, mettez dans la dernière colonne ces informations:

  1. Insérer dans la cellule (dans la dernière cellule = dernière colonne de la ligne que vous modifiez) - Date en GMT -3, si vous souhaitez mettre la même chose dans d'autres TZ, modifiez simplement le -3 pour votre fuseau horaire simultané. Si vous souhaitez mettre la date automatiquement dans votre TZ par défaut, modifiez simplement ceci:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. Insérez un commentaire avec la cellule + l'utilisateur qui le modifie.

  3. Affichez une fenêtre contextuelle lorsque vous mettez à jour quelque chose. N'apparaissent qu'à ActiveUser.

    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
la source
1

J'ai créé une fonction qui écrit une nouvelle date lorsque la cellule référencée est modifiée. Dans ce cas, la valeur de la cellule est TRUE ou FALSE mais vous pouvez la modifier à n'importe quelle valeur.

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

Voici une version qui trouve la colonne à l'aide de l'en-tête, plutôt que de coder en dur le numéro de colonne, et utilise un fuseau horaire personnalisé:

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

Pour utiliser UTC, changez simplement le fuseau horaire en UTC.

Benjamin Atkin
la source
-4

Tapez simplement "Dernière mise à jour:" dans une cellule et tapez "= maintenant ()" dans la cellule à côté! Cela devrait faire l'affaire!

Ye Yaroo
la source
1
Cela ne fonctionnera que par cellule, pas par ligne, comme indiqué dans la question
1owk3y