如何在单词加载项中从当前选择中获取parentContentControls



我正在使用word javascript api开发一个word插件,需要获取当前选择的contentControl,因此使用parentContentControl进行当前选择。

**Code:**    
var range = context.document.getSelection().parentContentControl;
context.load(range);

但在控制台上显示错误:错误:{"name":"OfficeExtension.Error","code":"GeneralException","message":"GeneralException","traceMessages":[],"debugInfo":{"errorLocation":"Range.parentContentControl"},"stack":"GeneralException: GeneralExceptionn at Anonymous function (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:189006)n at pi (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:211583)n at ht (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:211670)n at g (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:211490)n at l (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:210076)"}

Debug info: {"errorLocation":"Range.parentContentControl"}

如果当前选择不包含任何contentControl,它应该返回NULL,但它给出了错误。请提供建议。

谢谢。

这是Microsoft Office word 2016版本的问题。相同的代码在16.0.7571.7095.中工作良好,但在其他单词2016版本中不工作。

function insideOfContentControlCheck() {
Word.run(function (ctx) {
var myCC = ctx.document.getSelection().parentContentControl;
ctx.load(myCC); // I think this is the part you are missing!
return ctx.sync()
.then(function () {
console.log(myCC.title);// if there is a content control we'll show the title
});
}).catch(function (e) {
//there is no ContentControl.
console.log("Error", e.message);
});
}

这是一个非常好的问题,涉及office.js技术的核心概念之一:我们如何处理null?长话短说,只要方法/属性返回null的可能性,我们就会提供该方法/属性的风格:

  1. 默认值。没有特殊后缀。如果返回值为null(在这种情况下,所选内容周围没有内容控件),则此风格会立即抛出异常,正如您的问题中正确描述的那样。这是故意的
  2. 返回一个"Null对象"。它们有一个*OrNullObject后缀。此风格不会抛出异常,但返回一种方法来验证对象是否为null。(请注意,在此上下文中,此"null对象"与JavaScript null不同,请不要混淆)

第二种口味从11月的分叉开始提供(版本16.0.7668+),因此请确保更新您的客户以使其正常工作。

因此,具体地回答你的问题:这种行为是故意的。如果要验证所选内容中是否存在内容控件,则需要使用range.parentContentControlOrNullObject属性。然后你可以检查它是否为空。以下是如何实现这一点的示例:

var myCC = context.document.getSelection().parentContentControlOrNullObject; // this flavor will not throw an exception.
context.load(myCC);
return context.sync()
.then(function () {
if (myCC.isNullObject)  // when using this flavor of the property you will get a isNullObject to check if its null or not and act accordingly.
console.log("There is no content control sorrounding");
else
app.showNotification("there is a content control wrapping the selection.");
})
.catch(function (e) {
console.log(e.message);
})
})

希望这能澄清的概念

相关内容

  • 没有找到相关文章

最新更新