Cambiare la dimensione o il carattere di tutte le formule

From The Document Foundation Wiki
< Macros‎ | Math
Jump to navigation Jump to search
This page is a translated version of the page Macros/Math/001 and the translation is 100% complete.
Other languages:
English • ‎français • ‎italiano

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():
    """ Current document formulae collection """
    def __init__(self):
        """ Grab current doc in UI by default """
        # 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):
        """ add as many properties as desired """
        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.
  1. Si veda la documentazione API per com.sun.star.text.TextEmbeddedObjects e com.sun.star.text.TextEmbeddedObject servizi
  2. Consulta la documentazione API per com.sun.star.formula.FormulaProperties servizio