如何更改 LibreOffice Writer 中所有公式的字体

如何更改 LibreOffice Writer 中所有公式的字体

有没有办法快速更改文档中所有公式的字体?也许有内置样式之类的...

我不想为新的样式设置默认样式,而是想改变现有的样式。

答案1

我不认为公式有内置样式。但是,你可以使用宏迭代所有公式并更改样式。法国 OpenOffice.org 常见问题解答有一个这样的宏的示例:

Sub Main
    embeddedObjects = ThisComponent.getEmbeddedObjects()
    elementNames = embeddedObjects.getElementNames()
    for i=0 to UBOUND(elementNames)
        element = embeddedObjects.getByName(elementNames(i)).Model
        if (not isNull(element)) then
            if (element.supportsService("com.sun.star.formula.FormulaProperties")) then
                element.BaseFontHeight = 14
                element.FontNameVariables= "Arial"
                element.FontNameFunctions = "Arial"     
                element.FontNameNumbers= "Arial"        
                element.FontNameText= "Arial"       
            endif
        endif
    next i
    ThisComponent.reformat()
End Sub

答案2

对于 LibreOffice,我必须对宏进行一些更改才能自动更新公式。我查看了OpenOffice 论坛紧接着现在的那个。

这是我使用过的宏:

REM  *****  BASIC  *****
Sub ReformatFormules
    embeddedObjects = ThisComponent.getEmbeddedObjects()
    elementNames = embeddedObjects.getElementNames()
    for i=0 to UBOUND(elementNames)
        element = embeddedObjects.getByName(elementNames(i)).Model
        oXEO = embeddedObjects.getByName(elementNames(i)).ExtendedControlOverEmbeddedObject
        iCurrentState = oXEO.currentState
        oXEO.changeState(com.sun.star.embed.EmbedStates.UI_ACTIVE)
        if (not isNull(element)) then
            if (element.supportsService("com.sun.star.formula.FormulaProperties")) then
                element.BaseFontHeight = 10
                element.FontNameVariables= "Times New Roman"
                element.FontVariablesIsItalic=1
                element.FontNameFunctions = "Times New Roman"     
                element.FontNameNumbers= "Times New Roman"        
                element.FontNameText= "Times New Roman"       
            endif
        endif
    next i
End Sub

答案3

我尝试尽可能地简化它并使其尽可能快地运行(改变状态或“单击它”对我来说确实非常慢),然后我想出了这个解决方案:

Sub FormulaFontSizeChanger
    f = InputBox("New font size:", "BaseFontHeight", 9)
    o = ThisComponent.getEmbeddedObjects()
    For i = 0 to o.count-1
        if (not IsNull(o(i))) and (not IsNull(o(i).Model)) then
            o(i).Model.BaseFontHeight = f
            o(i).Component.BaseFontHeight = f
            o(i).ExtendedControlOverEmbeddedObject.update()
        endif
    Next i
End Sub

这里的秘诀是 o(i).ExtendedControlOverEmbeddedObject.update()。它告诉 libreoffice 在内部更新/重新绘制嵌入对象,因此我们不必“欺骗”它进行更新。

看来可能没有必要同时更新组件和模型,但我觉得最好彻底一点。

顺便说一句,我正在使用 LibreOffice v4.3.4.1年龄变化率

相关内容