Замена гиперссылок в нескольких документах Google - PullRequest
1 голос
/ 21 октября 2019

Я ввел следующий код, отправленный ziganotschka на https://stackoverflow.com/a/57865441/12252776:

function myFunction() {
  var oldLink="http://www.googledoclink1.com";
  var newLink="http://www.googledoclinkA.com";
  var oldLink2="http://www.googledoclink2.com";
  var newLink2="http://www.googledoclinkB.com";
  var files = DriveApp.getFiles();   // Note: this gets *every* file in your Google Drive
  while (files.hasNext()) {
    var file = files.next();
    Logger.log(file.getName());
    var doc = DocumentApp.openById(file.getId());
    var link=doc.getBody().findText(oldLink).getElement().asText(); 
    var link2=doc.getBody().findText(oldLink2).getElement().asText(); 
    link.setLinkUrl(newLink);   
    doc.replaceText(oldLink, newLink);
    link2.setLinkUrl(newLink2);   
    doc.replaceText(oldLink2, newLink2);
  }
  Logger.log("Done")
}

... но я получаю это сообщение об ошибке:

TypeError: Cannot call method "getElement" of null. (line 11, file "Replace Hyperlinks")

Как мне это исправить? Что мне делать?

Я также просто хотел извлечь файлы из папки, а не все файлы на моем Google Диске, поэтому я заменил

var files = DriveApp.getFiles();

на

var files = DriveApp.getFolderById("insert folder ID").getFiles();

Это сработало бы, верно?

Спасибо, Лорен

1 Ответ

0 голосов
/ 22 октября 2019

На ваш первый вопрос:

  • Вы просматриваете все файлы на вашем диске / в вашей папке
  • Некоторые из этих файлов могут не содержать старую ссылку "http://www.googledoclink1.com"
  • Это приводит к ошибке
  • Вам необходимо реализовать оператор, который проверяет, содержится ли ссылка, а если нет - перейти к следующему файлу

. Ваш второй вопрос:

  • Да, вы можете использовать var files = DriveApp.getFolderById("insert folder ID").getFiles();
  • Вы также можете использовать var files = DriveApp.getFolderById("insert folder ID").getFilesByType(MimeType.GOOGLE_DOCS); для получения только файлов Google Docs

Пример:

function myFunction() {
  var oldLink="http://www.googledoclink1.com";
  var newLink="http://www.googledoclinkA.com";
  var oldLink2="http://www.googledoclink2.com";
  var newLink2="http://www.googledoclinkB.com";
  var files = DriveApp.getFolderById("insert folder ID").getFilesByType(MimeType.GOOGLE_DOCS);
  while (files.hasNext()) {
    var file = files.next();
    if(file){
      var doc = DocumentApp.openById(file.getId());
      var link=doc.getBody().findText(oldLink);
      var link2=doc.getBody().findText(oldLink2);
      if(link){
        link=link.getElement().asText(); 
        link.setLinkUrl(newLink);   
        doc.replaceText(oldLink, newLink);
      }
      if(link2){
        link2=link2.getElement().asText(); 
        link2.setLinkUrl(newLink2);   
        doc.replaceText(oldLink2, newLink2);
      }
    }
  }
  Logger.log("Done")
}

ДОПОЛНЕНИЕ:

Обращение к вашему комментарию

Пример: Предположим, у меня был текст гиперссылки: «Симптом к диагнозу:Руководство на основе фактических данных, 3e "с URL-адресом accessmedicine.mhmedical.com/book.aspx?bookid=1088. Я хочу заменить текст гиперссылки на" Симптом к диагностике: Руководство на основе фактических данных, 4e "на URL-адрес accessmedicine.mhmedical.com / book.aspx? bookid = 2715. Итак, я хочу найти каждый экземпляр старого гиперлии замените его новой гиперссылкой. Мне интересно, где все, что принадлежит в коде ... нужны ли кавычки?

Пример решения:

function myFunction() {
  var oldLinkText="Symptom to Diagnosis: An Evidence-Based Guide, 3e";
  var newLinkText="Symptom to Diagnosis: An Evidence-Based Guide, 4e";
  var oldLinkURL="accessmedicine.mhmedical.com/book.aspx?bookid=1088";
  var newLinkURL="accessmedicine.mhmedical.com/book.aspx?bookid=2715";
  var oldLinkText2="XXX";
  var newLinkText2="XXY";
  var oldLinkURL2="accessmedicine.XXX";
  var newLinkURL2="accessmedicine.XXY";
  var files = DriveApp.getFolderById("insert folder ID").getFilesByType(MimeType.GOOGLE_DOCS);  
  while (files.hasNext()) {
    var file = files.next();
    if(file){
      var doc = DocumentApp.openById(file.getId());
      var link=doc.getBody().findText(oldLinkText);
      var link2=doc.getBody().findText(oldLinkText2);
      if(link){
        link=link.getElement().asText(); 
        link.setLinkUrl(newLinkURL);   
        doc.replaceText(oldLinkText, newLinkText);
      }
      if(link2){
        link2=link2.getElement().asText(); 
        link2.setLinkUrl(newLinkURL2);   
        doc.replaceText(oldLinkText2, newLinkText2);
      }
    }
  }
  Logger.log("Done")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...