Есть ли способ использовать скрипт Google Apps для открытия документа при последнем редактировании? - PullRequest
1 голос
/ 30 мая 2020

У меня есть Google Do c, который становится слишком длинным. Я использую его, чтобы собрать почти все свои мысли о разных проектах, поэтому я хотел бы, чтобы он открывался с того места, где я остановился (не обязательно в конце). - Мне нужно, чтобы он был легко доступен на любом устройстве, на котором я работаю, поэтому это Do c, а не файл Word, хотя я знаю, как писать там макрос. -

После некоторого покопания кажется, что есть триггер редактирования для листов, но не для документов, поэтому я пытался вместо этого получить триггер на основе времени как лучшее приближение к самому последнему редактированию. Я написал следующее в do c Code.gs, но, похоже, это не работает. Есть предложения?

function onOpen() { 
  deleteTrigger();
  createTrigger();
  DocumentApp.getActiveDocument().setCursor(PropertiesService.getDocumentProperties().getProperty('lastOpen')); 
}

function createTrigger() {
  ScriptApp.newTrigger('savePlace')
      .timeBased()
      .everyMinutes(1)
      .create();
} 

function savePlace() {
  PropertiesService.getDocumentProperties().setProperty('lastOpen', DocumentApp.getActiveDocument().getCursor());
}

function deleteTrigger() {

  // Loop over all triggers and delete them
  var allTriggers = ScriptApp.getProjectTriggers();

  for (var i = 0; i < allTriggers.length; i++) {
    ScriptApp.deleteTrigger(allTriggers[i]);
  }
}

(Кроме того, нужно ли мне указывать свойство скрипта для lastOpen в диалоговом окне? И какое значение лучше всего указать в этом случае. [I я действительно, действительно новичок в этом])

1 Ответ

2 голосов
/ 30 мая 2020

Попробуйте следующее:

Просто сохраните закладку, когда уйдете. И используйте gotoBookMark при открытии документа.

function saveBookMark() {
  var doc=DocumentApp.getActiveDocument();
  var cursor=doc.getCursor();
  var bookmark=doc.addBookmark(cursor);
  var ps=PropertiesService.getDocumentProperties();
  ps.setProperty('bookmarkid', bookmark.getId());
}

function gotoBookMark() {
  var doc=DocumentApp.getActiveDocument();
  var bookmarkid=PropertiesService.getDocumentProperties().getProperty('bookmarkid');
  var pos=doc.getBookmark(bookmarkid).getPosition();
  doc.setCursor(pos);
}

Это удалит все закладки:

function clearBookMarks() {
  var doc=DocumentApp.getActiveDocument();
  var bkmarks=doc.getBookmarks().forEach(function(bm){bm.remove();})
}

Вот меню:

function menu() {
  DocumentApp.getUi().createMenu('MyMenu')
  .addItem('Save BookMark', 'saveBookMark')
  .addItem('Goto Bookmark', 'gotoBookMark')
  .addItem('Remove All Bookmarks', 'clearBookMarks')
  .addToUi();  
}

Закладки классов

Я никогда раньше этим не пользовался, но думаю, приложив немного дополнительных усилий, можно опубликовать отрывок из каждой закладки и поставить флажок, чтобы выбрать их, а затем удалить только те, которые вы не хочу, а также предоставьте кнопку рядом с каждым, чтобы вы могли вернуться к ней всякий раз, когда вы будете sh.

Это был пример кода, который меня заставил:

// Insert a bookmark at the cursor position and log its ID.
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
var bookmark = doc.addBookmark(cursor);
Logger.log(bookmark.getId());

После этого вы можете использовать автозавершение кода, чтобы выяснить, какие методы доступны, а затем при необходимости обратиться к руководству. Интересно, что иногда автозавершение кода обновляется до документа, а иногда документация обновляется первой, поэтому иногда приходится немного потрудиться.

Я использовал службу свойств документа, чтобы сохранить идентификатор последней закладки и поэтому, когда вы открываете документ, он всегда переходит к последней закладке.

PropertiesService

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...