jueves, 19 de diciembre de 2024

Datos. OOo Basic

Tabla de datos basada en LO-Calc

Tanto por la historia profesional como por el nivel de conocimientos que normalmente se alcanza en programación cuando uno no es un experto en la materia, como, también, por la orientación eminentemente funcionalista y práctica de lo que uno va aprendiendo (sobre recursos informáticos) a lo largo de los años, también en este campo del aprendizaje prima lo directamente experiencial. Y de ello deriva que el primer (cuando no el único) acercamiento que normalmente se hace como SEO al mundo de la tabulación de datos lo sea dentro de la ofimática, y más concretamente sobre una hoja de cálculo (Calc si la suite es LifreOffice)



La utilidad de la tabulación de datos para facilitar la lectura (y el acceso) a los mismos queda de manifiesto cuando en un documento de texto incluimos una tabla de datos como elemento facilitador de dicho documento. Posiblemente este haya sido para muchos el primer acercamiento al uso de las tablas de datos (1), pero ya sabemos que existe todo un mundo de posibilidades de trabajo con tablas (creación, acceso y manejo) si trabajamos con Calc, mundo que ampliamos en gran medida si a este servicio añadimos la creación de script en OOo Basic.

En esta entrada concretaré cómo facilitar la creación de tablas de datos sobre Calc recurriendo a OOo Basic. Para ello me propongo desarrollar en esta entrada un modelo de docap basado en Calc y OOo Basic que facilite la recogida sistemática de aquellos datos que, por el planteamiento del problema, no está contemplada en los modelos de docap anteriores. Remitiéndome a una [entrada previa], estaría hablando aquí de los datos necesarios para el análisis de datos no contemplado como análisis de resultados de un test. Esto equivale a decir, datos para análisis de las actuaciones, del funcionamiento del SEO o del funcionamiento de una prueba no contemplada en el capítulo de evaluación de pruebas.

Este docap tiene como único objetivo facilitar la recogida de datos para construir la tabla que será posteriormente objeto de análisis; no implica nada respecto al análisis propiamente dicho, procedimiento que tiene su propia lógica y sus fases. Como docap es realmente muy simple, ya que resulta de "recortar" el docap previamente definido como docap-modelo de evaluación, que [se expuso aquí].

Consta de dos fases: la creación del formulario (incluyendo la asociación de los controles a celdas) y de la tabla-base, y el desarrollo del código.

Para la creación del formulario deberemos tener en cuenta la diferenciación entre los datos de identificación y los datos de resultados, definiéndose los campos como variables o columnas de la base de datos. Se mantiene aquí la misma diferenciación que vimos en el docap de evaluación, pero no la diferenciación en la asignación de cada categoría a una columna de celdas, ya que en este docap no se plantea realizar ningún procesamiento de los datos, únicamente recogerlos. Esto tiene implicaciones en cuanto a simplificación del código, como veremos posteriormente. También lo tiene en el propio planteamiento del formulario, ya que no es necesario recoger nada que pueda ser calculado a posteriori, correspondiendo estos cálculo al propio proceso de análisis.


La imagen anterior representa lo que podría ser una formulación básica del formulario. En él se representa un sistema simple de recogida de datos de un conjunto de actuaciones identificadas por tipología (que deberá establecerse a priori) por OE (podría plantearse otro docap similar para cada perfil del SEO), centro y mes (2).

En la segunda fase (código) se diferencian dos script principales: Main y BorrarDatos. Este segundo permite reutilizar el docap sin necesidad de borrar manualmente los contenidos previamente introducidos (3). En esta entrada me centraré en explicar Main y su subrutina asociada (PasarDatos()), la cual se ocupa de pasar los datos a la tabla.

Empezaremos por establecer las variables necesarias...

Dim oHoja As Object, oCelda As Object
Dim mDatos() As Variant
Dim i As Integer, ni As Integer

... y por acceder a la hoja que contiene los datos.

oHoja = ThisComponent.getSheets().getByName("Form")

Después, dimensionamos la matriz mDatos() (ReDim mDatos(ni)) atendiendo al número de campos del formulario (ni = 6) que es el mismo que celdas I contienen datos. También definimos los contenidos de la matriz que identifica esas celdas (mCeldasi= Array("I1","I2","I3","I4","I5","I6","I7")).

Una vez establecidos estos valores, mediante un bucle recorremos esas celdas y asignamos su contenido a los elementos de la matriz mDatos(), siguiendo el procedimiento ya conocido.

For i = 0 To UBound(mDatos())
oCelda = oHoja.getCellRangeByName(mCeldasi(i))
mDatos(i) = oCelda.getString()
Next
 
Usamos esa matriz como parámetro que pasamos a la subrutina PasarDatos() para que ésta resuelva el proceso de pasar los datos a la tabla (4).

Sub PasarDatos(Datos() As Variant)

Dim oHojaBD As Object, oCeldaInicio As Object, oCeldaNuevoRegistro As Object, oCeldaId As Object
Dim i As Integer, a As Integer, b As Integer, c As Integer, d As Integer

oHojaBD = ThisComponent.getSheets().getByName("Datos")

c = 1000

For i = 0 To c
oCeldaInicio = oHojaBD.getCellRangeByName("A" & CStr(i+2))
If oCeldaInicio.getValue() = 0 Then
a = i + 2
d = i + 1
Exit For
End If
Next

MsgBox "Id de la nueva entrada: " & d

'Escritura de los datos en el registro vacío

oCeldaId = oHojaBD.getCellRangeByName("A" & CStr(a))
oCeldaId.setValue(d)

For b = 0 To UBound(Datos())
oCeldaNuevoRegistro = oHojaBD.getCellByPosition(b+1,a-1)
oCeldaNuevoRegistro.setString(Datos(b))
Next

End Sub

Documento. Puedes descargar el archivo [desde este enlace]

NOTAS

(1) Si nos atenemos al peso de los documentos Hc en los expedientes SEO, desde luego que ese primer acercamiento no ha podido ser en base a Calc (o Excel); pero esta es otra cuestión, interesante como parte del análisis de la práctica profesional de los SEO, pero otra cuestión que no afecta a lo que aquí estamos tratando... O tal vez sí que afecte...
(2) Se suponen identificados a priori SEO y curso, aunque éste se identifica en el encabezamiento. Y todo ello en un contexto que define el objetivo del análisis al que servirá esta base de datos como de análisis de una tipología dada de actuaciones en un curso. Este planteamiento encaja con el supuesto de análisis de actuaciones del SEO. La base de datos (hoja Datos) contiene como encabezados (campos) los mismos conceptos.
(3) Dada su simplicidad y el carácter complementario que tiene respecto al objetivo del docap, me limito a remitirte al código de este script, que puedes encontrar en su IDE.
(4) Aunque el código de esta subrutina es fundamental para este docap, ya ha sido explicado en [esta entrada], en su parte final.