domingo, 5 de noviembre de 2023

DATOS. Textos

Docap complejo (III)

DocAp combinado Calc+Calc+Writer

También es posible crear docap complejos empleando dos archivos del mismo servicio: dos hojas de cálculo o dos documentos de texto, pero tampoco tenemos por qué limitarnos a utilizar dos documentos. Eso es precisamente lo que he hecho en esta ocasión: utilizar dos hojas de cálculo Calc como componentes básicos del docap y opcionalmente un documento Writer, este último sólo en caso de cumplirse cierta condición. La imagen que sigue representa la composición de este modelo de docap complejo.

En esta entrada me limito a explicar el funcionamiento de este modelo de DocAp y muestro las instrucciones fundamentales de su código. Empecemos por ver la estructura que presenta, presentando su esquema de componentes.

En el desarrollo de este DocAp se pueden diferenciar tres fases:

  • Primera: Fase input mediante formulario sobre documento Calc Gestor. Como ya sebes de otros docap anteriores, los controles del formulario se asocian celdas directamente desde la configuración de los controles que lo componen.
... y mediante script accedo al contenido de estas celdas para asignarlos a una matriz.


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

For i = 1 To 3
	oCelda = oHojaDatos.getCellRangeByName("B" & i)
	sDatosPer(i-1) = oCelda.getString()
Next


Tomando parte de estos datos creo un listado a modo de base de datos. Esta base de datos es muy simple y se limita a unos pocos campos, pero el procedimiento que implica es de gran importancia, ya que nos puede servir de base para crear docap entrados en los procesos de evaluación grupal. De hecho, sin esta funcionalidad que ahora es complementaria, el docap puede considerarse referente básico para crear soportes para la aplicación de test estandarizados, pero el hecho de crear este listado-BD permite avanzar en la creación de soportes de evaluación que toman como referencia el grupo-clase y permiten crear baremos locales (1).



For i= 1 To 500
	oCeldaInicio = oHojaLista.getCellByPosition(0,i)
	sContenido = oCeldaInicio.getString()

	If sContenido = "" Then
		For a =0 To 4
			oCeldaInicio = oHojaLista.getCellByPosition(a,i)
			oCeldaInicio.setString(mListado(a))
		Next
	Exit For
	End If
Next


El paso siguiente, con el que finaliza esta primera fase, consiste en acceder al documento Calc Ficha como plantilla activando el uso de macros.



mOpciones(0).Name="AsTemplate"
mOpciones(0).Value=True
mOpciones(0).Name="MacroExecutionMode"

mOpciones(0).Value=4
sRuta = ConvertToUrl("D:\ModeloExpediente.ods")
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones())


Segunda: La plantilla Ficha genera automáticamente el documento que concreta la ficha del alumno y que se archiva dentro de la carpeta Expedientes. Dentro de este archivo se concreta el doble proceso de traslado de datos al listado de campos y su asociación a un conjunto de celdas que muestras dichos datos en formato ficha (de ahí el nombre del documento).

Posteriormente se accede al contenidos de determinados campos...



For i=0 To 10
	oCelda(i) = oHojaDatos.getCellRangeByName( "A" & i+1 )
	sDatos(i) = oCelda(i).getString
Next


... para posteriormente analizar los datos que contienen y que se consideran relevantes (2).


 
If iTotalDif = 0 Then
	sValorDif = " no existe diferencia en cuanto al númer de documentos, lo que indica que el expediente se ha mantenido actualizado hasta el momento."

ElseIf iTotalDif > 0 Then
	sValorDif = "una reducción del número de archivos (" & ABS(iTotalDif) & " documentos)"

ElseIf iTotalDif < 0 Then
	sValorDif = "un incremento del número de archivos (" & ABS(iTotalDif) & " documentos)"

End If


En función de este análisis se plantean diferentes opciones de documentación, incluyendo la creación de un tercer soporte (Writer) que denomino Informe



If dPorcentajeDif > 25 Then
	CrearInfo (sIdentificador,sNumDoc,sAnalisisTotal,sValoraPorcentaje)
Else
	sAnalisisTotal & " " & sValoraPorcentaje)
End If


Tercera: Esta fase se desarrolla bien dentro de Ficha, cuando no se considera necesario crear un informe (3) o, y de forma más específica y compleja, a partir del propio documento Writer Informe. En este caso se puede (también es opcional) aplicar una macro de formato. Esta macro es universal, pero podría estar específicamente creada para formatear dicho documento, aunque necesariamente deberá ser ubicada en Mis macros (4)



dim args4(4) as new com.sun.star.beans.PropertyValue

	args4(0).Name = "CharFontName.StyleName"
	args4(0).Value = ""

	args4(1).Name = "CharFontName.Pitch"
	args4(1).Value = 2
	
    args4(2).Name = "CharFontName.CharSet"
	args4(2).Value = -1

	args4(3).Name = "CharFontName.Family"
	args4(3).Value = 5

	args4(4).Name = "CharFontName.FamilyName"
	args4(4).Value = "Verdana"
  
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args4())


Notas:
1La relevancia de esta cuestión sobrepasa el objetico de esta entrada, por lo que ahora no seguiré tratando este tema, pero sí quiero señalar su gran importancia para la definición de un modelo de intervención de los SEO, diferenciado del modelo clínico aun predominante en la práctica profesional real.
2El análisis que se realizar en este docap en concreto está limitado conscientemente por la función que se pretende que cumpla, evitando entrar en procesos de mayor complejidad. En caso de ser empleado para desarrollar el uso de en test en concreto, sería necesario profundizar en el modelo de análisis.
3En este caso (cuando se incumple el criterio de una diferencia superior al 25%) se emite un breve informe soportado en MsgBox desde la propia ficha.
4Esto está relacionado obviamente por ser un documento creado desde el propio código del documento Ficha

No hay comentarios:

Publicar un comentario

Comenta esta entrada