Cambiare la dimensione o il carattere di tutte le formule
TDF LibreOffice Document Liberation Project Blog comunitari Weblate Nextcloud Redmine Ask LibreOffice Donazione
Descrizione
Quando volete modificare un attributo in tutte le formule che state per scrivere, seguite la procedura descritta in Faq/Math/008. Se volete cambiare "dopo il fatto", dovete riaprire tutte le formule e apportare le modifiche. Se il numero di formule è elevato, questo può diventare rapidamente noioso.
Questo script seleziona gli oggetti formula incorporati[1] nel documento, e aggiorna le proprietà delle formule previste[2]. Questa macro risolve il problema i#5092.
Codice
In LibreOffice Basic:
Option Explicit
Sub ChangeFormulasSizeAndFont()
'''Cambia la dimensione o il carattere di tutte le formule matematiche nel documento'''
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
' Forza l'aggiornamento
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
Con Pythonː
# 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():
""" Raccolta di formule del documento corrente """
def __init__(self):
""" Prendete il documento corrente dall'interfaccia utente per impostazione predefinita """
# 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):
""" aggiungete tutte le proprietà che desiderate """
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,
File ODT per provare la macro
Prendete qualsiasi Guida matematica pubblicata da LibreOffice a scopo di test.
Note
- Consultate la documentazione API su
FormulaProperties
per esplorare altre proprietà che possono essere modificate.
- ↑ Si veda la documentazione API per com.sun.star.text.TextEmbeddedObjects e com.sun.star.text.TextEmbeddedObject servizi
- ↑ Consulta la documentazione API per com.sun.star.formula.FormulaProperties servizio