Поточна дата як змінна в Документах 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.