通过Word API获取当前段落的样式/字体(字体大小,颜色等)

时间:2017-11-17 16:53:45

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

我正在开发一个单词web加载项,它涉及将一些文本(如OOXML)插入到word文档中。

插入功能正常但我希望插入的文本与用户当前正在编辑的区域具有相同的字体大小和颜色等。

我在某种程度上通过在光标处获取当前段落来实现这一点:

Word.run((context) => {
    var pars = context.document.getSelection().paragraphs;
    pars.load();

    return context.sync().then(() => {
            var par = pars.items[0];
            var font = par.font.load();
            var style = par.style;

            // Do stuff with the style & font...
    });
});

然而,这似乎不可靠,有时无法发挥作用。

我想在当前的输入位置获取样式,或者以某种方式直接从功能区中的值读取它们:

enter image description here

这样做有好办法吗?在单词加载项中,这似乎是一个非常常见的用例。

1 个答案:

答案 0 :(得分:2)

paragraph不会是可靠的范围,因为它可以使用多种字体和大小轻松包含内容。您还只检索第一段甚至 more 可能具有不同的属性(即标题)。

要获取要插入OOXML的确切位置的字体信息,您希望使用document.getSelection()返回range个对象。这将允许您获取光标位置的当前字体:

return Word.run(function (context) {
    var range = context.document.getSelection();
    range.load('font');

    return context.sync()
        .then(function () {
            console.log("Font: " + range.font.name);
            console.log("Size: " + range.font.size);
        });
});

请注意,如果用户的选择包含多种字体,则会为null返回font。要解决这个问题,您可以使用getRange("start")range重新调整到该部分的开头:

return Word.run(function (context) {
    var range = context.document.getSelection();
    range = range.getRange("start");
    range.load('font');

    return context.sync()
        .then(function () {
            console.log("Font: " + range.font.name);
            console.log("Size: " + range.font.size);
        });
});