Поточна дата як змінна в Документах Google?


12

Чи можна додати (вставити) змінну для поточної дати в Документи Google, яка автоматично оновлювалась кожного разу, коли я відкриваю документ?

Деякі критерії:

  • Позиція дати повинна бути змінною, тобто дозволяти мені вставити дату в різні позиції сторінки / абзацу

  • Документ має бути доступним для спільного доступу, тобто люди, що відкривають мій документ, також будуть відображатися з поточною датою


Який часовий пояс слід використовувати для обчислення поточної дати?
— Рубен

Щоб він був універсальним, можливо, визначений самим користувачем у налаштуваннях? Або його можна якимось чином витягнути з налаштувань Google Документів користувача автоматично?
— orschiro

1
Щойно додав свою спробу кодування. Щодо часового поясу, я використовував GMT-5, але його можна було легко змінити на потрібний. Це не повне рішення.
— Рубен

Відповіді:


9

Коротка відповідь

Наразі змінні не є вбудованою функцією Google Документів та Google Apps Script, платформа для розширення Google Документів, не включає клас чи метод поводження з ними.

Альтернативи

Альтернатива 1

Однією з альтернатив є використання тексту тексту, але ви повинні бути впевнені, що він відповідатиме лише тій даті, яку ви хочете оновити.

Альтернатива 2

Ще одна альтернатива - використовувати клас NamedRange, але пам’ятайте про це

  1. переміщення діапазону призведе до втрати назви 1 .
  2. заміна тексту в іменованому діапазоні кількома елементами працює лише з першого разу 2 .

Код:

Наступний код, призначений для використання в сценарії, пов'язаному з документом Google, має дві основні функції:

  1. Вставте сьогоднішню дату
  2. Оновіть сьогоднішню дату

Для налагодження використовуються цілі

  1. дата та час, а не дата.
  2. спеціальні меню для запуску основних функцій.

"Відомі проблеми": Функція оновлення замінює весь абзац.

Щоб перевірити код, скопіюйте його, потім перейдіть до своїх Документів Google, створіть новий документ, натисніть Інструменти> Редактор сценаріїв, виберіть Пустий проект, вставте код, збережіть проект, призначте ім’я, запустіть час, щоб авторизувати додаток , закрийте документ і відкрийте його знову. З'явиться нове меню під назвою "Утиліти". Звідти можна викликати основні функції.

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


Нижче наведено деякі елементи різного роду (запитання, технічні характеристики тощо), які можуть послужити, щоб отримати натхнення або вказати на "правильний напрямок", щоб знайти "рішення"


Виноски


Це означає, що це неможливо?
— Яків Ян Туінстра

@JacobJanTuinstra: IMHO, так, це неможливо. Що може бути можливим - це знайти обхід, але це потрібно більше контексту. Я думаю, що запитувати цю інформацію слід в коментарях, але я поки ніде не можу коментувати :)
— Rubén

1
@orschiro Я радий знати, що це працювало на тебе. Я думаю, що замість того, щоб переробити його в розширення Chrome, він може перетворитись на доповнення Google Документів.
— Рубен

1
@ChristopherFrancisco: Код призначений для використання в обмеженому сценарії, але він може бути адаптований для використання у вашому додатку, але це інше питання, яке, швидше за все, буде більш підходящим для переповнення стека .
— Рубен

1
@ChristopherFrancisco Я щойно додав посилання на офіційне керівництво про межі сценаріїв до файлів редактора Google Docs.
— Рубен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.