1

我正在使用 word JavaScript api 开发一个 word 插件。我想获取当前选择的内容控件。我已插入如下内容控件并且它正在工作:

var range = context.document.getSelection();
var myContentControl = range.insertContentControl();

如何从范围对象中获取内容控件?

请指教。

4

2 回答 2

2

你试过 context.document.getSelection().contentControls; ?

记得加载内容控件集合,这里是一些示例代码....

Word.run(function(context) {
      
        var myCCs = context.document.getSelection().contentControls;
        context.load(myCCs);

        return context.sync()

        .then(function(){
            for(var i=0; i< myCCs.items.length; i++){
                // here you will get the full content of content controls within the selection, 
                console.log("this is full  paragraph:" + (i + 1) + ":" + myCCs.items[i].text);

            }




        })
    });

在我的原始答案中添加更多细节。

我之前的代码示例返回所选内容中的所有内容控件,似乎需要的是所选段落中的内容控件。这可以是部分选定的段落(即只是插入点)或展开多个段落。这是一个更“复杂”的场景,因为这需要使用 Promise 模式遍历集合中的集合。这是有关如何实现此目的的代码示例,希望对您有所帮助。

Word.run(function(context) {
        //first we get the paragraphs on the selection.
        var myPars = context.document.getSelection().paragraphs;
        context.load(myPars);  //note you need not to incldue scalar properties like title or tags, all scalars are included.
        return context.sync()
        .then(function(){
                // we have the paragraphs, now lets get the content controls for each paragraph (will only be one paragraph if the cursor is in any paragraph only)
                forEach(myPars,function(item, i){
                   var  myCCs = myPars.items[i].contentControls;
                    context.load(myCCs);
                    return context.sync()
                    .then(function(){
                           for (var j=0;j<myCCs.items.length;j++){
                               // here i am accessing each content control.
                                console.log(myCCs.items[j].text);
                           } 
                    })
                })
        })

 function forEach(collection, handler) {
        var promise = new OfficeExtension.Promise(function (resolve) { resolve(); });
        collection.items.forEach(function (item, index) {
            promise = promise.then(function () {
                return handler(item, index);
            })
        });
        return promise;
    }

        
        
    });

于 2016-12-01T19:47:18.237 回答
0

以下是工作代码:

var range=context.document.getSelection().paragraphs;
context.load(range, 'text');
return context.sync()
.then(function () {
    for (var i = 0; i < range.items.length; i++) {
        context.load(range.items[i].contentControls, 'text,tag');
    }
})
.then(context.sync)
.then(function () {
    for (var i = 0; i < range.items.length; i++) {
        for (var j = 0; j < range.items[i].contentControls.items.length; i++) {
            console.log("<br/>Content Control:" + (j + 1) + ":" + range.items[i].contentControls.items[j].text);
        }
    }
});
于 2016-12-05T06:29:11.517 回答