我试图搜索和替换链接文本从一个旧的网址到一个新的网址。
它不工作,我已经花了几个小时和几个小时。如果我删除 "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);
}
}
}
我相信你的情况和目标如下。
old_url
.old_url
. 但文本与 old_url
.old_url
与 new_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.com
到 new_url
的 var new_url ="http://urlxa.com";
,还需要修改文本。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);
}
}
}
}