Ms word 如何使用contentControls.getItem获取特定的内容控件?

Ms word 如何使用contentControls.getItem获取特定的内容控件?,ms-word,office-js,word-contentcontrol,Ms Word,Office Js,Word Contentcontrol,我正在尝试使用文档的位置从文档中拾取内容控件ccs.getFirstOrNullObject()有效,但我不想要第一个内容控件ccs.getItem(0)(或任何整数值)返回错误: ItemNotFound:我们找不到您请求的项目。检查 有关详细信息,请参阅OfficeExtension.Error.debugInfo 如何根据特定内容控件在文档中的位置来指定它 来自脚本实验室的代码: async function getAdjacentRange() { await Word.

我正在尝试使用文档的位置从文档中拾取内容控件<代码>ccs.getFirstOrNullObject()有效,但我不想要第一个内容控件<代码>ccs.getItem(0)(或任何整数值)返回错误:

ItemNotFound:我们找不到您请求的项目。检查 有关详细信息,请参阅OfficeExtension.Error.debugInfo

如何根据特定内容控件在文档中的位置来指定它

来自脚本实验室的代码:

async function
    getAdjacentRange() {
    await Word.run(async (context) => {
        var ccs = context.document.contentControls;
        ccs.load("items");
        await context.sync();
        console.log("Nr cc: " + ccs.items.length);
        //works:
        //let cc = ccs.getFirstOrNullObject();
        //doesn't work:
        let cc = ccs.getItem(0);

        let ccRange = cc.getRange("Start");
        let ccParas = ccRange.paragraphs; cc.load("text,range,paragraphs");
        let ccPara = ccParas.getFirst();
        ccParas.load("items")
        let paraRange = ccPara.getRange("Start");
        let rng = paraRange.expandTo(ccRange);
        let em = [" "];
        console.log(em.length.toString());
        let words = rng.getTextRanges(em, true);
        words.load("items");
        await context.sync();
        let nrWords = words.items.length;
        let lastWord = words.items[nrWords - 1];
        let wordBeforeCC = words.getFirst();
        wordBeforeCC.load("text");
        await context.sync();
        console.log(cc.text + "/" + wordBeforeCC.text + "nr Words: " + nrWords + "last word: " + lastWord.text);
})
    }

让我们不要混淆
getItem()
getItemAt()
方法
getItem()
用于ID,而
getItemAt()
用于position

考虑到cc可以位于页眉/页脚和其他子文档中,推断顺序可能很困难,因此cc集合中没有
getItemAt()
方法

也就是说,items数组具有按读取顺序排列的内容控件,因此
items[0]
将为您提供第一个内容控件,
items[n-1]
最后一个内容控件(假设文档中有
n
ccs)

是的,你需要全部加载

以下是如何访问文档中第三个内容控件的示例:

等待Word.run(异步(上下文)=>{
设ccs=context.document.contentControls;
ccs.load();
wait context.sync();
//假设有超过2个
如果(ccs.items.length>=2)
console.log(ccs.items[2].text);

});我可以复制。我怀疑ContentControlCollection.getItem()中存在错误。如果你在几天内没有得到答复,考虑在这个回购问题上提出一个问题:感谢有关“代码>项目< /代码>的信息-我想我试过了,但是出错了。通常,
getItem
与ID一起工作的事实在哪里?我在文档中没有看到这一点。对于
contentControls
而言,
getIndex
的信息说明:“通过其在集合中的索引获取内容控件。”并将索引值指定为“number”;在COM对象模型中,ID被键入为字符串…可能是文档错误。。。您不应该在项目上出现错误。。这是访问ccs或其他提到的方法。是的,in Office.js getItem可以使用ID或名称。getItemAt具有对象的索引/位置。感谢提供更多信息,Juan:-)我已提交文档反馈。
items
的错误可能是我的语法错误-在看到
getItem
时,我没有进一步尝试。