Zeitstempel mit Benutzer als Notiz (Google Tabellen Script)

In diesem Tutorial zeige ich Euch wie Ihr mit der GOOGLE TABELLEN Script Programmierung einen Zeitstempel mit Benutzer als Notiz erstellen könnt.
Das Script ist so aufgebaut dass bei der Änderung einer Zelle automatisch in einer vorher festgelegten Spalte ein Zeitstempel eingetragen wird. Wir tragen es in der Zeile ein wo auch die Änderung durchgeführt wurde. Zusätzlich bekommt die Zelle mit dem neuen Zeitstempel noch eine Notiz von uns. In dieser Notiz schreiben wir die Emailadresse von dem aktuellen Benutzer der Tabelle.



Ich habe ja bereits ein Tutorial für einen normalen Zeitstempel erstellt. Dieses Tutorial ist etwas einfacher gehalten und sieht auch ein bisschen anders aus. Falls Ihr Euch das Script ebenfalls mal anschauen wollt, dann findet Ihr es hier:
Zeitstempel programmieren in Google Tabellen

Dort findet Ihr auch noch ein paar Hinweise zum ändern des Zeitformats.

Wer jetzt das erste mal ein Google Tabellen Script programmiert, sollte sich zuerst dieses Tutorial hier anschauen:
Mein erstes Google Tabellen Script programmieren

Hier das Zeitstempel – Script zum kopieren:

Beschreibung des Scripts "Zeitstempel mit Benutzer als Notiz"

Die Funktion onEdit wird automatisch immer aufgerufen sobald eine Zelle verändert wird. Hier können wir jetzt unser Script eintragen.

Als Parameter wird für die Funktion onEdit ein Objekt benutzt welches Informationen enthält die wir jetzt nutzen können. In meinem Beispiel ist es das kleine e in der Klammer von onEdit.
e wird häufig als Abkürzung für Event benutzt weil es ein Ereignis kennzeichnet. Es wird auch statt dem "e" häufig "event" benutzt.

Hier könnt Ihr natürlich auch ein anderen Namen benutzen. Achtet aber darauf dass Ihr den dann unten auch überall anpassen müsst.

Als nächsten deklarieren wir ein paar Variablen.

Hier könnt Ihr die Spalte bestimmen wo später der Zeitstempel eingetragen werden soll. Wenn ihr also viele Spalten nutzen solltet, dann erhöht die Zahl entsprechend, damit der Zeitstempel weiter rechts eingetragen wird.
In meinem Beispiel benutze ich die 3. Das bedeutet das der Eintrag in Zeile C vorgenommen wird. Also A=1, B=2, C=3 und so weiter.

Mit e.source.getActiveSheet() greifen wir auf das Tabellenblatt zu welches gerade geändert wurde und weisen es der Variablen tabellenblatt zu. Das e ist das Objekt welches wir bei der Funktion oben als Parameter eingetragen haben. Solltet Ihr dort etwas anderes eingetragen haben müsst Ihr das hier entsprechend anpassen.

Die Emailadresse vom aktuellen Benutzer können wir mit Session.getActiveUser() auslesen und weisen es der Variablen userEmail zu.

Um einen Zeitstempel in die Zelle zu schreiben müssen wir erst einmal ein Datum oder sogenannten Zeitstempel zusammen basteln. Das machen wir über newDate().
Wir können das Datumsformat über Utilities.formatDate() anpassen. Wir erzeugen also ein neues Datums Objekt mit newDate() und können jetzt auch noch die Zeitzone anpassen. Hier benutze ich für unsere Zone "GMT+0100" das bedeutet eine Stunde mehr als die Greenwich Mean Time Zone.

Im hinteren Teil könnt Ihr Euch das Format so anpassen wie Ihr das möchtet. Hier habe ich bereits beschrieben wie das mit dem Format funktioniert:
Zeitstempel programmieren in Google Tabellen

Das ganze wird jetzt der Variablen zeitStempel zugewiesen.

Die Position für den Zeitstempel

Wir müssen ja jetzt den Zeitstempel noch irgendwo eintragen. Dafür müssen wir natürlich auch erst einmal wissen wo wir uns aktuell befinden. Die Spalte haben wir oben ja schon mit zeitStempelSpalte festgelegt also Spalte 3 (C). Jetzt brauchen wir nur noch die Zeile.

e.source.getActiveRange gibt uns die aktuelle Position zurück. Wir müssen von dieser Position noch die Spalte auslesen. Das machen wir mit getRowIndex.

Um jetzt den Zeitstempel einzutragen, müssen wir die Zelle bestimmen wo das geschehen soll. mit getRange greifen wir genau auf die korrekte Zeile und Spalte zu.

Ihr seht ja das die Parameter von getRange einmal die Zeile und dann die Spalte ist.

In diese Zelle die wir jetzt bestimmt haben tragen wir mit setValue() unseren Zeitstempel ein. Der zusätzliche Aufruf setComment() fügt dann in die Zelle den Kommentar ein. Als Parameter übergeben wir die Variable mit der Emailadresse.

Das war es auch schon wieder mit dem Tutorial: "Zeitstempel mit Benutzer als Notiz". Anfangs ist es nicht ganz so leicht, aber umso mehr man sich mit dem Thema beschäftigt umso leichter fällt das einen.

Also nicht aufgeben 😉

Schaut auch mal nach meiner kleinen Google Tabellen Script Snippets – Sammlung. Ich habe hier einige kleine Scripte geschrieben die Ihr vielleicht für Eurer Projekt nutzen könnt.

Dieses Tutorial ist extra für Anfänger die sich mit dem Tabellenkalkulationsprogramm GOOGLE TABELLEN / SPREADSHEETS noch nicht so viel beschäftigt haben. Es zeigt die Funktionen und Möglichkeiten Schritt für Schritt.



Das könnte Dich auch interessieren

10 Kommentare

  1. Matthias sagt:

    Hallo,
    zunächst vielen Dank für das super Tutorial, sehr hilfreich!

    Besteht die Möglichkeit das Script auf einen Tab zu beschränken, also dass das Sheet nur in einem Tab ausgeführt wird und nicht in allen?

    Beste Grüße
    Matthias

    • Chris sagt:

      Die Funktion onEdit erhält die Daten über das e welches in der Funktion oben bei den Parametern eingetragen ist. In diesem e stecken eine Menge Daten. Du kannst dadurch zum Beispiel auch den Tabellenblatt Namen auslesen.
      Das sieht dann in etwa so aus:
      var activeSheet = e.source.getActiveSheet()
      wenn Du jetzt mit activeSheet.getName() den Namen der Tabelle erhältst (aktuelles Tabellenblatt wo eine Zelle geändert wurde), kannst Du diesen benutzen um ihn über eine IF Abfrage mit einem von Dir bestimmten Namen zu vergleichen.
      Die Zeitstempel Script Zeilen packst Du dann in die IF Abfrage zwischen den geschweiften Klammern rein. Das heißt der Zeitstempel wird nur ausgeführt wenn die Bedingung erfüllt wurde, also die Tabellennamen übereinstimmen.
      Wenn Du das Script im ScriptEditor ausführst kann es zu einem Fehler kommen. Du musst das wirklich mit einer Eingabe testen weil nur dann etwas der Funktion übergeben wird.
      Viele Grüße
      Chris

  2. Melinda sagt:

    Herzlichen Dank für das tolle Tutorial!!!

    Hat super geklappt.

    Ich würde gerne die Länge der Spalte für die Datumsausgabe ändern – var zeitStempelSpalte=3;
    Sollte so funktionieren: Nur in "C6:C38" ausgeben.
    Ist getRowIndex() das Problem?

    var aktuelleZeile=aktuelleZelle.getRange("C6:C38"); geht auch nicht

    Habe mich stundenlang bemüht eine Lösung zu finden. Es funzt nichts.

    Wäre toll, wenn du mir helfen möchtest

    Liebe Grüße,
    Melinda

    • Chris sagt:

      Hallo Melinda,
      wenn Du Deine gesamte Funktion aus dem Beispiel in der onEdit Funktion eingebaut hast, dann wird diese immer komplett ausgeführt.
      Damit diese aber nur in bestimmte Zellen ausgeführt wird musst Du natürlich noch etwas anpassen. Da gibt es je nach Wunsch natürlich verschiedene Lösungsmöglichkeiten.
      Schau Dir mal in diesem Artikel die Kommentare an (meine Antwort auf Raphael). Dort ist ein sehr kurzes Script welches Dir das ganz kurz zeigt wie Du das in der onEdit Funktion lösen könntest.
      Zeitstempel programmieren in Google Tabellen
      Viele Grüße
      Chris

  3. Rumorhashit sagt:

    Das Datum + Zeit wird eingetragen, die E-Mail allerdings nicht. Kann es sein, dass nur Google-Mails funktionieren?

    • Chris sagt:

      Das ist wohl nicht davon abhängig sondern von den Sicherheitsrichtlinien. Schau Dir mal den Eintrag unter getActiveUser() an:
      https://developers.google.com/apps-script/reference/base/session

      • Rumorhashit sagt:

        Hallo, ich habe es mit privaten Konten probiert. Lediglich bei einem Konto (Gmail) wurde die E-Mail-Adresse eingetragen. Bei allen anderen nicht (Web.de, GMX ect.). Die Einstellungen in den Google-Konten habe ich überall gleich gewählt.

        • Chris sagt:

          Wenn Du die Tutorials von mir kennst, weißt Du ja dass ich das nur hobbymäßig mache und kein Profi bin. Ich versuche das gelernte hier zu zeigen und die letzten etwas komplizierteren Tutorials von mir stellen dann auch schon meine Grenzen dar. Wie das jetzt mit den Sicherheitsrichtlinien im Bereich der Emails ist weiß ich deshalb nicht und habe das bisher auch noch nicht mit verschiedenen Emailaccounts getestet.
          Man könnte jedoch sicher auch das Script so umschreiben dass nur Personen die den Sicherheitsrichtlinien entsprechen (also Ihre Emailadresse preisgeben) die Änderungen vornehmen dürfen.
          Gerade wenn es um wichtige Bereiche oder Änderungen geht will man ja vielleicht wissen wer das war. Wie man diese dann allerdings anpassen kann, sodass Einträge anschließend möglich sind weiß ich derzeit nicht.
          Viele Grüße
          Chris

  4. Alicia sagt:

    Hallo,

    ich bin ganz neu in dem Thema und kenne mich bisher wenig aus.
    Ist es möglich, dass das Skript auf ein Tabellenblatt begrenzt wird?
    Und kann man es so einstellen, dass z. B. im Bereich von Spalte A – D ein Zeitstempel eingetragen wird und wenn man beispielsweise in Spalte E – H etwas ändert dort ein separater Zeitstempel hinterlegt wird, auch wenn etwas in derselben Zeile geändert wird? Sozusagen die Spaltenbereiche unabhängig voneinander sind?

    Viele Grüße
    Alicia

    • Chris sagt:

      Ja, das kannst Du alles machen. Du siehst ja in der Funktion onEdit oben den Parameter e. Über diesen kannst Du sehr viele Informationen beziehen.
      Hiermit kannst du dann die Zeile, Spalte und den Tabellennamen auslesen. Über Bedingungen kannst Du dann festlegen dass nur dann ein Zeitstempel gesetzt wird wenn sich die geänderte Zelle innerhalb Deines gewünschten Bereichs befindet. Die Bedingungen kannst Du sehr vielschichtig gestalten. Die erste Bedingung wäre zum Beispiel der Tabellenname. Sollte der nicht stimmen kannst Du den gesamten Block inklusive aller Verschachtelungen überspringen. Innerhalb des Blocks (also wenn der Tabellenname stimmt) kannst Du dann für Zellen und Spaltenbereiche die verschiedensten Bedingungen zum Beispiel mit if Abfragen festlegen.
      Ein kleines Beispiel für das Auslesen solch einer Information kannst Du schon mal hier sehen 😉
      function onEdit(e){
      var range = e.range;
      range.setNote('Zuletzt geändert: ' + new Date() + "\n"+
      "Zeile: " + e.range.getRow() + "\n"+
      "Spalte: " + e.range.getColumn() + "\n"+
      "Tabellenname: " + e.source.getSheetName() + "\n"+
      "Zelle: " + e.range.getA1Notation() + "\n"+
      "ID: " + e.source.getId());
      }

      Viele Grüße
      Chris

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.