lunes, 21 de agosto de 2023

Procedimientos. Datos.

Calc. Copiar una hoja

De las diferentes acciones que podemos automatizar en Calc mediante OOo Basic, la creación de hojas basadas en un modelo previamente creado es una opción interesante para generalizar un modelo de tratamiento de datos, algo parecido a la creación de fichas de expediente, por ejemplo.


Crear un modelo de presentación y recogida de datos y utilizarlo de forma "masiva" como recurso de gestión de la información suele ser un procedimiento común de trabajo, más frecuente en soporte textual (un formulario), pero posible también sobre una hoja de cálculo, lo que permite, además, utilizar las funciones disponibles en Calc.

De hecho, que esta opción no sea un procedimiento que los SEO utilicemos con más frecuencia se debe al escaso conocimiento que tenemos de las posibilidades que ofrece Calc para el trabajo con datos. Calc, Excel, Base, Access..., pero este es un tema que daría para mucho, así que mejor volvamos a lo que nos importa ahora.

La forma de acceder a una hoja (hoja-modelo, para que tenga más sentido, pero eso ahora es secundario), copiarla y posicionarla al final del libro Calc se resuelve, por ejemplo, mediante el siguiente script:

Sub CopiarModelo

Dim oHojas As Object
Dim sHModelo as string, sHNueva as String

oHojas = ThisComponent.getSheets() 
sHModelo = "Modelo"
sHNueva = Trim(InputBox("Nombre del alumno"))

If oHojas.hasByName(sHModelo) And (Not oHojas.hasByName(sHNueva)) Then
oHojas.copyByName( sHModelo, sHNueva, oHojas.getCount() )
Else
MsgBox "No se copio la hoja." & Chr(13) &_
  "Posiblemente esto se deba a que ya existe" & Chr(13) &_
  "el expediente " & sNombreNuevo  & "." & Chr(13) &_
  "Compruébelo, por favor."
End If

End Sub

  • Primero accedemos mediante variable al archivo Calc activo, asignando este objeto a una variable:
Dim oHojas As Object
oHojas = ThisComponent.getSheets()  

  • En segundo lugar, identificamos la hoja a copiar y el nombre que daremos a la hoja copiada, empleando para ello dos variables de tipo texto: 

Dim sHModelo as string, sHNueva as String
sHModelo = "Modelo"
sHNueva = Trim(InputBox("Nombre del alumno")) (este valor puede ser establecido por el usuario)

  • Y finalmente copiamos la hoja (identificada por su nombre mediante la función copyByName()): 
oHojas.copyByName( sHModelo, sHNueva, oHojas.getCount())

Esta función cuenta con tres parámetros:
    • el nombre de la hoja a copiar (sHModelo)
    • el nombre de la nueva hoja (sHNueva
    • y la posición en la que ubicar esa nueva hoja (oHoja.getCount()). (1)(2)

Un uso más eficiente de este script pasaría por convertirlo en subrutina, pero tal y como está definido ahora es suficiente para alcanzar el objetivo planteado en esta entrada, así que de momento es suficiente.

NOTAS

(1)De este tercer parámetro, esto es, de la función getCount()ya hablamos en otra entrada.
(2) En realidad este tercer paso lo hacemos de forma condicional para evitar errores (control de errores) empleando una estructura condicional (if... else...end if), pero realmente esto ahora es secundario en cuanto a cumplir el objetivo que perseguimos con este script.

No hay comentarios:

Publicar un comentario

Comenta esta entrada