如何通过word-js获取/更改选择中的第一段?

时间:2017-07-04 08:33:13

标签: javascript ms-word ms-office office-js office-addins

我正在使用javascript api开发一个Word加载项。我试图在选择中显示第一段的文本。后来我想改变这一段。

但是,如果段落包含在表格中,则已显示文本失败。如果选择了表格单元格,则单元格中包含的段落似乎都不包含在context.document.getSelection()。paragraph集合中。

为什么会这样?如果选择包括大表中的表格单元,我应该如何导航到选择中的第一段?

以下是我用来调试问题的代码:

(function () {
    "use strict";

    // The initialize function is run each time the page is loaded.
    Office.initialize = function (reason) {
        $(document).ready(function () {

            // Use this to check whether the API is supported in the Word client.
            if (Office.context.requirements.isSetSupported('WordApi', 1.1)) {
                // Do something that is only available via the new APIs
                $('#button').click(doSomething);
                $('#status').html('Everything is fine.');
            }
            else {
                // Just letting you know that this code will not work with your version of Word.
                $('#supportedVersion').html('This code requires WordApi 1.1 or greater.');
            }
        });
    };

    function doSomething() {
        Word.run(function (context) {
            // get selection
            var selection = context.document.getSelection();
            // load the text of all paragraphs in the selection
            var paragraphs = selection.paragraphs.load('text');

            // Synchronize the document state by executing the queued commands,
            // and return a promise to indicate task completion.
            return context.sync().then(function() {
                $('#status').html(JSON.stringify(paragraphs.items));
            });
        })
        .catch(function (error) {
            $('#status').html('Error: ' + JSON.stringify(error));
            console.log('Error: ' + JSON.stringify(error));
            if (error instanceof OfficeExtension.Error) {
                console.log('Debug info: ' + JSON.stringify(error.debugInfo));
            }
        });
    }
})();

第一张图片中的选择会按预期返回[{"text":"Content21"}]

Selection of a paragraph within a cell

第二张图片中的选择根本不会返回任何文字:[]。 paragraps-collection似乎是空的。这似乎对我没有任何意义。选择中有段落。

Selection of a row containing paragraphs

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不熟悉Word API,但according the documentation选择包含一个范围,范围包含表格行选择案例中的段落列表。

所以你可以试试这个:

var range = context.document.getSelection();
var paragraphs = range.paragraphs;
var textFirstParagraph = paragraphs.items[0].getRange().load('text');

进一步研究文档的链接:

答案 1 :(得分:0)

我注意到,word-js中所有与表相关的对象仅在需求集1.3而不是1.1时可用。此外,它们未在文档

左侧的菜单中列出

https://dev.office.com/reference/add-ins/word/paragraph

尽管如此,也可以点击例如浏览它们。关于Paragraph-object的“parentTable”属性的类型。

由于我在我的word-js版本(https://github.com/OfficeDev/office-js-docs/issues/961)的另一个关键功能中遇到了一个明显的错误,看起来需求集1.1不适合与表的交互,我认为这是一个错误。我在这里报告了它:https://github.com/OfficeDev/office-js-docs/issues/972

顺便说一下:为了增加混淆,共享api(https://dev.office.com/reference/add-ins/shared/tabledata)中还有一个“TableData”对象,它似乎被需求集1.3的表格所取代。我不知道这是做什么以及我是否应该使用它。