Automatische Aktualisierung der Spalte in der Google-Tabelle mit dem Datum der letzten Änderung

37

Es wurde versucht, herauszufinden, wie die zweite Spalte automatisch aktualisiert werden kann, um einen Zeitstempel des letzten Updates anzuzeigen. Mir ist klar, dass das Dokument einen Zeitstempel der letzten Änderung anzeigt, aber wir haben viele Kunden, die gleichzeitig auf das Dokument zugreifen und es anpassen. Also wurde diese Anfrage gestellt. Ich gebe zu, dass ich noch nicht codiert habe, das ist mir ein Rätsel.

Myanda hatte etwas veröffentlicht, das auf dem richtigen Weg zu sein schien, aber wir sind uns nicht sicher, wie wir es für unsere Bedürfnisse umsetzen sollen:

Google Spreadsheet Timestamp?

RichGonzalez
quelle
Es wäre hilfreich, wenn Sie uns mit dem Dokument verknüpfen oder ein Beispieldokument für das bereitstellen könnten, wonach Sie suchen. Ich kann meine andere Antwort entsprechend ändern, bin mir aber nicht sicher, wonach Sie fragen. Benötigen Sie nur eine einzelne Zelle mit einem Zeitstempel, der anzeigt, wann die gesamte Tabelle aktualisiert wurde?
OnenOnlyWalter
Hey Onen. Was wir suchen, ist, dass in Spalte 2 jede Zeile mit einem Zeitstempel aktualisiert wird, sobald eine Zelle in der jeweiligen Zeile aktualisiert wird. Ich kann das Dokument leider nicht veröffentlichen, da es vertraulich ist. Es enthält jedoch 21 Spalten und 60 Zeilen. Hilft das?
RichGonzalez
Verstanden, lassen Sie mich einen Blick auf meinen Originalcode werfen und auf Sie
zurückkommen
Sehr geschätzt Onen!
RichGonzalez

Antworten:

36

Ok, hier ist eine modifizierte Version des Codes in meiner vorherigen Antwort:

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

Dies erfasst die Zeile einer Zelle, die geändert wird, und weist der zweiten Spalte dieser bestimmten Zeile einen Zeitstempel zu.

Um dies zu implementieren, müssen Sie nur in die Tabelle gehen und auf Tools> klicken Script Editor. Fügen Sie dies einfach in die resultierende Editor-Seite ein. Da dies eine onEdit()Funktion ist, sollte sie funktionieren, ohne dass Sie den Zellen Ihrer Tabelle weitere Informationen hinzufügen müssen. Fügen Sie sie einfach in den Editor ein und speichern Sie sie.

Für den Zeitstempel habe ich das Format auf MM / TT / JJ gesetzt und die Zeit verlassen. Wenn Sie es ändern möchten, können Sie einfach die Verwendung von ändern Utilities.formatDate.

OnenOnlyWalter
quelle
Onen, das funktioniert einwandfrei! Ich danke dir sehr!
RichGonzalez
1
Froh das zu hören! Kannst du diese Antwort dann mit einem Häkchen markieren :) Ich würde sagen, dass es so war, dass andere wissen können, dass diese Lösung funktioniert, aber es ist auch so, denn ich möchte die Punkte: P
OnenOnlyWalter
Wird besorgt. Es funktioniert definitiv. Eine Folgefrage. Nichts als Kompliment. Die Umstellung auf PST scheint sich nicht auf die pazifische Standardzeit zu ändern, aber EST funktioniert. Liest Java PST als andere Abkürzung? Und gibt es eine Möglichkeit, die Zeit als 12-Stunden-Zeit gegen die Militärzeit anzuzeigen?
RichGonzalez
1
Zeitstempel funktioniert bei mir nicht. Bei mir funktioniert stattdessen "20yy-MM-dd HH: mm". Ich denke 'dd; muss in Kleinbuchstaben geschrieben werden oder es funktioniert nicht (außer im Januar, als dies geschrieben wurde, ahahahah).
Riccardo
1
Beachten Sie, dass Sie mit "DD" für .formatDate()den "Tag im Jahr" erhalten - z. B. 365 für den 31. Dezember. Sie möchten wahrscheinlich "dd". Eine vollständige Liste der Datumsformatwerte finden Sie hier: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen
8

Zu Ihrer Information, die akzeptierte Antwort verwendet DDdas Tagesformat, das Ihnen so etwas wie "312", dh den 312. Tag des Jahres, liefert.

Ich habe das benutzt:

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

um dies zu bekommen:

2013-11-12, 03:43:20
Dan Nguyen
quelle
1
warum nicht die akzeptierte Antwort korrigieren?
Alexkovelsky
4

Ich hoffe das ist OK um hier zu setzen. Unten finden Sie eine Modifikation der obigen Funktion, jedoch nur für eine Zeile (Zeile 9) und nicht für Spalten. Es war sehr frustrierend, herauszufinden, wie man die Spaltenzuordnung verwendet, aber es endete damit, dass es extrem einfach war. Dank an OnenOnlyWalter für den Originalcode:


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
quelle
Das schien für mich ganz gut zu funktionieren. Vielen Dank, dass Sie den Fehler in Zeile 8 von @ OnenOnlyWalter behoben haben.
Zlatty
Gibt es einen Standardweg, um einen serverseitigen, genauen Zeitstempel zu erhalten, da Benutzeruhren ungenau sein können?
Sim
@Sim Google Apps Script wird serverseitig ausgeführt. Die Zeit, die Sie bekommen, ist vom Server.