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

Microsoft Word加载项精准编辑:如何修改Range局部内容

Word加载项精准编辑:最小范围获取与局部内容修改

最小可操作范围说明

Word加载项里单个字符是能精准操作的最小范围,但你用getTextRanges([""])会触发InvalidArgument错误——因为这个API的分隔符参数不允许为空字符串。

正确获取单个字符/精准范围的方法

要拿到段落里的单个字符范围,可先获取段落的完整Range,再按字符索引逐个创建Range对象:

async function getCharacterRanges(paragraph) {
  const context = paragraph.context;
  const fullRange = paragraph.getRange();
  fullRange.load("text");
  await context.sync();

  const charRanges = [];
  const textLength = fullRange.text.length;
  for (let i = 0; i < textLength; i++) {
    // 按索引创建单个字符的Range
    const charRange = fullRange.getRange(i, i + 1);
    charRanges.push(charRange);
  }
  await context.sync();
  return charRanges;
}

局部内容修改示例

示例1:把"hello,"改成"Hello,"

直接定位目标单词的Range修改文本就行,不用覆盖整个段落:

async function capitalizeFirstWord(paragraph) {
  const context = paragraph.context;
  // 获取段落内的单词范围
  const wordRanges = paragraph.getTextRanges([" "], true);
  wordRanges.load("text");
  await context.sync();

  const firstWord = wordRanges.items[0];
  if (firstWord.text === "hello,") {
    // 修改文本,审阅模式下会自动生成修订标记
    firstWord.text = "Hello,";
  }
  await context.sync();
}

示例2:把"world!"改成"word"

如果要修改单词内部的字符,既可以直接替换整个单词文本,也可以精准截取部分范围修改:

async function trimSecondWord(paragraph) {
  const context = paragraph.context;
  const wordRanges = paragraph.getTextRanges([" "], true);
  wordRanges.load(["text", "start", "end"]);
  await context.sync();

  const secondWord = wordRanges.items[1];
  if (secondWord.text === "world!") {
    // 方式1:直接替换整个单词
    secondWord.text = "word";

    // 方式2:精准截取前4个字符的范围修改(适合更复杂的局部调整)
    // const targetRange = secondWord.getRange(0, 4);
    // targetRange.text = "word";
  }
  await context.sync();
}

审阅模式适配

用上述代码修改内容后,Word「审阅」模式会自动把修改标记为修订(和你期望的效果一致:原文本显示删除线,新文本显示插入标记),不需要额外配置。


内容的提问来源于stack exchange,提问作者George van Heerden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:40:55