Google Docs自定义菜单批量添加文本超链接需求及代码改造求助
批量给Google Docs指定文本添加标题链接的自定义菜单脚本
功能说明
- 新增Google Docs自定义菜单「批量文本链接」,支持输入目标文本和对应标题名称
- 自动检索文档中所有未被链接的目标文本,批量将其链接到指定标题的位置
- 彻底替代手动逐个添加链接的低效操作
完整代码实现
function onOpen() { // 向文档界面添加自定义菜单 DocumentApp.getUi().createMenu('批量文本链接') .addItem('设置文本与对应标题', 'showLinkDialog') .addToUi(); } function showLinkDialog() { const ui = DocumentApp.getUi(); // 弹出输入对话框,收集目标文本和对应标题信息 const response = ui.prompt( '批量链接设置', '请输入「目标文本|对应标题名称」(用英文竖线分隔),例如:Target|目标章节标题', ui.ButtonSet.OK_CANCEL ); if (response.getSelectedButton() === ui.Button.OK) { const input = response.getResponseText().trim(); const [targetText, targetTitle] = input.split('|').map(item => item.trim()); if (!targetText || !targetTitle) { ui.alert('输入格式错误,请严格按照「目标文本|对应标题名称」的格式填写!'); return; } const doc = DocumentApp.getActiveDocument(); const body = doc.getBody(); // 查找匹配的标题段落 const titleElement = findTitleElement(body, targetTitle); if (!titleElement) { ui.alert(`未找到标题「${targetTitle}」,请检查标题名称是否完全匹配!`); return; } // 创建指向标题的书签链接 const bookmark = doc.addBookmark(titleElement); const linkUrl = `#bookmark=${bookmark.getId()}`; // 批量替换未链接的目标文本 const replaceCount = replaceUnlinkedText(body, targetText, linkUrl); ui.alert(`批量链接完成!共处理${replaceCount}处未链接的「${targetText}」文本`); } } function findTitleElement(body, targetTitle) { // 遍历所有段落,匹配标题类型且文本一致的元素 const paragraphs = body.getParagraphs(); for (const para of paragraphs) { const headingType = para.getHeading(); if (headingType !== DocumentApp.ParagraphHeading.NORMAL && para.getText().trim() === targetTitle) { return para; } } return null; } function replaceUnlinkedText(body, targetText, linkUrl) { let count = 0; let searchResult = body.findText(targetText); while (searchResult) { const element = searchResult.getElement(); const startOffset = searchResult.getStartOffset(); const endOffsetInclusive = searchResult.getEndOffsetInclusive(); // 跳过已存在链接的文本 const existingLink = element.getLinkUrl(startOffset); if (!existingLink) { element.setLinkUrl(startOffset, endOffsetInclusive, linkUrl); count++; } // 查找下一个匹配项 searchResult = body.findText(targetText, searchResult); } return count; }
使用步骤
- 打开目标Google Docs文档,点击顶部菜单栏「扩展程序」→「Apps脚本」
- 清空脚本编辑器中的默认代码,粘贴上述完整代码
- 点击「保存」,为脚本命名(例如「批量文本链接工具」)
- 关闭脚本编辑器,刷新Docs页面,顶部菜单栏会出现「批量文本链接」选项
- 点击「设置文本与对应标题」,按提示输入格式内容,确认后即可完成批量链接
注意事项
- 标题名称必须与文档中实际标题完全一致(包括大小写、空格、标点)
- 仅对未添加链接的目标文本生效,已有的链接不会被修改
- 若目标文本包含特殊字符,输入时需确保完全匹配
内容的提问来源于stack exchange,提问作者Russell
相关产品推荐
相关产品推荐

