Data atual como uma variável no Google Docs?


12

É possível adicionar (inserir) uma variável para a data atual em um Google Docs que seja atualizado automaticamente sempre que eu abrir o documento?

Alguns critérios:

  • A posição da data deve ser variável, ou seja, permitindo-me inserir a data em diferentes posições de uma página / parágrafo

  • O documento ainda deve ser compartilhável, ou seja, as pessoas que abrem meu documento também serão exibidas com a data atual


Qual fuso horário deve ser usado para calcular a data atual?
— Rubén

Para que seja versátil, talvez definido pelo próprio usuário nas configurações? Ou ele pode ser obtido de alguma forma nas configurações do Google Docs do usuário automaticamente?
— Orschiro 6/08

1
Acabei de adicionar minha tentativa de codificação. Em relação ao fuso horário, usei o GMT-5, mas ele pode ser facilmente alterado para o que você precisa. Não é uma solução completa.
— Rubén

Respostas:


9

Resposta curta

No momento, as variáveis ​​não são um recurso interno do Google Docs e do Google Apps Script, a plataforma para estender o Google Docs, não inclui uma classe ou método para lidar com elas.

Alternativas

Alternativa 1

Uma alternativa é usar um padrão de texto, mas você deve ter certeza de que corresponderá apenas à data que deseja atualizar.

Alternativa 2

Outra alternativa é usar a classe NamedRange, mas lembre-se de que

  1. mover o intervalo fará com que ele perca seu nome 1 .
  2. substituir o texto em um intervalo nomeado por vários elementos só funciona na primeira vez 2 .

Código:

O código a seguir, destinado a ser usado em um script vinculado a um Documento do Google, tem duas funções principais:

  1. Inserir data de hoje
  2. Atualizar data de hoje

Para fins de depuração estão sendo usados

  1. data e hora, em vez de apenas data.
  2. menus personalizados para acionar as principais funções.

"Problemas conhecidos": a função de atualização substitui o parágrafo inteiro.

Para testar o código, copie-o, vá para o Google Docs, crie um novo documento, clique em Ferramentas> Editor de scripts, selecione Projeto em branco, cole o código, salve o projeto, atribua um nome, execute o prazo para autorizar o aplicativo , feche seu documento e abra novamente. Um novo menu chamado "Utilitários" será exibido. A partir daí, você pode chamar as principais funções.

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


Abaixo, existem alguns itens de tipos diferentes (perguntas, especificações etc.) que podem servir de inspiração ou apontar para a "direção certa" para encontrar uma "solução"


Notas de rodapé


Isso significa que não é possível?
— Jacob Jan Tuinstra

@JacobJanTuinstra: IMHO, sim, não é possível. O que poderia ser possível é encontrar uma solução alternativa, mas é necessário mais contexto. Eu acho que pedir que a informação deve ser feito em comentários, mas eu em qualquer lugar ainda não posso comentar :)
— Rubén

1
@orschiro Fico feliz em saber que funcionou para você. Em vez de refatorar uma extensão do Chrome, poderia ser um complemento do Google Docs, eu acho.
— Rubén

1
@ChristopherFrancisco: o código deve ser usado em scripts limitados, mas pode ser adaptado para ser usado em seu aplicativo, mas essa é uma pergunta diferente e provavelmente muito mais apropriada para o estouro de pilha .
— Rubén

1
@ChristopherFrancisco Acabei de adicionar um link ao guia oficial sobre os limites dos scripts nos arquivos do editor do Google Docs.
— Rubén
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.