Macros/Math/001/es
TDF LibreOffice en español Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Preguntas y respuestas Donar
Descripción
Cuando desee modificar un atributo en todas las fórmulas que vaya a escribir, simplemente siga el procedimiento descrito en Faq/Math/008. Si desea cambiar los atributos de todas las fórmulas "después de haberlas escrito, debe volver a abrir las fórmulas una a una y realizar las modificaciones. Si el documento contiene muchas fórmulas, esto puede volverse muy tedioso.
Este script selecciona objetos de fórmula incrustados.[1] en el documento, y actualiza las propiedades de las fórmulas[2]. Esta macro resuelve el problema referenciado en: i#5092.
Código
en LibreOffice Basic:
Option Explicit
Sub ChangeFormulasSizeAndFont()
'''Cambiar el tamaño o el tipo de letra de todas las fórmulas matemáticas en el 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
'Forzar la actualización
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
en 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():
""" Colección de fórmulas del documento en uso """
def __init__(self):
""" incluir el documento en la interfaz de usuario de forma predeterminada """
# 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):
""" agregue tantas propiedades como desee """
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,
Documentos ODT para probar la macro
Aunque no es su cometido, puede descargar cualquier capítulo de la Guía de Math de LibreOffice porque ya contienen fórmulas y experimentar con las macros.
Notas:
- Consulte la documentación de la API sobre
Propiedades de las fórmulas
para conocer otros atributos que se pueden modificar.
- ↑ Vea la documentación de la API referente a los servicios com.sun.star.text.TextEmbeddedObjects y com.sun.star.text.TextEmbeddedObject
- ↑ Vea la documentación de la API relativa al servicio com.sun.star.formula.FormulaProperties