Cambiare la dimensione o il carattere di tutte le formule

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


    Other languages:

    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.
    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