Difference between revisions of "ES/Desarrollo/Macros"
m (OOoES/Desarrollo/Macros moved to ES/Desarrollo/Macros: ISO compliancy) |
|||
Line 173: | Line 173: | ||
− | [[Category: | + | [[Category:ES]] [[Category:Macros]] |
Revision as of 00:40, 18 July 2012
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.
Contents
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