谷歌脚本:搜索并替换Doc中的链接文本的网址(不是工作表)。

问题描述 投票:1回答:1

我试图搜索和替换链接文本从一个旧的网址到一个新的网址。

它不工作,我已经花了几个小时和几个小时。如果我删除 "if (found)",它给我 "TypeError: 无法读取属性'getElement'为null",即使我的文件中有链接到这个old_url的文本。

请帮助我。

function myFunction() {
  var old_url  ="http://hurlx1.com";
  var new_url  ="http://urlxa.com";
  var files = DriveApp.getFolderById("my folder id").getFilesByType(MimeType.GOOGLE_DOCS);

  while (files.hasNext()) {
     var file = files.next();
     var doc = DocumentApp.openById(file.getId());
     found=doc.getBody().findText(old_url); 

     if (found) {
         var link_element = found.getElement().asText();
         var start = found.getStartOffset();
         var end = found.getEndOffsetInclusive();
         var correct_link = link_element.getText().slice(start, end);
         link_element.setLinkUrl(start, end, correct_link);
       }
     }
   } 
url google-apps-script replace google-docs
1个回答
2
投票

我相信你的情况和目标如下。

  • 在你的谷歌文档中。
    • 文本和超链接与 old_url.
    • 超链接是 old_url. 但文本与 old_url.
  • 你想更新 old_urlnew_url 使用谷歌应用脚本。

对此,这个答案如何?

修改要点。

  • 关于你的错误信息,当文本的 old_url 在谷歌文档中找不到与 found=doc.getBody().findText(old_url);, found 成为 null 即使 old_url 被设置为超链接。因为 findText 搜索文档主体上的文本,而不能搜索设置在文本上的超链接。我想这就是你的问题的原因。
  • 在你的脚本中。var new_url ="http://urlxa.com"; 是用的。但当链接设置。correct_link 用作 link_element.setLinkUrl(start, end, correct_link);. 以此: new_url 未设置。
  • 当你想更新 http://hurlx1.comnew_urlvar new_url ="http://urlxa.com";,还需要修改文本。
  • 在你的脚本中,只有第1 old_url 被更新。如果有几个 old_url 在文档中,需要使用循环更新它们。

修改后的脚本的规格。

此修改脚本可用于以下模式。

  • 文本和超链接与 old_url.
    • 在这种情况下,文本值为 old_url 还更新了以下内容 old_url.
  • 超链接是 old_url. 但文本与 old_url.
    • 在这种情况下,只有超链接的 old_url 已更新。
  • 有几个文本的超链接是 old_url 在谷歌文档中。

修改后的脚本。

function myFunction() {
  var old_url  ="http://hurlx1.com";
  var new_url  ="http://urlxa.com";
  var files = DriveApp.getFolderById("my folder id").getFilesByType(MimeType.GOOGLE_DOCS);

  while (files.hasNext()) {
    var file = files.next();
    var doc = DocumentApp.openById(file.getId());
    var body = doc.getBody();

    // The following script is used for the situation that the text and hyperlink are the same with `old_url`.
    var found = body.findText(old_url);
    while (found) {
      var link_element = found.getElement().asText();
      var start = found.getStartOffset();
      var end = found.getEndOffsetInclusive();
      var correct_link = link_element.getText().slice(start, end);
      link_element.setLinkUrl(start, end, new_url).replaceText(old_url, new_url);
      found = body.findText(old_url, found);
    }

    // The following script is used for the situation that although the hyperlink is `old_url`, the text is different from `old_url`.
    var text = body.editAsText();
    for (var i = 0; i < text.getText().length; i++) {
      if (text.getLinkUrl(i) == old_url) {
        text.setLinkUrl(i, i + 1, new_url);
      }
    }
  }
}

参考文献:

© www.soinside.com 2019 - 2024. All rights reserved.