我正在使用word javascript api开发一个单词加载项,需要获取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: GeneralException\n 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,但它给出错误。请指教。
感谢。
答案 0 :(得分:1)
这是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);
});
}
答案 1 :(得分:0)
这是一个非常好的问题,并且涉及office.js技术的核心概念之一:我们如何处理空值?长话短说,只要是一种方法/属性返回null的可能性,我们就会提供该方法/属性的风格:
第二种口味可以从11月份的叉子(版本16.0.7668+)开始提供,所以请确保更新您的客户以确保其正常工作。
所以要具体回答你的问题:这种行为是设计的。如果要验证选择中是否存在内容控件,则需要使用range.parentContentControlOrNullObject属性。然后你可以检查它是否为null。以下是如何实现此目的的示例:
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);
})
})

希望这能澄清概念