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

使用Office JS操作Word时,获取contentControls返回空数组求助

问题:Office JS添加内容控件后无法通过range获取到该控件

在Word文档中搜索“moslim”,找到第一个结果后插入Content Control,设置标签并替换文本。目前Content Control已成功添加到文档中,但最后通过console.log(getcontentControl.items)输出的是空数组,请问哪里操作出错了?

代码示例

Word.run(async (context) => {
    var searchResults = context.document.body.search('moslim');
    context.load(searchResults);
    return context.sync().then(async function () {
      if (searchResults.items.length > 0) {
        // Get the first search result
        var range = searchResults.items[0].getRange();
        // range.clear();
        // Insert a content control around the search result
        var contentControl = range.insertContentControl();
        // Set the tag of the content control
        contentControl.tag = 'your tag';
        contentControl.insertText(searchResults.items[0].text.toString(), 'Replace'); 

        // Load the content control
        context.load(contentControl);
        await context.sync()

        var getcontentControl  = range.contentControls

        context.load(getcontentControl)
        await context.sync()

        console.log(getcontentControl.items)
      }
    });
});

问题原因

当通过range.insertContentControl()创建内容控件后,原range指向的是内容控件内部的文本范围,而非包含该内容控件的外部范围。此时range.contentControls会查找这个内部范围内的内容控件,自然无法找到你刚创建的那个(它是当前range的父容器)。

解决方法

有两种可行的处理方式:

  • 直接使用已创建的contentControl对象
    你已经通过context.load(contentControl)并await context.sync()完成了控件的加载,无需再从range重新获取,直接使用该对象即可:

    console.log(contentControl);
    
  • 获取当前range的父级内容控件
    如果确实需要从范围维度获取,应修改为获取当前range的父级内容控件:

    var getcontentControl = range.parentContentControl;
    context.load(getcontentControl);
    await context.sync();
    console.log(getcontentControl);
    

内容的提问来源于stack exchange,提问作者Gocool Ad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:30:58