Jump to content

Größe oder Schriftart für alle Formeln in einem Dokument löschen

From The Document Foundation Wiki
This page is a translated version of the page Macros/Math/001 and the translation is 93% complete.


Beschreibung

Zur Änderung eines Attributes in allen ihren Formularen foge man der Beschreibung unter Faq/Math/008 (in Französisch). Zur Änderung im Einzelfall müssen alle Formeln einzeln abgeändert werden. Bei einer grossen Anzahl Formeln kann das schnell sehr aufwändig werden.

Dieses Sktipt wählt im Dokument eingebettete Formelobjekte aus[1]. Dieses Makro löst das Problem i#5092.

A (slightly) alternative approach is offered in Ask121655.

Code

Unter Verwendung eines Python Skripts oder eines LibreOffice Basic Makros:

# coding: utf-8
from __future__ import unicode_literals

import uno
# from com.sun.star.document import OfficeDocument

FRAME_DESKTOP = 'com.sun.star.frame.Desktop'
FORMULA_PROPERTIES = 'com.sun.star.formula.FormulaProperties'

class UIFormulaCollection():
    """ Aktuelles Dokument Formelsammlung """
    def __init__(self):
        """ Durchsuche standardmäßig das aktuelle Dokument am Bildschirm """
        # ctx = uno.getComponentContext()  # GetDefaultContext
        # smgr = ctx.getServiceManager()  # GetProcessServiceManager
        # desktop =  smgr.createInstanceWithContext(FRAME_DESKTOP, ctx)  # StarDesktop
        # self.doc = desktop.CurrentComponent  # ThisComponent
        self.doc = XSCRIPTCONTEXT.getDocument()
        self.objects = self.doc.EmbeddedObjects
        self.names = self.objects.getElementNames()
    def reformat(self, fontHeight=None, font=None):
        """ füge alle gewünschten Eigenschaften hinzu """
        for name in self.names:
            element = self.objects.getByName(name).Model
            if element.supportsService(FORMULA_PROPERTIES):
                if font:
                    element.FontNameFunctions = font
                    element.FontNameText = font
                    element.FontNameNumbers = font
                    element.FontNameVariables = font
                if fontHeight:
                    element.BaseFontHeight = fontHeight
            self.doc.reformat()


def reformatAllFormulas():
    ui = UIFormulaCollection()
    ui.reformat(font="Arial", fontHeight=14)

g_exportedScripts = reformatAllFormulas,
Option Explicit

Sub ChangeFormulasSizeAndFont()
    '''Ändere die Größe oder die Schriftart aller Math Formeln im Dokument'''
    Dim element As Object ' com.sun.star.text.TextEmbeddedObject.Model
    Dim realElem As Object ' com.sun.star.text.TextEmbeddedObject.(get)EmbeddedObject
    
    For each element in ThisComponent.getEmbeddedObjects() 

        If (not isNull(element.Model)) Then
            With element.Model
            If .supportsService("com.sun.star.formula.FormulaProperties") Then
                ' Force the update
                realElem = element.EmbeddedObject
                realElem.updateMode = com.sun.star.embed.EmbedUpdateModes.ALWAYS_UPDATE
                .BaseFontHeight = 14
                .FontNameVariables = "Arial"
                .FontNameFunctions = "Arial"
                .FontNameNumbers = "Arial"
                .FontNameText = "Arial"
            End If
            End With ' element As com.sun.star.formula.FormulaProperties
       End If

    Next element

    ThisComponent.reformat()

End Sub ' ChangeFormulasSizeAndFont

ODT Dateien, um das Makro zu testen

Zum Testen kann jedes veröffentlichte Math Handbuch herhalten.

Hinweise

  • Siehe die API Dokumentation zu den FormulaProperties zu anderen änderbaren Eigenschaften.