求Google Docs中将'**'替换为装饰PNG的Apps Script方案
批量替换Google Docs中'**'为装饰PNG的方案
针对你的需求,下面是一套适合编程基础薄弱者的Google Docs操作方案,跟着步骤走即可完成批量替换:
步骤1:打开脚本编辑器
打开目标Google Docs文档,点击顶部菜单栏的「扩展程序」→「Apps Script」,进入脚本编辑页面。
步骤2:替换脚本代码
删除编辑器里默认的所有内容,粘贴以下代码:
function replaceAsterisksWithImage() { // 获取当前文档 const doc = DocumentApp.getActiveDocument(); const body = doc.getBody(); // 要替换的目标文本:两个星号 const targetText = '**'; // 替换为你的装饰PNG链接,改成自己的图片URL const imageUrl = 'https://example.com/your-decoration.png'; try { // 循环查找并替换所有匹配的** let foundElement = body.findText(targetText); while (foundElement) { const start = foundElement.getStartOffset(); const end = foundElement.getEndOffsetInclusive(); const textElement = foundElement.getElement(); // 删除原有的**文本 textElement.deleteText(start, end); // 在原位置插入装饰图片 textElement.insertInlineImage(start, imageUrl); // 继续查找下一个** foundElement = body.findText(targetText, foundElement); } DocumentApp.getUi().alert('替换完成!'); } catch (error) { DocumentApp.getUi().alert('替换出错:' + error.message); } }
步骤3:配置图片链接
把代码里的'https://example.com/your-decoration.png'替换成你自己的装饰PNG公开访问链接(图片需能被Google Docs访问,比如存在Google Drive并设为公开共享,或放在可访问的图床)。
步骤4:运行脚本
- 点击脚本编辑器顶部的「保存」按钮,给脚本起个简单名字(比如
ReplaceAsterisks)。 - 点击「运行」按钮,第一次运行会触发权限申请,按提示完成授权(这是脚本访问文档的必要安全操作)。
- 授权完成后脚本自动执行,返回文档即可看到所有文本形式的'**'已替换为装饰图片。
可选调整
- 调整图片大小:若图片尺寸不合适,在插入图片的代码后添加以下两行(按需修改数值):
const insertedImage = textElement.getChild(start).asInlineImage(); insertedImage.setWidth(25); // 设置宽度为25像素 insertedImage.setHeight(25); // 设置高度为25像素 - 只替换选中内容:若只想处理某一章内容,先选中目标区域,再用以下脚本替换原代码:
function replaceInSelectedText() { const doc = DocumentApp.getActiveDocument(); const selection = doc.getSelection(); if (!selection) { DocumentApp.getUi().alert('请先选中要替换的内容!'); return; } const targetText = '**'; const imageUrl = 'https://example.com/your-decoration.png'; const selectedElements = selection.getSelectedElements(); selectedElements.forEach(item => { if (item.isPartial()) { const textElem = item.getElement().asText(); const start = item.getStartOffset(); let text = textElem.getText().substring(start); let index = text.indexOf(targetText); while (index !== -1) { textElem.deleteText(start + index, start + index + 1); textElem.insertInlineImage(start + index, imageUrl); text = textElem.getText().substring(start); index = text.indexOf(targetText); } } else { const textElem = item.getElement().asText(); let found = textElem.findText(targetText); while (found) { const startOffset = found.getStartOffset(); const endOffset = found.getEndOffsetInclusive(); textElem.deleteText(startOffset, endOffset); textElem.insertInlineImage(startOffset, imageUrl); found = textElem.findText(targetText, found); } } }); DocumentApp.getUi().alert('选中内容替换完成!'); }
内容的提问来源于stack exchange,提问作者Erin Rice
相关产品推荐
相关产品推荐

