Trabajar con tablas (1)
Las tablas y las listas son, junto con el texto, los formatos más frecuente en los documentos, pero Mientras que el texto se encarga de dotar de contenido al documento, tablas y listas sirven para facilitar el visionado de determinados datos que, por su especial relevancia, precisan ser expresados de forma diferente al cuerpo de la información. En esta entrada hablaremos de las tablas y en otra posterior de las listas o listados.
Sub MacroCrearTabla
VarSis
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "TableName"
args1(0).Value = ""
args1(1).Name = "Columns"
args1(1).Value = 3
args1(2).Name = "Rows"
args1(2).Value = 2
args1(3).Name = "Flags"
args1(3).Value = 9
dispatcher.executeDispatch(document, ".uno:InsertTable", "", 0, args1())
End Sub
Resumo las instrucciones iniciales de creación de la macro mediante la llamada a VarSis partiendo de que comprendes su significado por haberlo visto con anterioridad. Desde este supuesto paso a analizar las otras dos partes de esta macro.
Nos encontramos en primer lugar con una matriz (args1) compleja, formada por 4 pares Nombre-Valor, entre las que destacan los dos centrales que concretan el número de columnas y filas que tendrá la tabla (2). La importancia de entender esto es que nos permite manipular esos valores, directamente o mediante variables, para crear todas las estructuras de tablas que deseemos. Además también nos facilita convertir la macro en una subrutina estableciendo dos parámetros y llamarla desde un script pasando los valores como argumentos.
Para MacroCrearTabla(iCol As Integer, iFil As Integer), en las que los valores numéricos son sustituidos por el nombre de ambos parámetros nos permite trabajar con un script desde el que llamamos a la subrutina...
Sub Tabla
Dim iTCol As Integer, iTFil As Integer
iTCol = CInt(InputBox ("Número de columnas")
iTFil = CInt(InputBox ("Número de filas")
MacroCrearTabla (iTCol, iTFil)
End Sub
... desde el que el usuario puede definir el número de filas y columnas que tendrá la tabla cuya creación que automatiza este script.
La instrucción dispatcher.executeDispatch(document, ".uno:InsertTable", "", 0, args1()) con la que finaliza la macro MacroCrearTabla contiene la orden de creación (InsertTable)
Como alternativa a la macro, directamente desde OOo Basic también podemos crear una tabla.
Sub InsertarTablaA
Dim oTable As Object
oTable = ThisComponent.createInstance( "com.sun.star.text.TextTable" )
oTable.initialize(2, 3)
ThisComponent.Text.insertTextContent(ThisComponent.Text.getEnd(), oTable, False)
End Sub
En este script se diferencian dos partes: la creación de la tabla y "escritura" (trazado) en el documento. La creación de la tabla es responsabilidad de la función initialize() asociada al objeto que se referencia en la variables oTable mediante la instrucción oTable.initialize(2, 3) (3). La instrucción con la que finaliza el script (ThisComponent.Text.insertTextContent(ThisComponent.Text.getEnd(), oTable, False)) es la responsable de trazar la tabla en el documento, incluyendo su posicionamiento (getEnd()), y es similar a la instrucción de escritura de texto (4)
NOTAS
(1) Actualización de la entrada publicada el 30 de julio de 2023 con el título Writer. Creación de tablas (macro y script)
(2) El primer par permite dar un identificador a la tabla y puede tener interés si vamos a trabajar con varias tablas.
(3) Obsérvese que la función initialize(2, 3) contiene dos parámetros por lo que podremos actuar sobre ellos de igual modo que cuando creamos la tabla mediante macro.
(4) Siguiendo con lo dicho en (3), podemos transformar el script en una subrutina con tres parámetros: los dos primeros tipo integer para dar formato a la tabla y el tercero tipo string para definir la posición de la tabla al inicio o al fin del proceso de escritura del documento: InserTabla (Col As Integer, Fil As Integer, Posic As String)
No hay comentarios:
Publicar un comentario
Comenta esta entrada