Macros/Math/001/es
TDF LibreOffice Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Ask LibreOffice 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.
Puede encontrar un enfoque alternativo en Ask LibreOffice > Ask121655.
Código
En Python o LibreOffice Basic:
# 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,
Option Explicit
Sub ChangeFormulasSizeAndFont()
'''Cambiar el tamaño o el tipo de letra de todas las fórmulas matemáticas en el documento'''
Dim element As Object ' com.sun.star.text.TextEmbeddedObject.Model
Dim realElem As Object ' com.sun.star.text.TextEmbeddedObject.(get)EmbeddedObject
For each element in ThisComponent.getEmbeddedObjects()
If (not isNull(element.Model)) Then
With element.Model
If .supportsService("com.sun.star.formula.FormulaProperties") Then
' Force the update
realElem = element.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 element
ThisComponent.reformat()
End Sub ' ChangeFormulasSizeAndFont
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