Jak mogę automatycznie ustawić „ostatnią aktualizację” komórki w wierszu Arkusze kalkulacyjne Dokumentów Google?

21

Jak mogę automatycznie ustawić „ostatnią aktualizację” komórki w wierszu Arkusze kalkulacyjne Dokumentów Google?

Chcę utworzyć kolumnę, w której wartość komórek zostanie automatycznie ustawiona na czas ostatniej zmiany tego wiersza. czy to możliwe? Jak to zrobić / jakiej opcji używam, aby to ustawić?

Widzę obejście dla MS Excel, ale myślę, że Dokumenty Google powinny mieć coś podobnego, prawda? (skrzyżowane palce)

Mamy wiele osób edytujących duży arkusz. Możemy zobaczyć historię zmian, ale byłoby lepiej, gdybyśmy mieli również kolumnę z datami „ostatniej aktualizacji”.

cwd
źródło
Czy próbowałeś? Jeśli to działa, proszę oznaczyć jako takie, patrz webapps.stackexchange.com/faq#howtoask .
Jacob Jan Tuinstra

Odpowiedzi:

20

Możesz spróbować dodać skrypt Google Apps do przechwytywania podczas edycji komórki i dodać znacznik czasu do innej komórki. Oto podobna poprzednia odpowiedź: Znacznik czasu arkusza kalkulacyjnego 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
źródło
wygląda dobrze, spróbuję
cwd
14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())za każdym razem, gdy komórki w wierszu zmieniają formułę, ponownie oblicza. z „x” w równaniu gwarantuje błąd. który w zamian zwraca datę.

Robert
źródło
5
To interesujący kluge.
ale
1
Najpiękniejsze rozwiązanie, jakie kiedykolwiek widziałem :)
mafonya
5
O ile wiem, to tak naprawdę nie działa. Żeby było jasne, to działa, ale nie jest aktualizowane dla określonych wierszy. Kiedy umieszczam to i przeciągam przez wiele wierszy, a następnie edytuję wszystko w dowolnym miejscu arkusza, wszystkie wiersze są ponownie obliczane i aktualizowane.
nhgrif
1
Łał! To zadziałało dla mnie. Oto skrócona wersja: = iferror (SUMA (A2: O2) + „x”, dzisiaj ()) i przeciąganie jej automatycznie aktualizuje numery wierszy.
Ilya Evdokimov
1

To jest mój skrypt, umieść w ostatniej kolumnie następujące informacje:

  1. Wstaw do komórki (w ostatniej komórce = ostatnia kolumna dla modyfikowanego wiersza) - Data w GMT -3, jeśli chcesz wstawić to samo w innym TZ, po prostu zmodyfikuj -3 dla swojej równoczesnej strefy czasowej. Jeśli chcesz ustawić datę automatycznie w domyślnej TZ, po prostu zmodyfikuj to:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. Wstaw komentarz do komórki + użytkownika, który go zmodyfikuje.

  3. Wyświetlaj wyskakujące okienko podczas aktualizacji. Wyświetlane są tylko dla 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
źródło
1

Utworzyłem funkcję, która zapisuje nową datę, gdy komórka, do której istnieje odwołanie, zostanie zmodyfikowana. W tym przypadku wartość komórki to PRAWDA lub FAŁSZ, ale można edytować ją na dowolną wartość.

function WhenUpdated(cell1) {
  if(cell1){
    return new Date();
  }
  else return null;
}
Gonzalo
źródło
1

Oto wersja, która wyszukuje kolumnę za pomocą nagłówka zamiast na stałe wpisywać numer kolumny i używa niestandardowej strefy czasowej:

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

Aby użyć UTC, wystarczy zmienić strefę czasową na UTC.

Benjamin Atkin
źródło
-4

Po prostu wpisz „Ostatnia aktualizacja:” w jednej komórce i wpisz „= now ()” w komórce obok! To powinno wystarczyć!

Ye Yaroo
źródło
1
Będzie to działać tylko na komórkę, a nie na wiersz, jak podano w pytaniu
1owk3y