Google apps script 替换多个Google文档中的超链接
我输入了ziganotschka于发布的以下代码: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
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()代码>
- 您还可以使用
仅检索Google文档文件var files=DriveApp.getFolderById(“插入文件夹ID”).getFilesByType(MimeType.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")
}
添加:
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”;