【问题标题】:Get style/font (font size, color etc) of current paragraph via Word API通过 Word API 获取当前段落的样式/字体(字体大小、颜色等)
【发布时间】:2017-11-18 01:37:12
【问题描述】:

我正在开发一个 word 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...
    });
});

但是这似乎不可靠,有时不起作用。

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

有什么好办法吗?这似乎是 word 插件中非常常见的用例。

【问题讨论】:

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


    【解决方案1】:

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

    要获取要插入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);
            });
    });
    

    请注意,如果用户有一个包含多种字体的选择,这将为font 返回一个null。为了解决这个问题,您可以使用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);
            });
    });
    

    【讨论】:

    • 似乎可以按照我的意愿工作,谢谢。我知道我会遗漏一些简单的东西。
    • 是的,加载('font')和上下文同步是正确获取字体属性(如字体大小)所需要的
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2011-10-21
    • 2016-12-07
    • 1970-01-01
    相关资源
    最近更新 更多