Respuesta corta
En este momento, las variables no son una característica incorporada de Google Docs y Google Apps Script, la plataforma para extender Google Docs, no incluye una clase o método para manejarlos.
Alternativas
Alternativa 1
Una alternativa es usar un patrón de texto, pero debe estar seguro de que solo coincidirá con la fecha que desea actualizar.
Alternativa 2
Otra alternativa es usar la clase NamedRange pero tenga en cuenta que
- mover el rango hará que pierda su nombre 1 .
- reemplazar texto en un rango con nombre con múltiples elementos solo funciona la primera vez 2 .
Código:
El siguiente código, destinado a ser utilizado en un script vinculado a un documento de Google, tiene dos funciones principales:
- Insertar la fecha de hoy
- Actualiza la fecha de hoy
Para fines de depuración se están utilizando
- fecha y hora, en lugar de solo la fecha.
- menús personalizados para activar las funciones principales.
"Problemas conocidos": la función de actualización reemplaza todo el párrafo.
Para probar el código, cópielo, luego vaya a Google Docs, cree un nuevo documento, haga clic en Herramientas> Editor de secuencias de comandos, seleccione Proyecto en blanco, pegue el código, guarde el proyecto, asigne un nombre, ejecute a tiempo para autorizar la aplicación , cierre su documento y ábralo nuevamente. Aparecerá un nuevo menú llamado "Utilidades". Desde allí puede llamar a las funciones principales.
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());
}
A continuación hay algunos elementos de diferentes tipos (preguntas, especificaciones, etc.) que podrían servir para inspirarse o señalar la "dirección correcta" para encontrar una "solución".
Notas al pie