jueves, 19 de diciembre de 2024

Análisis. Datos.

Tabla de datos basada en LibreOffice

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 (1).

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 (2). 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 (3).

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) 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.
(2) 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.
(3) Aunque el código de esta subrutina es fundamental para este docap, ya ha sido explicado en [esta entrada], en su parte final.

No hay comentarios:

Publicar un comentario

Comenta esta entrada