Uso de cookies

Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando, consideramos que acepta su uso. Para obtener más información o bien conocer cómo cambiar la configuración lea nuestra Política de cookies

Revisión a fecha de 14:18 22 jun 2016; Salva (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

Macros para Apache OpenOffice Impress

En construccion.jpg Estamos editando esta página, y su contenido no está completo

Seguimos agregando nuevas macros
En construccion 2.gif


Disculpe las molestias

Trabajando con presentaciones


Trabajando con diapositivas

Propiedades de las diapositivas


Otras

Trabajando con presentaciones

Acceder a la presentación actual

Devuelve un objeto con la presentación actualmente abierta.


Function Presentacion() As Object
'--------------------------------------------------------------------------------------------
   Presentacion = ThisComponent
End Function


Abrir una presentación existente

Abre el documento indicado en cRuta; debe contener la ruta y el nombre del documento. Por ejemplo C:\User\Docs\Informe-ventas.odp


Opcionalmente se le puede pasar un array aOpciones() de tipo com.sun.star.bean.PropertyValue, con las opciones deseadas para abrir el documento.


Function PresentacionAbrir( cRuta As String, Optional aOpciones() ) As Object
'--------------------------------------------------------------------------------------------
   cRuta = ConvertToURL( cRuta )
   If IsMissing( aOpciones ) Then aOpciones = Array()
   PresentacionAbrir = StarDesktop.LoadComponentFromURL( cRuta, "_blank", 0, aOpciones() )
End Function


Ejemplos:

  • Abrir una presentación Impress existente
   Dim miPresentacion As Object
   miPresentacion = PresentacionAbrir "C:\miPresentacionDeImpress.odp"


  • Abrir una presentación Impress pero que no sea visible (oculto):
   Dim miPresentacion As Object, aOpc(1) As New com.sun.star.bean.PropertyValue
   aOpc(0).Name = "Hidden"
   aOpc(0).Value = TRUE
   miPresentacion = PresentacionAbrir "C:\miPresentacionDeImpress.odp", aOpc()


Para conocer más propiedades al abrir un documento, ver Service MediaDescriptor.

Para conocer más opciones de filtro, ver Propiedad FilterOptions.


Abrir una presentación con macros existente

Abre una presentación con macros activadas indicado en cRuta; debe contener la ruta y el nombre del documento. Por ejemplo C:\User\Docs\Informe-ventas.odp


Function PresentacionConMacrosAbrir( cRuta As String ) As Object
'--------------------------------------------------------------------------------------------
   Dim aOpc(0) As New "com.sun.star.beans.PropertyValue"
   aOpc(0).Name = "MacroExecutionMode"
   aOpc(0).Value = 4
   PresentacionConMacrosAbrir = PresentacionAbrir( cRuta, aOpc() )
End Function


Verifica si el documento es una presentación de Impress

Devuelve Verdadero si el objeto pasado como argumento es una presentación de Impress.


Function DocEsPresentacionImpress( oDoc As Object ) As Boolean
'--------------------------------------------------------------------------------------------
   DocEsPresentacionImpress = oDoc.SupportsService( "com.sun.star.presentation.PresentationDocument" )
End Function



Cambia el modo de trabajo en Impress

Establece el modo de trabajo de la presentación pasada como argumento.

El modo de trabajo se puede establecer de alguna de estas formas:

  • Por su nombre en castellano: Normal, Esquema, Notas, Folleto, Clasificador
  • Por su nombre en inglés: Drawing, Outline, Notes, Handout, Sorter
  • Por su código numérico: Normal = 0, Esquema = 2, Notas = 3, Folleto = 4, Clasificador = 1

Por defecto, activa el modo Normal


Sub PresentacionCambiarModo( oPresentacion As Object, xModo )
'--------------------------------------------------------------------------------------------
   Dim oDispatch As Object, aModos() As String, nModo As Integer
   Select Case LCase( xModo )
   Case "normal", "drawing", 0      : nModo = 0
   Case "esquema", "outline", 2     : nModo = 2
   Case "notas", "notes", 3         : nModo = 3
   Case "folleto", "handout", 4     : nModo = 4
   Case "clasificador", "sorter", 1 : nModo = 1
   End Select
   ' normal, clasificador, esquema, notas, folleto
   aModos() = Array( ".uno:DrawingMode", ".uno:DiaMode", ".uno:OutlineMode", ".uno:NotesMode", ".uno:HandoutMode" )
   oDispatch = CreateUNOService( "com.sun.star.frame.DispatchHelper" )
   oDispatch.ExecuteDispatch( oPresentacion.CurrentController.Frame, aModos( nModo ), "", 0, Array() )
End Sub



Trabajando con diapositivas

Número de diapositivas

Devuelve el número de diapositivas que contiene la presentación pasada como argumento.


Function DiapositivasNumero( oPresentacion As Object ) As Long
'--------------------------------------------------------------------------------------------
   DiapositivasNumero = oPresentacion.DrawPages.Count()
End Function


Diapositiva activa

Devuelve un objeto con la diapositiva activa de la presentación que se pasa como argumento.


Function DiapositivaActiva( oPresentacion As Object ) As Object
'--------------------------------------------------------------------------------------------
   DiapositivaActiva = oPresentacion.CurrentController.CurrentPage
End Function


Diapositiva por índice

Devuelve un objeto con la diapositiva solicitada por su índice1 de la presentación pasada como argumento.


Function Diapositiva( oPresentacion As Object, nIndice As Long ) As Object
'--------------------------------------------------------------------------------------------
   Diapositiva = oPresentacion.DrawPages( nIndice )
End Function


Diapositiva por posición

Devuelve un objeto con la diapositiva solicitada por su posición3 de la presentación pasada como argumento.


Function DiapositivaPorPosicion( oPresentacion As Object, nPosicion As Long ) As Object
'--------------------------------------------------------------------------------------------
   DiapositivaPorPosicion = oPresentacion.DrawPages( nPosicion - 1 )
End Function


Diapositiva por nombre

Devuelve un objeto con la diapositiva solicitada por su nombre2 de la presentación pasada como argumento.

El nombre puede ser por ejemplo page 3 si el nombre no se ha personalizado, Gráfica de barras Enero si es el nombre personalizado que se le asignó.


Function DiapositivaPorNombre( oPresentacion As Object, cNombre As String ) As Object
'--------------------------------------------------------------------------------------------
   DiapositivaPorNombre = oPresentacion.DrawPages.GetByName( cNombre )
End Function


Recorrer todas las diapositivas

Recorre todas las diapositivas de la presentación pasada como argumento. Este procedimiento sólo se incluye como ejemplo de cómo recorrer todas las diapositivas de una presentación.


Sub DiapositivasRecorrer( oPresentacion As Object )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object, oDiapositivas As Object, n As Long
   oDiapositivas = oPresentacion.DrawPages
 
   For n=0 To oDiapositivas.Count()-1
      oDiapositiva = Diapositiva( oPresentacion, n )
      ' aquí tu código
      MsgBox "Diapositiva Index=" & n & " : Name=" & _
      oDiapositiva.Name &  " ; linkDisplayName=" & oDiapositiva.linkDisplayName
   Next
End Sub


Insertar nueva diapositiva

Inserta una nueva diapositiva en la presentación pasada como argumento. Devuelve un objeto con la nueva diapositiva insertada.

Si no se especifica nTrasIndice se inserta tras la última diapositiva.

Si se especifica, será el índice1 de la diapositiva tras la que deseamos insertar la nueva, teniendo en cuenta que:

  • La primera diapositiva tiene índice 0
  • No se puede insertar una nueva diapositiva antes de la primera
  • Cualquier valor menor que 0 es equivalente a decir que se inserte tras la última diapositiva

Opcionalmente se puede especificar un nombre2 para la nueva diapositiva, teniendo en cuenta que:

  • Si el nombre ya existe, se añadirá un signo + al nombre tantas veces como sea necesario hasta obtener un nombre único.


Function DiapositivaNueva( oPresentacion As Object, _
   Optional nTrasIndice As Long, Optional cNombre As String ) As Object
'--------------------------------------------------------------------------------------------
   If IsMissing( nTrasIndice ) Then nTrasIndice = -1
   DiapositivaNueva = oPresentacion.DrawPages.insertNewByIndex( nTrasIndice )
   If Not IsMissing( cNombre ) Then 
      PresentacionValidaNombreDiapositiva( oPresentacion, cNombre )
      DiapositivaNueva.Name = cNombre
   EndIf
End Function


Procedimiento auxiliar para validar nombre de diapositiva

Este procedimiento verifica que el nombre pasado como argumento es único en la presentación; si no lo es, añadirá un el argumento cSep al nombre tantas veces como sea necesario hasta obtener un nombre único.

Si se omite cSep o es una cadena vacía, se utilizará el signo + en su lugar


Sub PresentacionValidaNombreDiapositiva( oPresentacion As Object, ByRef cNombre As String, _
   Optional cSep As String )
'--------------------------------------------------------------------------------------------
   If IsMissing( cSep ) Or cSep = "" Then cSep = "+"
   While oPresentacion.DrawPages.HasByName( cNombre )
      cNombre = cNombre & cSep
   Wend
End Sub


Borrar diapositiva por índice

Elimina la diapositiva por su índice1 en la presentación pasada como argumento.


Sub DiapositivaBorra( oPresentacion As Object, nIndice As Long )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object
   oDiapositiva = oPresentacion.DrawPages( nIndice )
   oPresentacion.DrawPages.remove( oDiapositiva )
End Sub


Borrar diapositiva por posición

Elimina la diapositiva por su posición3 en la presentación pasada como argumento.


Sub DiapositivaBorraPorPosicion( oPresentacion As Object, nPosicion As Long )
'--------------------------------------------------------------------------------------------
   DiapositivaBorra( oPresentacion, nPosicion - 1 )
End Sub


Borrar diapositiva por nombre

Elimina la diapositiva por su nombre2 en la presentación pasada como argumento.


Sub DiapositivaBorraPorNombre( oPresentacion As Object, cNombre As String )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object
   oDiapositiva = DiapositivaPorNombre( oPresentacion, cNombre )
   oPresentacion.DrawPages.remove( oDiapositiva )
End Sub


Seleccionar diapositiva por índice

Selecciona la diapositiva por su índice1 en la presentación pasada como argumento.


Sub DiapositivaSeleccionar( oPresentacion As Object, nIndice As Long )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object
   oDiapositiva = oPresentacion.DrawPages( nIndice )
   oPresentacion.CurrentController.setCurrentPage( oDiapositiva )
End Sub


Seleccionar diapositiva por posición

Selecciona la diapositiva por su posición3 en la presentación pasada como argumento.


Sub DiapositivaSeleccionarPorPosicion( oPresentacion As Object, nPosicion As Long )
'--------------------------------------------------------------------------------------------
   DiapositivaSeleccionar( oPresentacion, nPosicion - 1 )
End Sub


Seleccionar diapositiva por nombre

Selecciona la diapositiva por su nombre2 en la presentación pasada como argumento.


Sub DiapositivaSeleccionarPorNombre( oPresentacion As Object, cNombre As String )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object
   oDiapositiva = DiapositivaPorNombre( oPresentacion, cNombre )
   oPresentacion.CurrentController.setCurrentPage( oDiapositiva )
End Sub


Duplicar diapositiva por índice

Duplica la diapositiva identificada por su índice1 nActual en la presentación pasada como argumento. La nueva diapositiva se situará justo a continuación de la identificada.

Opcionalmente se puede especificar un nombre2 para la nueva diapositiva, teniendo en cuenta que:

  • Si el nombre ya existe, se añadirá un signo + al nombre tantas veces como sea necesario hasta obtener un nombre único.


Sub DiapositivaDuplica( oPresentacion As Object, nIndice As Long, Optional cNombre As String )
'--------------------------------------------------------------------------------------------
   Dim oDiapositiva As Object, oNueva As Object
   oDiapositiva = oPresentacion.DrawPages( nIndice )
   oNueva = oPresentacion.duplicate( oDiapositiva )
   If Not IsMissing( cNombre ) Then
      PresentacionValidaNombreDiapositiva( oPresentacion, cNombre )
      oNueva.Name = cNombre
   EndIf
End Sub


Duplicar diapositiva por posición

Duplica la diapositiva identificada por su posición3 nPosicion en la presentación pasada como argumento. La nueva diapositiva se situará justo a continuación de la identificada.

Opcionalmente se puede especificar un nombre2 para la nueva diapositiva, teniendo en cuenta que:

  • Si el nombre ya existe, se añadirá un signo + al nombre tantas veces como sea necesario hasta obtener un nombre único.


Sub DiapositivaDuplicaPorPosicion( oPresentacion As Object, nPosicion As Long, Optional cNombre As String )
'--------------------------------------------------------------------------------------------
   DiapositivaDuplica( oPresentacion, nPosicion - 1, cNombre )
End Sub


Copiar diapositiva por índice

Copia la diapositiva identificada por su índice1 nActual justo por delante de la diapositiva identificada por su índice nNuevo en la presentación pasada como argumento.

No se admite el valor 0 para el argumento nNuevo.


Sub DiapositivaCopia( oPresentacion As Object, nActual As Long, nNuevo As Long )
'--------------------------------------------------------------------------------------------
   oDispatch = CreateUNOService( "com.sun.star.frame.DispatchHelper")
   If nNuevo = 0 Then
      ' msgbox "Esta opción no es posible"
      Beep
   ElseIf nNuevo > nActual Then
      DiapositivaSeleccionar oPresentacion, nActual
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Copy","", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo-1
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Paste", "", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo
   ElseIf nNuevo < nActual Then
      DiapositivaSeleccionar oPresentacion, nActual
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Copy","", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo-1
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Paste", "", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo
   EndIf
End Sub


Copiar diapositiva por posición

Copia la diapositiva identificada por su posición3 nPosActual justo por delante de la diapositiva identificada por su posición nPosNueva en la presentación pasada como argumento.

No se admite el valor 1 para el argumento nPosNueva.


Sub DiapositivaCopiaPorPosicion( oPresentacion As Object, nPosActual As Long, nPosNueva As Long )
'--------------------------------------------------------------------------------------------
   DiapositivaCopia( oPresentacion, nPosActual - 1, nPosNueva - 1 )
End Sub


Mover diapositiva por índice

Mueve la diapositiva identificada por su índice1 nActual justo por delante de la diapositiva identificada por su índice nNuevo en la presentación pasada como argumento.

No se admite el valor 0 para el argumento nActual ni para el argumento nNuevo.


Sub DiapositivaMueve( oPresentacion As Object, nActual As Long, nNuevo As Long )
'--------------------------------------------------------------------------------------------
   oDispatch = CreateUNOService( "com.sun.star.frame.DispatchHelper")
   If nNuevo = 0 OR nActual = 0 Then
      ' msgbox "Esta opción no es posible"
      Beep
   ElseIf nNuevo > nActual Then
      DiapositivaSeleccionar oPresentacion, nActual
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Copy","", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Paste", "", 0, Array())
      DiapositivaBorra( oPresentacion, nActual )
      DiapositivaSeleccionar oPresentacion, nNuevo+1
   ElseIf nNuevo < nActual Then
      DiapositivaSeleccionar oPresentacion, nActual
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Copy","", 0, Array())
      DiapositivaSeleccionar oPresentacion, nNuevo-1
      oDispatch.ExecuteDispatch(oPresentacion.CurrentController.Frame, ".uno:Paste", "", 0, Array())
      DiapositivaBorra( oPresentacion, nActual+1 )
      DiapositivaSeleccionar oPresentacion, nNuevo
   EndIf
End Sub


Mover diapositiva por posición

Mueve la diapositiva identificada por su posición3 nPosActual justo por delante de la diapositiva identificada por su posición nPosNueva en la presentación pasada como argumento.

No se admite el valor 1 para el argumento nPosActual ni para el argumento nPosNueva.


Sub DiapositivaMuevePorPosicion( oPresentacion As Object, nPosActual As Long, nPosNueva As Long )
'--------------------------------------------------------------------------------------------
   DiapositivaMueve( oPresentacion, nPosActual - 1, nPosNueva - 1 )
End Sub


Propiedades de las diapositivas

Índice de la diapositiva

Devuelve el el índice1 de la diapositiva pasada como argumento.

El índice en realidad no existe como propiedad, sino que la determinamos a partir de la propiedad de sólo lectura Number.


Function DiapositivaIndice( oDiapositiva As Object ) As String
'--------------------------------------------------------------------------------------------
   DiapositivaIndice = oDiapositiva.Number - 1
End Function


Posición de la diapositiva

Devuelve el la posición3 de la diapositiva pasada como argumento.

Esta propiedad es de sólo lectura.


Function DiapositivaPosicion( oDiapositiva As Object ) As String
'--------------------------------------------------------------------------------------------
   DiapositivaPosicion = oDiapositiva.Number
End Function


Nombre de la diapositiva

Establece o devuelve4 el nombre2 de la diapositiva pasada como argumento.

Si se pasa el argumento cNombre se establece como nombre de la diapositiva.

  • Si no se le pasa ningún valor, actúa como función y devuelve el nombre actual.
Function DiapositivaNombre( oDiapositiva As Object, Optional cNombre As String ) As String
'--------------------------------------------------------------------------------------------
   If Not IsMissing( cNombre ) Then oDiapositiva.Name = cNombre
   DiapositivaNombre = oDiapositiva.Name
End Function


Nombre mostrado en la diapositiva

Devuelve el nombre2 que se muestra de la diapositiva pasada como argumento.

El nombre mostrado se corresponde con la propiedad linkDisplayName, de sólo lectura, que se localiza (se traduce) al idioma del documento, salvo que se haya establecido un nombre personalizado para la diapositiva.

Function DiapositivaNombreMostrado( oDiapositiva As Object ) As String
'--------------------------------------------------------------------------------------------
   DiapositivaNombreMostrado = oDiapositiva.linkDisplayName
End Function


Notas

1 El índice de una diapositiva es su número ordinal en la presentación menos uno. La 1ª diapositiva tiene como índice el número 0. La 4ª diapositiva tiene como índice el número 3. Si se agrega o elimina una diapositiva, todas las diapositivas que la suceden renumeran automáticamente su índice.
2 El nombre de una diapositiva, a menos que se le haya establecido uno personalizado, es la palabra inglesa page seguida del número de orden de la diapositiva en la presentación. El nombre mostrado al situar el ratón sobre la diapositiva es distinto; se corresponde con la propiedad linkDisplayName, que se localiza (se traduce) al idioma del documento; así, la diapositiva 5ª que muestra como nombre Página 5 si el idioma del documento es Español, internamente se denomina page5 independientemente del idioma, y es el nombre que debemos utilizar para referirnos a la misma, salvo que se le haya asignado un nombre personalizado. Si se agrega o elimina una diapositiva, todas las diapositivas que la suceden se renombran automáticamente, salvo que se les haya establecido un nombre personalizado, en cuyo caso lo conservan.
3 La posición de una diapositiva coincide con su propiedad Number, y es un número más que su índice.
4 Función que actúa como Set/Get según se pase o no el argumento opcional; si se pasa el argumento es una función Set que establece el valor; si no se pasa, es una función Get que devuelve el valor actual.


Modificada el 22 jun 2016 14:18.   Visitas: 9619