Office js 如何在桌面word中操作JavaScript加载项中选定的段落?

Office js 如何在桌面word中操作JavaScript加载项中选定的段落?,office-js,Office Js,我正在尝试设置JavaScript加载项中所有选定段落的样式。这段代码在Word Online中运行得很好,但在Word Desktop中使用时出错。代码如下(是的,我的测试风格叫“香蕉”,它是大的和黄色的): 调试显示,在设置段落样式后,context.sync中出现错误。从错误消息中可以看出,我正在使用unnified office.js进行调试,但是默认的office.js也会发生错误,只是没有那么有用的stacktrace。如果我设置了range.style=“Banana”,而不是同时

我正在尝试设置JavaScript加载项中所有选定段落的样式。这段代码在Word Online中运行得很好,但在Word Desktop中使用时出错。代码如下(是的,我的测试风格叫“香蕉”,它是大的和黄色的):

调试显示,在设置段落样式后,
context.sync
中出现错误。从错误消息中可以看出,我正在使用unnified office.js进行调试,但是默认的office.js也会发生错误,只是没有那么有用的stacktrace。如果我设置了
range.style=“Banana”
,而不是同时在Word Online和Word Desktop上使用段落。“香蕉”样式是一种链接样式(因此它应该适用于段落和字符)

项目[I].delete()
项目[I].insertText(“Hello world”,“After”)
替换
项目[I].style=“Banana”
时,我会遇到完全相同的错误,因此问题与样式本身无关

我发现的一个可能的解决方法是,我可以在选定的范围内设置段落样式,它将按预期工作(设置所有选定段落的样式,即使是部分选定的段落),但我想我必须在某个时候使用
段落集合
,所以我仍然想知道我做错了什么


我已经用Word版本16.0.7341.2035和16.0.7167.2060进行了测试。

很有趣。我不确定我是否会这样编码。我可以建议您修改代码以适当地使用段落集合吗?如果您这样做,我认为您的代码将大大简化:

Word.run(函数(上下文){
var pars=context.document.getSelection().段落;
部分负荷();
返回context.sync().then(函数(){
对于(变量i=0;i});我将确保尝试您的版本。你能解释一下区别吗?桌面word版本确实在段落.items属性中报告了正确数量的选定段落,因此我得到的印象是它已正确初始化。长话短说,这是一种我们需要修复的缺陷。关于Word.run存在的根本原因,说来话长。在我们的API的早期阶段,曾经有一段时间,当您需要在批处理之间保留一个变量时,您需要以显式的方式进行,将您的变量添加到我们称之为引用集合中,并且您还需要确保在使用完这些变量后释放资源,有点像是以calloc/malloc的方式。因此,Word.run的美妙之处在于,开发人员不需要担心复杂性,只需跨批使用变量,我们就可以为开发人员保留引用。您的代码存在的问题是,我们没有保留您在windows上的load语句中请求的集合的引用(在联机中,有一个更新也将失败)。但是由于您的问题(thx!),我们也在考虑添加加载中请求的项目的引用。所以现在请按照我的建议修改一下你的编程风格,你应该会没事的。几个月后,您的原始代码也将在任何地方获得成功。谢谢
function updateParStyle(event) {
    Word.run(function (context) {
        var range = context.document.getSelection();
        range.load("paragraphs/items");
        return context.sync().then(function () {
            var items = range.paragraphs.items;
            // console.log(items.length + " items");
            for (var i = 0; i < items.length; i++) {
                items[i].style = "Banana";
            }
            return context.sync();
        });
    }).catch(function (e) {
        console.error(e);
        return window.open("https://urldecode.org/?text=" + JSON.stringify(e));
    });
    event.completed();
}