如何从单词加载项中的当前选择获取内容控件

时间:2016-12-01 07:43:54

标签: ms-word vsto office365 office-js word-addins

我正在使用单词javaScript api开发一个单词加载项。我想获得当前选择的内容控件。我已经插入了如下所示的内容控件及其工作原理:

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

如何从范围对象获取内容控件,请提供建议。

1 个答案:

答案 0 :(得分:0)

你试过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);

            }




        })
    });

在原始答案中添加更多详细信息。

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

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;
    }

        
        
    });