Data corrente come variabile in Google Documenti?


12

È possibile aggiungere (inserire) una variabile per la data corrente in un documento Google che si aggiorna automaticamente ogni volta che apro il documento?

Alcuni criteri:

  • La posizione della data dovrebbe essere variabile, cioè permettendomi di inserire la data in posizioni diverse di una pagina / paragrafo

  • Il documento dovrebbe essere ancora condivisibile, ovvero le persone che aprono il mio documento verranno visualizzate anche con la data corrente


Quale fuso orario dovrebbe essere utilizzato per calcolare la data corrente?
Rubén,

Per averlo versatile, forse definito dall'utente stesso nelle impostazioni? O può essere in qualche modo recuperato automaticamente dalle impostazioni di Google Documenti dell'utente?
Orschiro,

1
Ho appena aggiunto il mio tentativo di codifica. Per quanto riguarda il fuso orario, ho usato GMT-5 ma potrebbe essere facilmente cambiato con quello di cui hai bisogno. Non è una soluzione completa.
Rubén,

Risposte:


9

Risposta breve

Al momento, le variabili non sono una funzionalità integrata di Google Documenti e Google Apps Script, la piattaforma per estendere Google Documenti, non include una classe o un metodo per gestirli.

alternative

Alternativa 1

Un'alternativa è utilizzare un modello di testo, ma dovresti essere sicuro che corrisponderà solo alla data che desideri aggiornare.

Alternativa 2

Un'altra alternativa è utilizzare la classe NamedRange ma tenere presente che

  1. spostare l'intervallo farà perdere il nome 1 .
  2. la sostituzione del testo in un intervallo denominato con più elementi funziona solo la prima volta 2 .

Codice:

Il seguente codice, destinato ad essere utilizzato in uno script associato a un documento Google, ha due funzioni principali:

  1. Inserisci la data di oggi
  2. Aggiorna la data di oggi

Ai fini del debug vengono utilizzati

  1. data e ora, anziché solo data.
  2. menu personalizzati per attivare le funzioni principali.

"Problemi noti": la funzione di aggiornamento sostituisce l'intero paragrafo.

Per testare il codice, copiarlo, quindi andare su Google Documenti, creare un nuovo documento, fare clic su Strumenti> Editor di script, selezionare Progetto vuoto, incollare il codice, salvare il progetto, assegnare un nome, eseguire in tempo per autorizzare l'app , chiudi il tuo documento e riapri. Verrà visualizzato un nuovo menu chiamato "Utilità". Da lì puoi chiamare le funzioni principali.

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


Di seguito ci sono alcuni elementi di diverso tipo (domande, specifiche, ecc.) Che potrebbero servire per trarre ispirazione o indicare la "giusta direzione" per trovare una "soluzione"


Le note


Ciò significa che non è possibile?
Jacob Jan Tuinstra,

@JacobJanTuinstra: IMHO, sì, non è possibile. Ciò che potrebbe essere possibile è trovare una soluzione alternativa, ma è necessario più contesto. Penso che la richiesta di tali informazioni debba essere fatta nei commenti, ma non posso ancora commentare da nessuna parte :)
Rubén

1
@orschiro Sono felice di sapere che ha funzionato per te. Piuttosto che refactored in un'estensione di Chrome, potrebbe essere in un componente aggiuntivo di Google Documenti, credo.
Rubén

1
@ChristopherFrancisco: il codice deve essere utilizzato su script con limiti ma potrebbe essere adattato per essere utilizzato dalla tua app, ma questa è una domanda diversa che molto probabilmente sarà più appropriato per Stack Overflow .
Rubén

1
@ChristopherFrancisco Ho appena aggiunto un link alla guida ufficiale sui limiti degli script ai file dell'editor di Google Documenti.
Rubén
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.