Ms word 如何从word加载项中的当前选择中获取parentContentControls

Ms word 如何从word加载项中的当前选择中获取parentContentControls,ms-word,office365,office-js,word-addins,javascript-api-for-office,Ms Word,Office365,Office Js,Word Addins,Javascript Api For Office,我正在使用word javascript api开发一个word插件,需要获取当前选择的contentControl,因此使用parentContentControl进行当前选择 **Code:** var range = context.document.getSelection().parentContentControl; context.load(range); 但在控制台上显示错误: 错误:{“name”:“OfficeExtension.Error”,“code”:“Gen

我正在使用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:匿名函数处的GeneralException\n(https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:189006)\n在π处(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在l(https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.js:19:210076)“}

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


谢谢。

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

  • 默认值。无特殊后缀。如果返回值为null(在本例中,选择没有内容控制),此味道会立即引发异常,正如您在问题中正确描述的。这是出于设计
  • 返回一个“Null对象”。它们有一个*OrNullObject后缀。这种风格不会引发异常,但会返回一种验证对象是否为Null的方法。(注意,在本文中,“Null对象”与JavaScript Null不同,请不要因此混淆)
  • 第二个版本将从11月份开始提供(builds 16.0.7668+),因此请确保更新您的客户机以查看此版本是否有效

    因此,要具体回答您的问题:这种行为是经过设计的。如果要验证所选内容中是否存在内容控件,则需要使用range.parentContentControlOrNullObject属性。然后可以检查其是否为null。以下是一个示例,说明如何完成此操作:

    var myCC=context.document.getSelection().parentContentControlOrNullObject;//此风格不会引发异常。
    context.load(myCC);
    返回context.sync()
    .然后(函数(){
    if(myCC.isNullObject)//当使用这种风格的属性时,您将得到一个isNullObject来检查它是否为null,并相应地执行操作。
    log(“没有内容控件”);
    其他的
    showNotification(“有一个内容控件包装所选内容”);
    })
    .catch(函数(e){
    控制台日志(e.message);
    })
    
    })
    这是2016版Microsoft Office word。 同样的代码在16.0.7571.7095中工作正常。但在其他word 2016版本中不工作

    函数insideOfContentControlCheck(){
    Word.run(函数(ctx){
    var myCC=ctx.document.getSelection().parentContentControl;
    加载(myCC);//我想这就是你缺少的部分!
    返回ctx.sync()
    .然后(函数(){
    console.log(myCC.title);//如果有内容控件,我们将显示标题
    });
    }).catch(函数(e){
    //没有内容控制。
    console.log(“错误”,例如消息);
    });
    
    }
    @Balmori感谢您的详细回复,我已经尝试了上面的代码,但仍然得到了错误:错误:{“描述”:“无法获取未定义或空引用的属性”\u objectPath”,“数字”:-2146823281,“堆栈”:“类型错误:无法获取t.validateObjectPath()\n在t.createQueryAction()\n在i.prototype.load(…我的Office JavaScript API库:您的Office构建是什么?请确保您处于启用状态latest@Balmori我正在使用上述office Api库,它显示的版本为:16.0.7805.1000。我的MS word客户端版本为:1612(Build 7678.2066)。请提供建议。我们已找到“一般异常”的解决方案“。您可以使用parentContentControlOrNullObject而不是parentContentControl。它在最新的word版本中运行良好。
    Debug info: {"errorLocation":"Range.parentContentControl"}