You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Docs Apps Script:如何用AI生成文本替换选中内容?

Google Docs Apps Script选中文本替换问题修复

你的错误根源在于doc.getCursor()返回了null——当用户选中一段文本(而非仅定位光标)时,getCursor()本身就会返回null,且删除选中内容后,原光标位置也会失效。要实现选中内容的完整替换,应该直接操作选区对应的文本元素和范围,而非依赖光标位置。

修正后的完整代码示例

function generateAndReplace() {
  const doc = DocumentApp.getActiveDocument();
  const selection = doc.getSelection();
  
  // 先检查是否存在有效选区
  if (!selection) {
    DocumentApp.getUi().alert('请先选中需要替换的文本');
    return;
  }

  const rangeElements = selection.getRangeElements();
  const rangeElement = rangeElements[0];
  const textElement = rangeElement.getElement().asText();
  
  // 获取选中文本的起始和结束偏移量(处理部分选中的情况)
  const startOffset = rangeElement.getStartOffset();
  const endOffset = rangeElement.getEndOffsetInclusive();
  
  // 获取选中的文本作为prompt
  const prompt = textElement.getText().substring(startOffset, endOffset + 1);
  
  // 调用OpenAI API生成新文本(假设completion函数已正确实现)
  const generatedText = completion(prompt);
  Logger.log(generatedText);

  // 替换选中的文本:先删除原内容,再插入新文本
  textElement.deleteText(startOffset, endOffset);
  textElement.insertText(startOffset, generatedText.toString());
}

// 假设你的completion函数实现如下(示例)
function completion(prompt) {
  // 这里替换为你实际的OpenAI API调用逻辑
  return "AI生成的替换文本";
}

关键修复点

  • 增加选区校验:先判断是否存在有效选区,避免无选中时的报错。
  • 直接操作文本元素范围:通过getStartOffset()和getEndOffsetInclusive()获取选中内容的精确位置,直接在原文本元素上删除并插入内容,无需依赖光标。
  • 处理部分选中场景:即使只选中了文本的一部分,也能精准替换对应范围的内容。

内容的提问来源于stack exchange,提问作者Luca Mainieri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:22:45