Segunda fase del procedimiento: el DocAp
Hasta este momento he estado trabajando sobre el texto-base, desarrollando los procedimientos que facilitan su estructuración en segmentos, la identificación de las categorías funcionales a las que pertenecen estos segmentos y la construcción de un cuestionario que nos ayude en la entrada de datos. Con todo ello resuelto (1), corresponde ahora formular el script-DocAp, esto es, el que nos permite sacar provecho del trabajo realizado y automatizar la elaboración del documento.
Si el planteamiento del proceso en dos fases es definitorio del modelo de automatización que ensayamos en este ejemplo, el script que voy a presentar en esta entrada es su culminación. Funcionalmente cumple el papel de los script que sirvieron de soporte a un DocAp, de ahí que mantenga para él esa denominación.
Sub NuevoInforme'Acceso a la hoja con los datos (MatrizBase)Dim oHojaDatos As ObjectoHojaDatos = ThisComponent.getSheets().getByName("MatrizBase")'Cargo datos en matrices y variables de trabajoDim mTextos() As String, mCateg() As String, mPreg() As StringDim i As Integer, n As IntegerDim oCelda As ObjectDim Conten As String'Calculo el número de elementos de la matriz-baseFor i = 0 To 100oCelda = oHojaDatos.getCellRangeByName("B" & i+1)Conten = oCelda.getString()If Conten = "" Thenn = i+1Exit ForEnd IfNext'Dimensiono las matricesReDim mTextos(n)ReDim mCateg(n)ReDim mPreg(n)'Capturo el contenido de las columnas de datosFor i = LBound(mTextos()) To UBound (mTextos())oCelda = oHojaDatos.getCellRangeByName( "A" & i+1 )mTextos(i) = oCelda.getString()mTextos(i) = Trim(mTextos(i))NextFor i = LBound(mCateg()) To UBound (mCateg())oCelda = oHojaDatos.getCellRangeByName( "B" & i+1 )mCateg(i) = oCelda.getString()NextFor i = LBound(mPreg()) To UBound (mPreg())oCelda = oHojaDatos.getCellRangeByName( "C" & i+1 )mPreg(i) = oCelda.getString()Next'Modifico el contenido de las vi del texto a generarFor i = LBound(mTextos()) To UBound (mTextos())If mCateg(i) = "vi" ThenmTextos(i) = InputBox (mPreg(i),"Datos actuales",mTextos(i))End IfNext'Capturo la posición de la vi-condición de los datos vgDim post As String, pos As IntegerDim genOr As StringoHojaDatos = ThisComponent.getSheets().getByName("CondicGen")oCelda = oHojaDatos.getCellRangeByName("B1")post = oCelda.getString()pos = CInt(post)'Capturo el género de la vi-condición originaloCelda = oHojaDatos.getCellRangeByName("B2")genOr = oCelda.getString()'Establezco el genero del nuevo alumno en base a la posición en la mTextos() de la viDim AlNuevo As StringAlNuevo = mTextos(pos)'Busco el género del nuevo alumno en la BDNombresDim GenAlNuevo As StringGenAlNuevo = GeneroNombre(AlNuevo)'Comparo el género de ambos nombresDim ComparaGen As BooleanIf genOr = GenAlNuevo ThenComparaGen = TrueElseComparaGen = FalseEnd If'En caso de discrepancia de género modifico los datos de las vgDim NuevoTermino As StringIf ComparaGen = False ThenFor i = LBound(mCateg()) To UBound (mCateg())If mCateg(i) = "vg" ThenNuevoTermino = Genero(mTextos(i))mTextos(i) = NuevoTerminoEnd IfNextEnd If'Recompongo el texto a partir de la matriz mTextos()Dim NuevoTexto As StringFor i = LBound(mTextos()) To UBound (mTextos())If i = 0 ThenNuevoTexto = mTextos(i)ElseIf mCateg(i) = "sl" ThenNuevoTexto = (NuevoTexto & Chr(13) & Chr(13))ElseIf mCateg(i) = "sp" ThenNuevoTexto = (NuevoTexto & mTextos(i))ElseNuevoTexto = (NuevoTexto & " " & mTextos(i))End IfEnd IfNext'Escribo el texto recompuesto en un nuevo documento WriterDim sRuta As StringDim mArg()Dim oDoc As Object, oDocum As ObjectsRuta = "private:factory/swriter"oDoc = StarDesktop.loadComponentFromURL(sRuta, "_default", 0, mArg() )oDocum= oDoc.TextoDocum.insertString(oDocum.getEnd(),NuevoTexto, False)End Sub
Como en otras ocasiones, los comentario del script facilitan su comprensión y ahorran ahora trabajo de explicación. Sólo es necesario insistir en una cuestión: se da por supuesto que el acceso a las bases de datos complementarias quedan bien resueltas mediante el recurso a dos funciones que aquí no se exponen (sí en el documento que se anexa), pero esto sólo es cierto si estas bases de datos son actualizadas "manualmente" por el profesional. No hay nada en el código que garantice que esto es así.
Esta es una de las cuestiones pendientes. No es la única.
Documentos.
Los enlaces que te proporciono a continuación para que los descargues requieren que crees una carpeta en tu Escritorio (Textos) y que modifique la dirección de archivos que se plantean en los script principales por la dirección que se ajuste a tus archivos. Como tienes que realizar estos cambios, puedes aprovechar para crear también tu estructura de directorio, incluyendo la unidad de trabajo o el directorio de la unidad C:
Ya están creadas las hojas auxiliares en el documento Calc, con lo que sólo te resta activar el cmd de la hoja principal para crear un nuevo informe.
Aunque el listado de nombres es amplio, te recomiendo que accedas a la BDNombres y te cerciores de que el que tiene tu alumno (o alumna) ya está registrado (no hace falta hacer lo mismo con la BDGenero). En caso contrario, debes añadirlo a la lista (nombre y género). Si deseas trabajar desde el principio, deberás borrar antes las hojas MatrizBase y CondicGen; pero sólo si deseas trabajar con el script que crea ambas y los procesos que genera. Recuerda que ese script debe ser activado directamente desde el IDE y que está en la biblioteca Standard y en el módulo CrearMatrizBase.
- Documento del texto-base
- Gestor Calc
- BD complementarias: BDNombres y BDGenero
NOTA (1) En realidad he aparcado unas cuantas cuestiones para otro momento; lo haré de nuevo ahora, ya que es necesario para avanzar en el desarrollo de la solución.


No hay comentarios:
Publicar un comentario
Comenta esta entrada