【问题标题】:Office Js detachFromList() online Word issueOffice Js detachFromList() 在线Word问题
【发布时间】:2017-06-29 10:56:16
【问题描述】:

这是我的代码:

let paragraph = paragraphs.items[paragraphs.items.length - 1];
let p = paragraph.insertParagraph('', window.Word.InsertLocation.after);

if (paragraph.isListItem) {
    p.detachFromList()
    p.leftIndent = 0
}

感谢关注 SO 问题的 MS 人员的帮助,它运行良好。

但是,这适用于 Word 的桌面版本。 Word 的在线版本在使用某些模板时不会结束项目符号列表,因此会将新内容 (p) 添加为列表的一部分。不会抛出任何错误。

我曾在几个地方尝试过使用paragraph.insertBreak('line'),但我不确定在此最好的做法是为了在各个平台上保持相同的用户体验。

我有什么方法可以做到这一点,使其在桌面版和在线版 Word 上都能正常工作?在 Chrome 中测试,使用模板 General Notes 测试项目符号列表。如果项目符号列表由用户通过主菜单生成,则可以在线正常工作,但 General Notes 不起作用。

【问题讨论】:

    标签: ms-office office-js


    【解决方案1】:

    我刚刚尝试了我在网上用 word 发送给你的完全相同的代码,它也可以工作,所以你应该没问题...

    在最后插入段落后尝试应用它。

    Word.run(function (context) {
            var  listI = context.document.body.paragraphs.getLast().listItemOrNullObject;
            context.load(listI);
            return context.sync()
                .then(function () {
                    if (listI.isNullObject) { // check out how i am validating if its null.
                        console.log("there is no list at the end")
                    }
                    else {
                        context.document.body.paragraphs.getLast().detachFromList();
                        context.document.body.paragraphs.getLast().leftIndent = 0;
                        return context.sync();
                    }
    
                })
        })

    【讨论】:

    • 您是否专门尝试使用模板General Notes?如果手动生成列表,它在在线单词中可以正常工作,但在此模板中不起作用。
    • 编辑 - 我已经复制/粘贴了您的代码。在桌面上可以正常工作,但根本无法在线工作。它所做的只是将列表的左缩进设置为 0。如果需要,我可以向您发送屏幕截图和确切的代码。而且我没有看到我的新段落插入(在桌面版本中插入时)。
    • 您好,我尝试了 Online 中的代码及其工作。您在使用 One Drive for Consumer 吗?商业?还是您使用的是 onPrem SP?请告诉我。谢谢!
    • 有没有专门试过General notes这个模板?它在该模板中不起作用。它本身可以在线工作,但不在此模板中。在哪里可以查看我使用的是哪个 One Drive?
    • 您是使用组织帐户还是 MSA 帐户登录(MSA 是指 hotmail、outlook.com 类型的帐户)