Google Apps Script. Получить все ссылки из документа - PullRequest
0 голосов
/ 26 февраля 2020

Привет всем) Мне нужно получить все ссылки из документа Google. Я нашел такой общий подход:

function getAllLinks(element) {
  var links = [];
  element = element || DocumentApp.getActiveDocument().getBody();

  if (element.getType() === DocumentApp.ElementType.TEXT) {
    var textObj = element.editAsText();
    var text = element.getText();

    Logger.log("text " + text);

    var inUrl = false;
    for (var ch=0; ch < text.length; ch++) {
      var url = textObj.getLinkUrl(ch);
      if (url != null) {
        if (!inUrl) {
          // We are now!
          inUrl = true;
          var curUrl = {};
          curUrl.element = element;
          curUrl.url = String( url ); // grab a copy
          curUrl.startOffset = ch;
        }
        else {
          curUrl.endOffsetInclusive = ch;
        }          
      }
      else {
        if (inUrl) {
          // Not any more, we're not.
          inUrl = false;
          links.push(curUrl);  // add to links
          curUrl = {};
        }
      }
    }
  }
  else {
    var numChildren = element.getNumChildren();
    for (var i=0; i<numChildren; i++) {
      links = links.concat(getAllLinks(element.getChild(i)));
    }
  }

  Logger.log(links);
}

Он прекрасно работает, если я, например, введите URL-адрес в тексте, но если добавить ссылку через меню («Вставить» -> «Ссылка»), это не так работа, функция getLinkUrl() возвращает null. Документация содержит информацию о Link классе, я думал, что все ссылки представлены им, но не понимаю, почему я не могу вставить ссылку через меню.

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

Кто-нибудь сталкивался с таким сценарием? Что я пропустил?

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