首页 > 解决方案 > 如何使用 contentControls.getItem 获取特定的内容控件?

问题描述

我正在尝试使用其位置从文档中获取内容控件。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);
})
    }

标签: ms-wordoffice-jsword-contentcontrol

解决方案


让我们不要混淆getItem()getItemAt()方法。 getItem()与 ID 一起使用,而getItemAt()与位置一起使用。

鉴于 CC 可以在页眉/页脚和其他子文档中,推断顺序可能具有挑战性,因此getItemAt()cc 集合中没有方法。

话虽如此,items 数组具有按阅读顺序排列的内容控件,因此items[0]为您提供了第一个内容控件,items[n - 1]最后一个(假设N文档中的 ccs)。

是的,您需要全部加载它们。

这是一个关于如何访问文档中第三个内容控件的示例:

await Word.run(async (context) => {
    let ccs = context.document.contentControls;
    ccs.load();
    await context.sync();
    //assuming there are more then 2 
    if(ccs.items.length >= 2)
        console.log(ccs.items[2].text);
});

最后,我建议您使用其他方法来访问 CC。

即和。contentControls.getById_contentControls.getByName()getByTag()


推荐阅读