(适用于Office的JavaScript API 1.3)自定义属性GetItemOrNull

(适用于Office的JavaScript API 1.3)自定义属性GetItemOrNull,javascript,ms-word,ms-office,office-js,office-addins,Javascript,Ms Word,Ms Office,Office Js,Office Addins,我在几天前创建了一个文档,在这个文档中,我需要关于如何将自定义属性添加到所述文档的帮助 首先,我正在运行Word 1701(7766.2047) 假设我有一个方法,其中我返回一个自定义属性。首先,我要检查自定义属性是否已经创建。我将使用一个简单的getItemOrNullObject(键)和 如果返回null,则只需创建并返回它 否则就退货 我的理解是,我需要执行一个返回context.sync()。然后为对象实际加载数据?我是不是做了太多的返回上下文。sync()调用都没有结果 Wor

我在几天前创建了一个文档,在这个文档中,我需要关于如何将自定义属性添加到所述文档的帮助

首先,我正在运行Word 1701(7766.2047)


假设我有一个方法,其中我返回一个自定义属性。首先,我要检查自定义属性是否已经创建。我将使用一个简单的getItemOrNullObject(键)和

  • 如果返回null,则只需创建并返回它
  • 否则就退货
我的理解是,我需要执行一个返回context.sync()。然后为对象实际加载数据?我是不是做了太多的返回上下文。sync()调用都没有结果

Word.run(函数(上下文){
var customDocProps=context.document.properties.customProperties;
加载(customDocProps);
返回context.sync()
.然后(函数(){
var temp=customDocProps.getItemOrNullObject(“X”);
返回context.sync()
.然后(函数(){
如果(!temp){
context.document.properties.customProperties.add(“X”,1234);
temp=customDocProps.getItemOrNullObject(“X”);
返回context.sync()
.然后(函数(){
返回温度;
});
}否则{
返回温度;
}
});
});

});谢谢你提出这个问题

除了一个小细节外,您的代码是正确的:所有*getItemOrNullObject方法都不返回JavaScript null,因此“if(!temp)”语句将无法按预期工作。如果要验证存在性,则需要调用If(temp.isNullObject)

还有几点建议:

  • add()语义是,如果属性确实存在,它将被替换。因此,如果要创建或更改属性,则无需检查它是否存在。如果要读取其当前值,则需要执行以下操作。这回答了你的第二个问题
  • 如果您对加载单个属性感兴趣,我为您的代码提供了一个简化且更有效的建议
  • Word.run(函数(上下文){
    var myProperty=context.document.properties.customProperties.getItemOrNullObject(“X”);
    加载(myProperty);
    返回context.sync()
    .然后(函数(){
    if(myProperty.isNullObject){
    //这意味着自定义属性不存在。。。。
    context.document.properties.customProperties.add(“X”,1234);
    console.log(“创建的属性”);
    返回context.sync();
    }
    其他的
    log(“属性已经存在,值:“+myProperty.value”);
    })
    })
    .catch(函数(e){
    控制台日志(e.message);
    
    })
    我使用这些函数获取或设置自定义属性

    //设置当前Word文件的自定义属性
    函数setDocProperty(propName、propValue、回调){
    运行(上下文=>{
    context.document.properties.customProperties.add(propName,propValue)
    返回context.sync()
    .然后(()=>{
    回调(空)
    })
    .catch(e=>{
    回调(新错误(e))
    })
    })
    }
    //从当前Word文件获取自定义属性
    函数getDocProperty(propName,回调){
    运行(上下文=>{
    var customDocProps=context.document.properties.customProperties
    //首先,加载自定义属性对象
    加载(customDocProps)
    返回context.sync()
    .然后(函数(){
    //现在加载实际属性
    var filenameProp=customDocProps.getItemOrNullObject(propName)
    加载(filenameProp)
    返回context.sync()
    .然后(()=>{
    回调(null,filenameProp.value)
    })
    .catch(错误=>{
    回调(新错误(err))
    })
    })
    .catch(错误=>{
    回调(新错误(err))
    })
    })
    }
    
    您可以这样使用它们:

    setDocProperty('docId',28,()=>{
    console.log('属性集')
    })
    getDocProperty('docId',(错误,值)=>{
    如果(错误){
    console.log('Error get property',err)
    }否则{
    console.log('属性为'+值)
    }
    })
    
    据我所知,Word.run()是异步运行的,所以如果我想存储它的返回值,我应该尝试使用回调。Word.run()是否可以执行此操作?如果要返回属性值,请使用示例从my sample.using返回myProperty.value上的内容。当标记为null时,我总是在context.sync()之后得到一个常规异常,正如您所写的那样,它是逐字的,所以我看不出有什么问题。我应该提出一个新问题吗?对不起,没有得到你想要的。。。你在说什么标签?谢谢我发现了我的问题!我正在尝试添加一个数组对象!这就是为什么这不起作用。你能就如何解决这个问题给我一些建议吗?我希望添加一个javascript数组,这就是它崩溃的原因