lunes, 20 de mayo de 2024

OOo Basic. Interface.

Formularios (c). Calc

También en LO.Calc podemos utilizar formularios; es más, da la impresión de que los formularios tienen origen en Calc, dada la facilidad con la que se pueden implementar.



Al igual que en LO.Writer, también en Calc deberemos acceder al formulario después de acceder al objeto documento (Hc en este caso) y a la capa de dibujo, sólo que el acceso al documento es algo más complejo, precisamente por tratarse de una hoja de cálculo.
  • Para su funcionamiento se requiere declarar previamente las variables siguientes:
Dim oHojaActiva As Object, oPaginaDibujo As Object
Dim oFormularios As Object, oFormulario As Object

  •  Primero accedemos a la hoja de cálculo en la que se encuentra el formulario

oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()

  • A continuación accedemos a la capa de dibujo o capa gráfica

oPaginaDibujo = oHojaActiva.getDrawPage()

  • Seguidamente accedemos al conjunto de formularios que pude contener la capa de dibujo

oFormularios = oPaginaDibujo.getForms()

  • Y finalmente accedemos a un formulario en concreto, bien por el índice, bien por el nombre

oFormulario = oFormularios.getByIndex()                   -> Acceso por el índice 
oFormulario = oFormularios.getByName(""frmCalcEj")      -> Acceso por el nombre

Esta es la primera forma necesaria para acceder a los controles y a sus contenidos, pero no la única, ya que en Calc es posible acceder a ese contenido accediendo al contenido de las celdas con las que directamente se asocian los controles (algunos de ellos, que no todos), asociación que se realiza en la misma configuración de los controles desde Propiedades del control | Datos | Celda enlazada. En este caso el procedimiento es el mismo que el que desarrollamos para acceder al contenido de una celda.

Dim oHojaActiva As Object, oCelda As Object

Dim sContenido As String

oHojaActiva = ThisComponent.getCurrentController.getActiveShee()

oCelda = oHojaActiva.getCellRangeByName("E3")

sContenido = oCelda.getString()

Pero como esto nos lleva a la segunda parte del proceso, lo iremos viendo en su momento.