Aktuelles Datum als Variable in Google Text & Tabellen?

12

Ist es möglich, eine Variable für das aktuelle Datum in Google Text & Tabellen einzufügen (einzufügen), die bei jedem Öffnen des Dokuments automatisch aktualisiert wird?

Einige Kriterien:

  • Die Datumsposition sollte variabel sein, dh ich kann das Datum an einer anderen Position einer Seite / eines Absatzes einfügen

  • Das Dokument sollte weiterhin gemeinsam nutzbar sein, dh Personen, die mein Dokument öffnen, werden auch mit dem aktuellen Datum angezeigt

Orschiro
quelle
Welche Zeitzone sollte zur Berechnung des aktuellen Datums verwendet werden?
Rubén
Um es vielseitig zu haben, vielleicht vom Benutzer selbst in den Einstellungen definiert? Oder kann es automatisch aus den Google Text & Tabellen-Einstellungen des Nutzers abgerufen werden?
Orschiro
1
Habe gerade meinen Codierungsversuch hinzugefügt. In Bezug auf die Zeitzone habe ich GMT-5 verwendet, aber es könnte leicht auf die von Ihnen benötigte geändert werden. Es ist keine vollständige Lösung.
Rubén

Antworten:

9

Kurze Antwort

Derzeit sind Variablen keine integrierte Funktion von Google Text & Tabellen, und Google Apps Script, die Plattform zum Erweitern von Google Text & Tabellen, enthält keine Klasse oder Methode, um sie zu verarbeiten.

Alternativen

Alternative 1

Eine Alternative ist die Verwendung eines Textmusters. Sie sollten jedoch sicherstellen, dass es nur mit dem Datum übereinstimmt, das Sie aktualisieren möchten.

Alternative 2

Eine andere Alternative ist die Verwendung der Klasse NamedRange, aber denken Sie daran

  1. Wenn Sie den Bereich verschieben, verliert er seinen Namen 1 .
  2. Das Ersetzen von Text in einem benannten Bereich durch mehrere Elemente funktioniert nur beim ersten Mal 2 .

Code:

Der folgende Code, der in einem an ein Google-Dokument gebundenen Skript verwendet werden soll , hat zwei Hauptfunktionen:

  1. Geben Sie das heutige Datum ein
  2. Aktualisieren Sie das heutige Datum

Zum Debuggen werden verwendet

  1. Datum und Uhrzeit statt nur Datum.
  2. Benutzerdefinierte Menüs zum Auslösen der Hauptfunktionen.

"Bekannte Probleme": Die Aktualisierungsfunktion ersetzt den gesamten Absatz.

Um den Code zu testen, kopieren Sie ihn, gehen Sie zu Google Text & Tabellen, erstellen Sie ein neues Dokument, klicken Sie auf Extras> Skripteditor, wählen Sie Leeres Projekt aus, fügen Sie den Code ein, speichern Sie das Projekt, weisen Sie einen Namen zu und führen Sie die App rechtzeitig aus, um sie zu autorisieren Schließen Sie Ihr Dokument und öffnen Sie es erneut. Ein neues Menü mit dem Namen "Dienstprogramme" wird angezeigt. Von dort aus können Sie die Hauptfunktionen aufrufen.

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Utilities')
      .addItem('Insert Today\'s Date', 'insertTodayAtCursor')
      .addItem('Update Today\'s Date', 'setTodayNamedRange')
      .addToUi();
}

function todayDate(){
  return Utilities.formatDate(new Date(), "GMT-5", "yyyy-MM-dd'T'HH:mm:ss'Z'"); // "yyyy-MM-dd"
}

/**
 * Inserts the today's date at the current cursor location and create a NamedRange.
 */
function insertTodayAtCursor() {
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  var cursor = doc.getCursor();

  if (cursor) {
    // Attempt to insert today's date at the cursor position. If insertion returns null,
    // then the cursor's containing element doesn't allow text insertions.
    var date = todayDate();
    var element = cursor.insertText(date);
    if (element) {
      var rangeBuilder = doc.newRange();
      rangeBuilder.addElement(element);
      return doc.addNamedRange(str, rangeBuilder.build()); 
    } else {
      DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
    }
  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

function setTodayNamedRange(){
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  // Retrieve the named range
  var namedRanges = doc.getNamedRanges();
  var newRange = doc.newRange();
  var date = todayDate();
  for(var i=0; i<namedRanges.length; i++){

    if(namedRanges[i].getName() == str){

      var rangeElement = namedRanges[i].getRange().getRangeElements();

      for (var j=0; j<rangeElement.length; j++){

        var element = rangeElement[j].getElement().asText().editAsText().setText(date);
        newRange.addElement(element);
      }
    }
  }
  doc.addNamedRange(str, newRange.build());
}


Im Folgenden finden Sie einige Elemente verschiedener Art (Fragen, Spezifikationen usw.), die dazu dienen können, sich inspirieren zu lassen oder auf die "richtige Richtung" zu verweisen, um eine "Lösung" zu finden.


Fußnoten

Rubén
quelle
Heißt das, es ist nicht möglich?
Jacob Jan Tuinstra
@JacobJanTuinstra: IMHO, ja, das ist nicht möglich. Was möglich sein könnte, ist eine Problemumgehung zu finden, aber es ist mehr Kontext erforderlich. Ich denke, dass das Bitten um diese Informationen in Kommentaren erfolgen sollte, aber ich kann noch nirgendwo kommentieren :)
Rubén
1
@orschiro Ich bin froh zu wissen, dass es bei dir funktioniert hat. Anstatt in eine Chrome-Erweiterung umgestaltet zu werden, könnte es sich meiner Meinung nach um ein Google Text & Tabellen-Add-On handeln.
Rubén
1
@ChristopherFrancisco: Der Code ist für die Verwendung in begrenzten Skripten vorgesehen, kann jedoch für die Verwendung in Ihrer App angepasst werden. Dies ist jedoch eine andere Frage, die wahrscheinlich eher für den Stapelüberlauf geeignet ist .
Rubén
1
@ChristopherFrancisco Ich habe gerade einen Link zum offiziellen Handbuch über Skriptbeschränkungen für Google Docs-Editordateien hinzugefügt.
Rubén