Difference between revisions of "ES/Desarrollo/Macros"

From Apache OpenOffice Wiki
< ES
Jump to: navigation, search
(Variables)
m (Programación en Macros)
Line 1: Line 1:
 
== Programación en Macros ==
 
== 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  
 
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.
+
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'''.
  
 
[[Image:Basicmacrodialog.png]]
 
[[Image:Basicmacrodialog.png]]

Revision as of 22:12, 16 February 2008

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.

Basicmacrodialog.png

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

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 [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

Personal tools