domingo, 14 de julio de 2024

Procedimientos. datos.

Posicionarse en una hoja mediante OOo Basic

Con OOo Basic podemos trabajar sobre cualquier hoja del libro Calc con independencia de que sea sobre la hoja activa o sobre cualquiera de las demás. Eso supone una importante ventaja a la hora de crear un docap; pero muchas veces necesitamos posicionarnos visualmente sobre una hoja determinada. Mediante macros ya sabemos resolver este problema, pero también es conveniente hacerlo desde un script. En esta entrada vamos a aprender cómo.


Ya hemos visto [cómo trabajar con las hojas] de un libro Calc, pero esta opción no nos facilita visualizar la hoja (convertirla en la hoja activa), salvo que estemos trabajando sobre ésta. Para resolver esta dificultad hemos recurridos hasta ahora a una subrutina basada en macro, pero necesitamos hacerlo directamente desde un script OOo Basic. Veamos cómo esto es posible.

En principio podemos hacerlo identificando la hoja que deseamos visualizar (convertir en hoja activa) bien por su nombre, bien por su índice. El procedimiento es muy similar, en lo fundamental, así que explicaré una de las dos formas (por el nombre) y, sobre ese mismo script, indicaré las modificaciones que hay que realizar para acceder por el índice de la hoja.

Sub Ir_Hoja2Nombre ' Por el nombre

Dim DocCalc As Object
Dim Hoja As Object
DocCalc = ThisComponent
Hoja = DocCalc.getSheets().getByName("Hoja2")
DocCalc.CurrentController().SetActiveSheet(Hoja)
End Sub

Declaramos dos variables (DocCalc y Hoja), ambas de tipo Object, para asignar respectivamente el objeto documento Calc a la primera (DocCalc = ThisComponent) y el objeto Hoja a la segunda (Hoja = DocCalc.getSheets().getByName("Hoja2")); además identificamos es ésta a la hoja por su nombre mediante el método getByName() (.getByName("Hoja2")) (1)

Ya sólo nos falta convertir esa hoja seleccionada del libro en HojaActiva; para ello está la instrucción DocCalc.CurrentController().SetActiveSheet(Hoja). Con ella...
  • mediante el método CurrentController() del objeto DocumentoActual (ThisComponent) que hemos asignado a la variable DocCalc (DocCalc.CurrentController())...
  • implementamos a su vez el método SetActiveSheet(), que permite asignar la condición de HojaActiva al valor del parámetro asignado, que no es otro que el contenido en la variable objeto Hoja (SetActiveSheet(Hoja))
Si queremos realizar esta misma operación a partir del valor índice de la hoja, modificaremos la asignación de objeto a la variables Hoja, sustituyendo el método getByName() por el método .getByIndex() (2)

Documento. En [este libro Calc] encontrarás el código explicado en la entrada. En realidad contiene dos script: uno basado en el nombre de la hoja y otro en su valor índice.

NOTAS

(1) En nuestro caso, la hoja llamada Hoja2. Sin duda te habrás percatado de la posibilidad de convertir este script en una subrutina, transformado el nombre de la hoja en su parámetro. 
(2) Al que pasamos un valor numérico como parámetro, en nuestro caso, por mantener la similitud con el script anterior, ese valor es 1.

No hay comentarios:

Publicar un comentario

Comenta esta entrada