Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 替换多个Google文档中的超链接_Google Apps Script_Hyperlink_Google Docs_Drive - Fatal编程技术网

Google apps script 替换多个Google文档中的超链接

Google apps script 替换多个Google文档中的超链接,google-apps-script,hyperlink,google-docs,drive,Google Apps Script,Hyperlink,Google Docs,Drive,我输入了ziganotschka于发布的以下代码: 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 file

我输入了ziganotschka于发布的以下代码:

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")
我该如何解决这个问题?我该怎么办

我还只是想从文件夹中提取文件,而不是从我的谷歌硬盘中提取所有文件,所以我替换了

var files = DriveApp.getFiles();

那会有用的,对吗

谢谢,,
劳伦

关于你的第一个问题:

  • 您正在遍历驱动器/文件夹中的所有文件
  • 某些文件可能不包含旧链接“”
  • 这会给你带来错误
  • 您需要实现一个语句来检查链接是否包含,如果不包含,则跳到下一个文件
关于你的第二个问题:

  • 是的,您可以使用
    var files=DriveApp.getFolderById(“插入文件夹ID”).getFiles()
  • 您还可以使用
    var files=DriveApp.getFolderById(“插入文件夹ID”).getFilesByType(MimeType.GOOGLE_DOCS)
    仅检索Google文档文件
样本:

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")
}
添加:

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")
}
回应你的评论

示例:假设我有超链接文本:“症状到诊断:一个 基于证据的指南,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")
}

在脚本中,如果没有
http://www.googledoclink1.com
http://www.googledoclink2.com
在Google文档中,会出现此类错误。请再次确认。如果即使在您修改此文件时也出现相同的错误,您是否可以提供一个用于复制此问题的示例Google文档?当然,请删除您的个人信息。您好,我应该澄清一下,我已将链接更改为我自己的链接。从特定文件夹中提取文件的链接和代码是我在ziganotschka代码中修改的唯一内容。感谢您的回复。我注意到已经发布了一个答案,而且讨论也已经进行了。我想这会解决你的问题。谢谢你的帮助!非常感谢。我应该澄清一下,我将上面的URL链接更改为可能出现在谷歌文档中的链接。链接和“从特定文件夹中提取文件”代码是我在原始代码中修改的唯一内容。上面写着“替换文本”,这是我写新旧链接文本的地方吗?(不是URL)另外,上面的新代码是否包含您提到的检查链接是否包含的语句,如果不包含,则跳到下一个文件?谢谢。语句
if(link)
验证文本中是否包含值为
oldLink
的链接文本,如果包含,则用
newLink
替换链接文本和URL。如果未包含
oldLink
,代码将直接跳到
oldLink2
。如果两者都不包含,则跳转到下一个文档(否则,尝试替换不存在的文本将出错)。是的,“替换文本”是链接文本被替换的地方。谢谢你的澄清。示例:假设我有超链接文本:“症状到诊断:基于证据的指南,3e”,带有URL。我想用URL将超链接文本替换为“症状到诊断:循证指南,4e”。所以,我想找到旧超链接的每个实例,并用新超链接替换它。我想知道代码中的所有内容都在哪里…它需要引号吗?我在我的答案中添加了一个,希望现在更清楚。唯一的问题是,除了代码中已有的链接之外,我添加其他需要更改的超链接时,我很难使它正常工作:var oldLinkText2=“哈里森内科学原理,19e”;var newLinkText2=“哈里森内科学原理,20e”;var oldLinkURL2=“accessmedicine.mhmedical.com/book.aspx?bookid=1130”;var newLinkURL2=“accessmedicine.mhmedical.com/book.aspx?bookid=2129”;