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».


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

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.


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

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

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.


-4

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


1
Cela ne fonctionnera que par cellule, pas par ligne, comme indiqué dans la question
1owk3y
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.