ES/Desarrollo/Macros
Contents
Programación en Macros
Esta pagina tiene por objeto el introducir a la persona interesada con el desarrollo de Macros, conceptos básicos y se incluyen algunos ejemplos básicos que le serán de gran ayuda para adentrarse en el desarrollo de Macros . Para probar las siguientes Macros vaya al menú desplegable de OpenOffice.org > Herramientas > Macros > Organizar Macros.
El dialogo de organizacion de macros contiene diferentes areas de produccion de macros. Las macros se pueden observar en tres niveles:
- Nivel de tu documento
- Tu perfil en el equipo
- A nivel sistema
Esto quiere decir que tu macro estara en cada nivel representando algunas ventajas y desventajas.
Hola Mundo
OpenOffice.org no tiene una salida estandar (stout) por que es una aplicacion de GUI asi que debemos basarnos en funciones como msgBox para poder sacar el resultado.
[oobas]
REM ***** BASIC *****
Sub Main
msgBox "Hola Mundo"
End Sub
Variables
Ahora pondremos un juego sencillo de variables donde primero declaramos las variables usando Dim y despues asignandole un valor numerico.
[oobas]
REM **** VARIABLES ****
Sub Main Dim a Dim b Dim c
a = 1 b = 2 c = a + b
msgBox c
End Sub
Ejemplo 1: Copiar Todas las celdas y pegarlas en una hoja nueva
- Este ejemplo sirve para copiar el contenido de una planilla e insertarla en un segundo documento creado. Este ejemplo de Macro fue desarrollado por
Stephan Wunderlich. En esta macro se utilizan dos funciones principales la : dispatchURL que recibe como parámetros el nombre del documento y las celdas copiadas y además la función principal CopySpreadsheet.
Author: Stephan Wunderlich
[oobas]
Sub CopySpreadsheet
firstDoc = ThisComponent
REM En las siguientes 3 líneas le decimos a OpenOffice que seleccione REM en esta planilla todas las celdas cree una nueva hoja y las copie
selectSheetByName(firstDoc, "Sheet2") dispatchURL(firstDoc,".uno:SelectAll") dispatchURL(firstDoc,".uno:Copy") secondDoc = StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
REM Luego de copiar las celdas las insertamos en la nuevo hoja
secondDoc.getSheets().insertNewByName("inserted",0) selectSheetByName(secondDoc, "inserted") dispatchURL(secondDoc,".uno:Paste")
End Sub
Sub selectSheetByName(document, sheetName)
End Sub
REM Al copiar y pegar las celdas creamos una función donde le pasamos como argumentos REM el documento y los parámetros que en este caso son las celdas copiadas y pegadas.
Sub dispatchURL(document, aURL)
Dim noProps() Dim URL As New com.sun.star.util.URL
frame = document.getCurrentController().getFrame() URL.Complete = aURL transf = createUnoService("com.sun.star.util.URLTransformer") transf.parseStrict(URL)
disp = frame.queryDispatch(URL, "", com.sun.star.frame.FrameSearchFlag.SELF _ OR com.sun.star.frame.FrameSearchFlag.CHILDREN) disp.dispatch(URL, noProps())
End Sub
Ejemplo 2: Configura una tabla para que tenga un ancho de columna optima
En el siguiente ejemplo debemos haber creado una tabla con algún contenido, ya sea texto o números. La idea de la siguiente macro es seleccionar el contenido de la tabla y en base a él optimizar el ancho de la tabla, lea los comentarios para mayor detalle de lo que hace el código fuente.
[oobas]
Sub SetTableOptimumWidth
Dim oDispHelper
REM Ayudante del Dispatch
Dim oFrame
REM Marco Actual de la Ventana .
Dim oTable
REM Primera tabla en el documento
Dim oVCursor
REM La vista del cursor
Dim s$
oTable = ThisComponent.getTextTables().getByIndex(0)
REM Selección de la tabla a optimizar
ThisComponent.getCurrentController().select(oTable) oVCursor = ThisComponent.getCurrentController().getViewCursor() oVCursor.gotoEnd(True) oVCursor.gotoEnd(True) oFrame = ThisComponent.CurrentController.Frame oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")
REM Finalmente Aplicamos la optimización de la columna
s$ = ".uno:SetOptimalColumnWidth" oDispHelper.executeDispatch(oFrame, s, "", 0, Array())
End SubSub SetTableOptimumWidth
Dim oDispHelper
REM Ayudante del Dispatch
Dim oFrame
REM Marco Actual de la Ventana .
Dim oTable
REM Primera tabla en el documento
Dim oVCursor
REM La vista del cursor
Dim s$
oTable = ThisComponent.getTextTables().getByIndex(0)
REM Selección de la tabla a optimizar
ThisComponent.getCurrentController().select(oTable) oVCursor = ThisComponent.getCurrentController().getViewCursor() oVCursor.gotoEnd(True) oVCursor.gotoEnd(True) oFrame = ThisComponent.CurrentController.Frame oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")
REM Finalmente Aplicamos la optimización de la columna
s$ = ".uno:SetOptimalColumnWidth" oDispHelper.executeDispatch(oFrame, s, "", 0, Array())
End SubSub SetTableOptimumWidth
Dim oDispHelper
REM Ayudante del Dispatch
Dim oFrame
REM Marco Actual de la Ventana .
Dim oTable
REM Primera tabla en el documento
Dim oVCursor
REM La vista del cursor
Dim s$
oTable = ThisComponent.getTextTables().getByIndex(0)
REM Selección de la tabla a optimizar
ThisComponent.getCurrentController().select(oTable) oVCursor = ThisComponent.getCurrentController().getViewCursor() oVCursor.gotoEnd(True) oVCursor.gotoEnd(True) oFrame = ThisComponent.CurrentController.Frame oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")
REM Finalmente Aplicamos la optimización de la columna
s$ = ".uno:SetOptimalColumnWidth" oDispHelper.executeDispatch(oFrame, s, "", 0, Array())
End Sub