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
- mover o intervalo fará com que ele perca seu nome 1 .
- 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:
- Inserir data de hoje
- Atualizar data de hoje
Para fins de depuração estão sendo usados
- data e hora, em vez de apenas data.
- 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é