Größe oder Schriftart für alle Formeln in einem Dokument löschen
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
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.
Code
In LibreOffice Basic:
Option Explicit
Sub ChangeFormulasSizeAndFont()
'''Ändere die Größe oder die Schriftart aller Math Formeln im Dokument'''
Dim embeddedObjects As Object ' com.sun.star.text.TextEmbeddedObjects
Dim elementNames() As String ' Name array
Dim element As Object ' com.sun.star.text.TextEmbeddedObject.Model
Dim realElem As Object ' com.sun.star.text.TextEmbeddedObject.(get)EmbeddedObject
embeddedObjects = ThisComponent.getEmbeddedObjects() ' com.sun.star.text.TextEmbeddedObjects
elementNames = embeddedObjects.getElementNames() ' name array
For i = 0 To UBound(elementNames)
element = embeddedObjects.getByName(elementNames(i)).Model
If (not isNull(element)) Then
With element ' com.sun.star.text.TextEmbeddedObject.Model
If .supportsService("com.sun.star.formula.FormulaProperties") Then
' Erzwinge die Aktualisierung
realElem = embeddedObjects.getByName(elementNames(i)).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 i
ThisComponent.reformat()
End Sub ' ChangeFormulasSizeAndFont
in Phyton:
# 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,
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.
- ↑ Siehe die API Dokumentation für com.sun.star.text.TextEmbeddedObjects und com.sun.star.text.TextEmbeddedObject Dienst