Programacion en Macros
![]() |
Página obsoleta |
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.
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.
REM **** VARIABLES ****
Sub Main
Dim a
Dim b
Dim c
a = 1
b = 2
c = a + b
msgBox c
End Sub
MsgBox nos mostrara el valor de la variable c el cual es igual a 3, esto por que a + b es igual a los valores "1" y "2".
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
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.
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