Creación de la matriz-base (I)
Automatización de textos con OOo Basic
Procedimiento basado en textos
Esta segunda fase, que es también preparatoria, culmina la que precede y como ella, se resuelve en parte manualmente, en parte de forma automatizada; solo que en este caso se invierte el orden de los procesos.
- Primero divido el texto en segmentos mediante OOo Basic por medio de la función
Split(). - A continuación corresponde identificar la tipología de cada segmento de texto, lo que requiere la intervención directa (y manual) del profesional, que deberá tener presente lo que se indica en esta entrada
Atendiendo a la especificidad de cada una de las parte de esta fase, opto por limitarme en esta entrada a describir la primera (1), dejando la segunda para otra. Así puedo dedicarle tiempo y espacio sin sobrecargar la actual, más simple pero no menos importante; tanto que he considerado conveniente crear un módulo específico CrearMatrizBase para albergar el código que la hace posible MatrizBase, el cual expongo a continuación, aunque sólo parcialmente (2).
Sub MatrizBase
'Acceder a la hoja TextoBase...
Dim oHoja As Object
oHoja = ThisComponent.getCurrentController.getActiveSheet()
'... a la celda A1 que contiene el texto
Dim oTexto As Object
oTexto = oHoja.getCellRangeByName( "A1" )
Dim sTexto As String
sTexto = oTexto.getString()
'Dividimos el texto en segmentos mediante la función Split()
Dim sSepara As String
Dim mSegmentos() As String
Dim i As Integer
sSepara = "#"
mSegmentos = Split ( sTexto(), sSepara)
'Eliminamos espacios mediante la función Trim()
For i = LBound(mSegmentos()) To UBound(mSegmentos())
mSegmentos(i) = Trim(mSegmentos(i))
Next
'Creamos la hoja MatrizBase
Dim oHojas As Object
oHojas = ThisComponent.getSheets()
oHojas.insertNewByName("MatrizBase", 2)
'... nos posicionamos en ella ....
Dim oHojaMatrizBase As Object
oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")
'... y copiamos los segmentos (elementos de la matriz)
For i = LBound(mSegmentos()) To UBound (mSegmentos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "A" & i+1 )
oTextoMatriz.setString(mSegmentos(i))
Next
End Sub
Puedes ver que este script está claramente comentado, de modo que es fácil comprender su estructura y funcionamiento, en el que se aprecian dos partes: la captura del texto y su conversión en matriz de segmentos textuales y la grabación de ésta en una nueva hoja MatrizBase.
Observarás que en el primer subproceso se diferencian a su vez tres partes:
- En la primera accedemos sucesivamente a la hoja
oHoja = ThisComponent.getCurrentController.getActiveSheet(), a la celdaoTexto = oHoja.getCellRangeByName( "A1" )y finalmente a su contenido (texto)sTexto = oTexto.getString()(3) - En la segunda aplicamos la función
Split()para dividir el texto en los segmentosmSegmentos = Split ( sTexto(), sSepara)previamente delimitados mediante #sSepara = "#"(4) - Y en la tercera eliminamos los espacios sobrantes en las subcadenas mediante la función
Trim()mSegmentos(i) = Trim(mSegmentos(i))aplicada por medio de un bucleFor i = LBound(mSegmentos()) To UBound(mSegmentos())
El segundo subproceso implica crear una nueva hoja, para lo que hacemos uso de funciones ya estudiadas, que nos sirven para crear la hoja MatrizBase oHojas.insertNewByName("MatrizBase", 2) y para posicionarnos en ella oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase") como paso previo al traslado del contenido de la matriz-base a la columna A oTextoMatriz.setString(mSegmentos(i)). Para ello usamos un bucle For i = LBound(mSegmentos()) To UBound (mSegmentos()).
En parte nos estamos adelantando ciertos acontecimientos, que en realidad conviene realizar tras la ejecución de lo que se explicará en la entrada que sigue, pero es conveniente mantener esta exposición para que se comprenda mejor el proceso a seguir. Tiempo habrá de aclarar lo que corresponda.
1 Motivo del (I) que acompaña al título de la entrada.
2 Hasta no tener completamente desarrollado el procedimiento no se puede dar por finalizado el script, por lo que no proporcionaré tampoco el soporte documental
3 Todo esto ya ya sido tratado en entrada anteriores, como en esta, en la que se explica cómo acceder a una hoja, que va seguida de la explicación del acceso a la celda y a su contenido.
4 Aunque debería haber sido indicado en esta entrada, debo señalar que también se ha delimitado el fin de párrafo y salto de línea mediante este símbolo, generando una entrada vacía en la matriz-base. Su tratamiento al final del proceso explicará los motivos de este proceder y la forma de alcanzar el objetivo que se pretende con ello. De momento prefiero guardar silencio.
No hay comentarios:
Publicar un comentario
Comenta esta entrada