Aktualna data jako zmienna w Dokumentach Google?

12

Czy można dodać (wstawić) zmienną dla bieżącej daty do Dokumentów Google, która aktualizowałaby się automatycznie przy każdym otwarciu dokumentu?

Niektóre kryteria:

  • Pozycja daty powinna być zmienna, tzn. Pozwalać mi wstawiać datę inne pozycje strony / akapitu

  • Dokument powinien być nadal dostępny, tzn. Osoby otwierające mój dokument będą również wyświetlane z bieżącą datą

orschiro
źródło
Której strefy czasowej należy użyć do obliczenia bieżącej daty?
Rubén
Aby był wszechstronny, może zdefiniowany przez użytkownika w ustawieniach? A może można go jakoś automatycznie pobrać z ustawień Dokumentów Google użytkownika?
orschiro
1
Właśnie dodałem moją próbę kodowania. Jeśli chodzi o strefę czasową, użyłem GMT-5, ale można ją łatwo zmienić na tę, której potrzebujesz. To nie jest kompletne rozwiązanie.
Rubén,

Odpowiedzi:

9

Krótka odpowiedź

W tej chwili zmienne nie są wbudowaną funkcją Dokumentów Google i Google Apps Script, platforma do rozszerzania Dokumentów Google, nie zawiera klasy ani metody ich obsługi.

Alternatywy

Alternatywa 1

Jedną z możliwości jest użycie wzorca tekstowego, ale należy mieć pewność, że będzie on pasował tylko do daty, którą chcesz zaktualizować.

Alternatywa 2

Inną alternatywą jest użycie klasy NamedRange, ale należy o tym pamiętać

  1. przesunięcie zasięgu spowoduje utratę nazwy 1 .
  2. zamiana tekstu w nazwanym zakresie na wiele elementów działa tylko za pierwszym razem 2 .

Kod:

Poniższy kod, przeznaczony do użycia w skrypcie powiązanym z Dokumentem Google, ma dwie główne funkcje:

  1. Wstaw dzisiejszą datę
  2. Zaktualizuj dzisiejszą datę

Do celów debugowania używane są

  1. data i godzina, a nie tylko data.
  2. niestandardowe menu do uruchamiania głównych funkcji.

„Znane problemy”: Funkcja aktualizacji zastępuje cały akapit.

Aby przetestować kod, skopiuj go, a następnie przejdź do Dokumentów Google, utwórz nowy dokument, kliknij Narzędzia> Edytor skryptów, wybierz Pusty projekt, wklej kod, zapisz projekt, przypisz nazwę, uruchom na czas, aby autoryzować aplikację , zamknij dokument i otwórz ponownie. Zostanie wyświetlone nowe menu o nazwie „Narzędzia”. Stamtąd można wywoływać główne funkcje.

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


Poniżej znajduje się kilka elementów różnego rodzaju (pytania, specyfikacje itp.), Które mogą posłużyć do inspiracji lub wskazać „właściwy kierunek”, aby znaleźć „rozwiązanie”


Przypisy

Ruben
źródło
Czy to oznacza, że ​​nie jest to możliwe?
Jacob Jan Tuinstra
@JacobJanTuinstra: IMHO, tak, nie jest to możliwe. Możliwe jest znalezienie obejścia, ale wymaga to szerszego kontekstu. Myślę, że proszenie o te informacje powinno odbywać się w komentarzach, ale nigdzie nie mogę komentować :)
Rubén
1
@orschiro Cieszę się, że to zadziałało. Myślę, że zamiast przekształcić go w rozszerzenie do Chrome, może być dodatkiem do Dokumentów Google.
Rubén,
1
@ChristopherFrancisco: Kod jest przeznaczony do użycia w skrypcie ograniczonym, ale można go dostosować do użycia z aplikacji, ale to inne pytanie, które jest bardziej odpowiednie dla Przepełnienia stosu .
Rubén
1
@ChristopherFrancisco Właśnie dodałem link do oficjalnego przewodnika na temat granic skryptów w plikach edytora Dokumentów Google.
Rubén