Programacion en Macros

From Apache OpenOffice Wiki
< ES
Revision as of 16:55, 29 October 2012 by RGB (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Documentation exclamation.png
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.

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.

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
Personal tools