Professional Documents
Culture Documents
Guia Del Programador BASIC PDF
Guia Del Programador BASIC PDF
org
Guía básica del programador
Traducción Arturo Garro. Realizado especialmente para la comunidad en español de OpenOffce.org. e-mail: arturog@costarricense.cr
Dedico esta traducción a mi esposa y mis hijos. Porque me comprendieron y me dieron el tiempo necesario para poder terminarla.
Gracias Rebeca por llevarme comida mientras trabajaba en esto. A Jose Ricardo y Ariana, por dejar de jugar en la computadora y
cedermela para poder trabajar. Y sobre todo por el tiempo que no les dediqué por este proyecto.
i
Acerca de OpenOffice.org Basic 1
Posibles usos de OpenOffice.org Basic 2
Uso de OpenOffice.org Basic 2
Estructura de esta guía 2
Más información 3
Un vistazo de la programación en OpenOffice.org Basic. 5
Líneas de programación 5
Comentarios 6
Marcadores 6
Trabajado con variables 7
Declaración implicita de variables 7
Declaración explícita de variables 7
Cadenas (string) 8
De un conjunto de caracteres ASCII a Unicode 9
Variables de cadenas 9
Especificación de cadenas específica. 10
Números 10
Variables de enteros 10
Variables de entero largo 11
Variables sencillas 11
Variables dobles 11
Variables de moneda 11
Especificación explícita de números 12
Falso y verdadero 13
Variables boleanas 13
Detalles sobre la hora y la fecha 14
Variables de fecha 14
Campos de datos 14
Matrices simples 14
Especificando un valor para el índice inicial 15
Campos de datos multi-dimensionales 15
Cambios dinámicos en las dimensiones de los campos de datos 16
Alcance y tiempo de vida de las variables 17
Variables locales 17
Variables públicas 17
Variables globales 18
Variables privadas 18
Constantes 19
Operadores 19
Operadores matemáticas 19
Operadores lógicos 20
ii
Operadores de comparación 20
Control de flujo 20
If ... Then ... Else 20
Select ... Case 21
Ciclos 22
For ... Next 22
Do ... Loop 23
Ejemplo de programación: Ordenando con ciclos anidados. 24
Procedimientos y funciones 25
Procedimientos 25
Funciones 25
Terminando procedimientos y funciones prematuramente 26
Pasando parámetros 26
Parámetros opcionales 27
Manejo de errores 28
La Instrucción On Error 28
El comando Resume 28
Consultas referentes a la información de errores 29
Consejos para el manejo de errores estructurado 29
Funciones de conversión 31
Conversiones de tipo implícito y explícito 31
Verificando el contenido de las variables 33
Cadenas 34
Trabajando con conjuntos de caracteres 34
Accesando partes de una cadena 35
Búsqueda y reemplazo 35
Formateando cadenas 36
Fecha y hora 37
Especicación de los detalles de fecha y hora dentro del código del programa 37
Extrayéndo detalles de fecha y hora. 38
Accesando la fecha y la hora del sistema 39
Archivos y directorios 40
Administrando archivos 40
Escribiendo y leyéndo archivos de texto 43
Otras funciones 47
Beep 47
Shell 47
Wait 47
Environ 48
Red de Objetos Universal (UNO) 49
Propiedades y métodos 50
Propiedades 50
Métodos 50
iii
Módulos, servicios e interfaces 51
Herramientas para el trabajo con UNO 51
El método supportsService 52
Propiedades de depuración 52
Referencia API 52
Un vistazo de algunas interfaces centrales. 52
Creando objetos dependientes del contexto 53
Acceso por nombre a objetos subordinados 53
Acceso basado en índices a objetos subordinados 55
Acceso iteractivo a objetos subordinados 55
El StarDesktop 57
Información básica acerca de los documentos en OpenOffice.org 58
Crear, abrir e importar documentos 59
Objetos de documentos 61
Pantillas 65
Detalles sobre varias opciones de formato 66
La estructura de los documentos de texto 67
Párrafos y porciones de párrafos 68
Editando documentos de texto 74
El TextCursor 75
Búscando porciones de texto 79
Reemplazando porciones de texto 81
Documentos de texto: más que sólo texto 82
Tablas 83
Marcos de texto 87
Campos de texto 89
Marcadores 92
La estructura de documentos basados en tablas (Hojas de cálculo) 95
Hojas de cálculo 95
Filas y columnas 96
Celdas 98
Formateado 103
Editando las hojas de cálculo de manera eficiente 113
Rangos de celdas 113
Buscando y reemplazando contenidos de las celdas 115
La estructura de los dibujos 116
Páginas 116
Propiedades elementales de los objetos de dibujo 118
Un vistazo a varios objetos de dibujo 126
Agrupando objetos 132
iv
Rotando y recorte de objetos de dibujo 133
Búsqueda y reemplazo 133
Presentaciones 134
Trabajando con presentaciones 134
Usando diagramas en hojas de cálculo. 137
La estructura de los diagramas 138
Los elementos individuales de un diagrama 138
Ejemplo 144
Tipos de diagramas 145
Diagramas de líneas 145
Diagramas de área 145
Diagramas de barras 145
Diagramas de pastel 146
SQL: un lenguaje de consultas 147
Tipos de acceso a bases de datos 148
Fuentes de datos 148
Consultas 150
Vínculos y formularios de bases de datos 151
Acceso a bases de datos 151
Interacción de las tablas 152
Métodos específicos-al-tipo para obtener datos 153
Las variantes a ResultSet 154
Métodos de navegación en ResultSets 155
Modificando registro de datos 155
Tabajando con diálogos 157
Creando diálogos 157
Cerrando diálogos 157
Accesando elementos de control individuales 158
Trabajando con el modelo de diálgos y los controles de elementos 158
Propiedades 159
Nombre y título 159
Posición y tamaño 159
Foco y secuencia del tabulador 160
Diálogos de multi-página 160
Eventos 163
Parámetros 165
Eventos del Mouse 166
Eventos del teclado 167
Eventos de foco 168
Eventos específicos de los elementos de control 168
v
Elementos de control de los diálogos en detalle 169
Botones (buttom) 170
Botones de opciones (Option button) 170
Cajas de verficación (Checkboxes) 171
Campos de texto (text fields) 172
Cajas de listas (List Boxes) 173
Trabajar con formularios 175
Determinando los objetos de formularios 175
Tres aspectos de los elementos de control de un formulario 176
Accesando el Modelo de los elementos de contro de los formularios 176
Accesando la vista de los elementos de control de los formularios 177
Accesando el objeto formas de los formularios de elementos de control 178
Elementos de control de formularios en detalle 179
Botones 179
Botones de opción 180
Cajas de chequeo (Checkboxes) 181
Campos de texto 182
Cajas de listas 183
Formularios de bases de datos 184
Tablas 185
vi
OpenOffice.org Guía del programador BASIC
Esta guía provee una introducción a la programación con OpenOffice.org Basic e indica las
posibles aplicaciones provistas al usar OpenOffice.org Basic en OpenOffice.org. Para obtener
lo mejor de este libro, debería estar familiarizado con otros lenguajes de programación.
Varios ejemplos son provistos para ayudarle a desarrollar sus propios programas en
StarBasic.
Un número de consejos de migración para los programadores de Microsoft Visual Basic o para aquellos
que han trabajado con versiones menores de StarOffice, son provistos atraves de esta guía. Están
indicados por un pequeño símbolo en el borde de la página. El apéndice de esta guía contiene un índice de
consejos de migración de manera que pueda navegar fácilmente al consejo que desea leer.
Capítulo 1 Introducción
Capítulo 1 Introducción
La compatibilidad entre OpenOffice.org Basic y VBA está relacionada con el lenguaje del OpenOffice.org
Basic y con las librerías en tiempo de ejecución. La API de OpenOffice.org y el editor de diálogos no son
compatibles con VBA (estandarizar estas interfaces haría que muchos de los conceptos provistos por
OpenOffice.org sean imposibles)
Más información
Los componentes de OpenOffice.org API que están discutidos en esta guía fueron
seleccionados basados en el beneficio práctico para el programador de OpenOffice.org Basic.
En general, sólo las partes referentes a las interfaces son discutidas. Para más detalle, vea la
referencia a las API que está disponible en Internet en:
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html
La Guía del Desarrollador describe las API de OpenOffice.org con más detalle que esta guía,
pero está principalmente orientada a los programadores de Java o C++. Cualquiera que esté
realmente familiarizado con la programación en OpenOffice.org Basic puede encontrar
información adicional en la Guía del Desarrollador en OpenOffice.org Basic y programación
de OpenOffice.org. Puede descargar la Guía del Desarrollador desde Internet desde:
http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html
Capítulo 1 Introducción
OpenOffice.org Guía del programador BASIC
El OpenOffice.org Basic pertenece a la familia de lenguajes de Basic. Muchas partes son
idénticas a Microsoft Visual Basic para Aplicaciones y a Microsoft Visual Basic. Cualquiera
que haya trabajado con estos lenguajes puede rápidamente acostumbrarse a OpenOffice.org
Basic.
Programadores de otros lenguajes – como Java, C++, o Delphi – pueden encontrar fácil
familiarizarse por sí mismos con OpenOffice.org Basic. OpenOffice.org Basic es un lenguaje
de programación totalmente desarrollado a procedimientos y no usa estructuras de control
rudimentarias como GoTo y GoSub.
También puede beneficiarse de las ventajas de un lenguaje orientado a objetos desde que la
interface en OpenOffice.org Basic permite el uso de librerias de objetos externos. La API de
OpenOffice.org Basic está enteramente basada en estas interfaces, que están descritas con
más detalle en los siguientes capítulos de este documento.
Este capítulo provee un vistazo en los elementos primarios y constructores del lenguaje
OpenOffice.org Basic, también el ambiente en el que estas aplicaciones y librerías están
orientadas al OpenOffice.org Basic.
Un vistazo de la programación en
OpenOffice.org Basic.
OpenOffice.org Basic es un lenguaje interpretado. A diferencia de C++ o TurboPascal, el
compilador de OpenOffice.org Basic no crea un ejecutable o archivos autoextraibles capaces
de ejecutarse automáticamente. En cambio, puede ejecutar un programa en OpenOffice.org
Basic al presional un botón. El código es primero verificado de errores obvios y ejecutado
línea por línea.
Líneas de programación
El Interprete de Basic está orientado a la ejecución de líneas y esto es una diferencia primaria
entre Basic y otros lenguajes de programación. Mientras la posición de puntos de
interrupción en el código fuente de Java, C++ o Delphi es irrelevante, cada línea de código en
un programa Basic es una unidad auto-contenida. Las llamadas a funciones, expresiones
matemáticas, u otros elementos lingüisticos, como las funciones y encabezados de ciclos,
pueden ser completados en la misma línea en la que empezaron.
Si no hay suficiente espacio, o resulta en líneas muy largas, entonces varias líneas pueden ser
unidas al agregar rayabajos _ (underscore). El siguiente ejemplo muestra cómo cuatro líneas
de una expresión matemática pueden ser unidas:
La rayabajo debe ser siempre el último carácter de la línea unida y no debe ir seguida de un
espacio o tabulación, de lo contrario el código generará un error.
Adicionalmente a unir líneas individuales, OpenOffice.org Basic, puede usar dos puntos (:)
para dividir una línea en cada sección si hay espacio suficiente para cada expresión. Las
asignaciones:
a = 1
a = a + 1
a = a + 1
Comentarios
Adicionalmente al código del programa que puede ser ejecutado, la programación en
OpenOffice.org Basic puede contener comentarios que expliquen partes individuales del
programa y proveer más información que puede ser de ayuda para puntos posteriores.
OpenOffice.org Basic provee dos métodos para insertar comentarios en el código del
programa:
• Todas las letras que sigan a un apóstrofe (') son tratadas como comentarios:
Dim A 'Este es un comentarios para la variable A
Un comentario usualmente incluye todos los caracteres desde el inicio hasta el final de la
línea. OpenOffice.org Basic interpreta la siguiente línea como una instrucción normal de
nuevo. Si un comentario cubre varias líneas, cada línea debe ser identificada como un
comentario:
Dim B ' Este comentario para la variable B es algo
' largo y comprende varias líneas. El
' carácter de comentario deberá ser repetido
' en cada línea.
Marcadores
Un programa de OpenOffice.org Basic puede contener, docenas, cientos y hasta algunos
miles de marcadores, los cuales son nombres de variables, constantes, funciones y demás.
Cuando seleccione un nombre para un marcador, se aplicarán las siguientes reglas:
• Los marcadores sólo pueden contener letras latinas, números y rayabajo (_).
• La primera letra del marcador puede ser una letra latina o una rayabajo.
Las reglas de marcadores son diferentes para OpenOffice.org Basic y VBA. Por ejemplo, OpenOffice.org
Basic no permiten caracteres especiales en los marcadores, porque pueden presentar problemas en
proyectos internaciones.
Esto debe ser la primera línea de programa de cada módulo y asegura que un mensaje de
error será desplegado si una de las variables usadas no está declarada. La instrucción
Option Explicit debe ser incluida en todos los módulos de Basic.
En su forma más simple, el comando para una declaración explícita de una variable es:
Dim MiVariable
Este ejemplo declara una variable con el nombre de MiVariable y del tipo Variant. Un
tipo Variant en una variable universal que puede grabar todos los valores posibles,
incluyéndo cadenas (string), números, figuras de punto flotante, y valores boleanos
(boolean). Aquí hay algunos ejemplos de variables Variant:
MiVar = "Hola Mundo!" ' Asigna una cadena.
MiVar = 1 ' Asigna un número.
MiVar = 1.0 ' Asigna un número de punto flotante.
MiVar = True ' Asigna un valor boleano.
Las variables declaradas en el ejemplo anterior pueden ser usadas para diferentes tipos de
variables en el mismo programa. Aunque esto provee una flexibilidad considerable, es mejor
restringir una variable a un solo tipo de variable. Cuando OpenOffice.org Basic encuentra
una variable de un tipo incorrectamente definido en un contexto particular, un mensaje de
error es generado.
Use el siguiente estilo cuando desee hacer una declaración de una variable de un tipo
específico:
Dim MiVar As Integer ' Declara una variable del tipo entero.
Si desea asignar a las variables un tipo permanente, debe separar las definiciones para cada
variable:
Dim MiVar1 As Integer, MiVar2 As Integer
Si no desea declarar el tipo para cada variable, OpenOffice.org Basic asigna el tipo
Variant a cada variable. Por ejemplo, en la siguiente declaración de de variables, MiVar1
llegará a ser Variant y MiVar2 llegará a ser Integer (Entero).
Dim MiVar1, MiVar2 As Integer
Las siguientes secciones listan los tipos de variables que están disponibles en OpenOffice.org
Basic y describe como pueden ser usadas y declaradas.
Cadenas (string)
Cadenas, junto con los números, forma uno de los tipos más importantes y básicos de
OpenOffice.org Basic. Una cadena consiste en una secuencia consecutiva de caracteres
individuales. La computadora salva internamente como una secuencia de números donde
cada número representa un carácter especifico.
Variables de cadenas
OpenOffice.org Basic salva las cadenas como cadenas de variables en Unicode. Una variable
de cadena puede guardar más de 65535 caracteres. Internamente, OpenOffice.org Basic salva
el valor Unicode asociado a cada carácter. La memoria de trabajo necesaria para cada
variable de cadena depende del tamaño de la cadena.
Ejemplo de una declaración de variable de cadena:
Dim Variable As String
Dim Variable$
Cuando porte aplicaciones VBA, asegurese que el máximo permitido en OpenOffice.org Basic sea
observado (65535 caracteres).
Para dividir una cadena en dos líneas, agregue un signo de más al final de la primera línea:
Dim MiCadena As String
MiCadena = "Esta cadena es tan larga que " + _
"que se dividió en dos líneas."
Para incluir una comilla doble (“) dentro de una cadena, ingresela doble en el punto en que
desea que aparezca:
Dim MiCadena As String
MiCadena = "una ""- comilla doble" ' produce una "- comilla doble
Números
OpenOffice.org Basic soporta cinco tipos básicos para procesar números.
• Enteros (Integer)
• Entero Largo (Long Integer)
• Flotante (Float)
• Doble (Double)
• Moneda (Currency)
Variables de enteros
Las variables de enteros pueden guardar cualquier número entre -32768 y 32768. Una
variable de entero puede tomar dos bytes de memoria. El símbolo de tipo de declaración es
%. Los cálculos para usar las variables de enteros son muy rápidas y son particularmente
útiles para contadores de ciclos. Si asigna un número de punto flotante a una variable de
entero, el número será redondeado hacia arriba o hacia abajo al entero más cercano.
Ejemplo de declaración para variables de enteros:
Variables sencillas
Las variables sencillas pueden guardar cualquier número de punto flotante positivo o
negativo entre 3.402823 x 1038 y 1.401298 x 10-45. Una variable sencilla puede tener cuatro
bytes de memoria. El símbolo del tipo de declaración es !.
Originalmente, las variables sencillas fueron usadas para reducir el tiempo para calcular
números más precisos de las variables dobles. Sin embargo, las consideraciones de velocidad
ya no se aplican, reduciendo la necesidad de las variables sencillas.
Ejemplos de declaraciones de variables sencillas.
Dim Variable As Single
Dim Variable!
Variables dobles
Las variables dobles pueden guardar cualquier número positivo o negativo de punto flotante
entre 1.79769313486232 x 10308 y 4.94065645841247 x 10-324. Una variable doble puede tener
ocho bytes de memoria. Las variables dobles son usadas para cálculos más precisos. El
símbolo para el tipo de declaración es #.
Ejemplos de declaraciones de variables dobles:
Dim Variable As Double
Dim Variable#
Variables de moneda
Las variables de moneda difieren de las demás por la forma en que maneja los valores. El
punto decimal es fijo y está limitado a cuatro posiciones decimales. La variable puede
contener más de 15 números después del punto decimal. Puede guardar cualquier valor entre
–922337203685477.5808 y +922337203685477.5807 tomando ocho bytes de memoria. El
símbolo para el tipo de declaración es @.
Las variables de moneda son más usadas para cálculos de negocios que evitan redondeos no
Los números pueden estar precedidos por el signo positivo (+) y/o negativo (-) (con o sin
espacios en medio):
Dim A As Integer
Dim B As Float
A = + 121
B = - 243
Números decimales
Cuando use un número decimal, use el punto (.) como separador de punto decimal. Esta regla
asegura que los textos fuentes pueden ser transferidos de un país a otro sin necesidad de
conversión.
Dim A As Integer
Dim B As Integer
Dim C As Float
A = 1223.53 ' Es redondeado
B = - 23446.46 ' Es redondeado
C = + 3532.76323
También puede usar los signos positivos (+) o negativo (-) antes de los números decimales.
(de nuevo, con o sin espacios).
Si un número decimal es asignado a una variable entera, OpenOffice.org Basic redondea el
número hacia arriba o hacia abajo.
Estilo de escritura exponencial
OpenOffice.org Basic permite que los números sean escritos en el estilo de escritura
exponencial, por ejemplo, puede escribir 1.5e-10 para el número 1.5 × 10-10 (0.00000000015).
La letra “e” puede ser en mayúsculas o en minúsculas con o sin el signo positivo (+) como
prefijo.
Aquí hay unos cuantos ejemplos correctos o incorrectos del formato exponencial:
Dim A As Double
A = 1.43E2' Correcto
A = + 1.43E2 ' Correcto (espacio entre el positivo y el número)
A = - 1.43E2 ' Correcto (especio entre el negativo y el número)
A = 1.43E-2 ' Correcto (exponente negativo)
A = 1.43E -2 'Incorrecto (No se permiten espacios en el número)
A = 1,43E-2 'Incorrecto (La coma no es separador decimal)
A = 1.43E2.2 'Incorrecto (Exponente debe ser un número simple)
Nótese que los ejemplos incorrectos primero y tercero no generarán mensaje de error, sino
que las variables tendrán valores incorrectos. La expresión
A = 1.43E -2
es interpretada como 1.43 menos 2, que corresponde al valor -0.57. Sin embargo, el valor
1.43 * 102 (correspondiente a 0.0143) fue el valor que se buscaba. Con el valor:
A = 1.43E2.2
Valores hexadecimales
En el sistema hexadecimal (sistema base 16), un número de dos dígitos corresponde
precisamente a un byte. Esto permite que los números sean manejados de una manera que
refleja de una forma más cercana la arquitectura de la computadora. En el sistema
hexadecimal, los números del 0 al 9 y las letras de la A a la F son usadas como números. Una
A es el standard para el número decimal 10, mientras la F representa el número decimal 15.
OpenOffice.org Basic le permite usar los valores hexadecimales, si están precedidos por &H.
Dim A As Long
A = $HFF ' Valor hexadecimal para el número decimal 255
A = $H10 ' Valor hexadecimal para el número decimal 16
Valores octales
OpenOffice.orgOpenOffice.org Basic también entiende el sistema octal (sistema base 8), el
cual usa los números del 0 al 7. Puede representar estos números son el prefijo &O.
Dim A As Long
A = &O77 ' Valor octal para el número decimal 63
A = &O10 ' valor octal para el número decimal 8
Falso y verdadero
Variables boleanas
Las variables boleanas sólo pueden contener dos valores: Verdadero o Falso. Son útiles
para especificaciones binarias que solamente pueden adoptar dos estados. Un valor boleano
Campos de datos
Adicionalmente a las variables simples (scalars), OpenOffice.org Basic soporta también
campos de datos (arrays2). Un campo de datos contiene varias variables, las cuales pueden
ser direccionadas atraves de un índice.
Matrices simples
La declaración de una matriz es similar a la declaración de una variable simple. Sin embargo,
a diferencia de la declaración de la variable, el nombre de la matriz está seguido de paréntesis
que contiene la especificación del número de elementos. La expresión:
Dim MiMatriz(3)
declara una matriz con cuatro variables del tipo Variant, llamadas MiMatriz(0),
MiMatriz(1), MiMatriz(2), MiMatriz(3).
También se pueden declarar variables de un tipo específico para una matriz. Por ejemplo, la
siguiente línea declara una matriz con cuatro elementos enteros:
Dim MiMatriz(3) As Integer
En los ejemplos previos, el índice para la matriz siempre inicia con el valor standar de cero.
Como una alternativa, un rango de validación con valores de inicio y final pueden ser
especificados en la declaración deñ campo de datos. El siguiente ejemplo declara un campo
de datos con seis valores enteros que pueden ser direccionados usando los índices del 5 al 10:
2 N.T. El término en español es arreglos o matrices. Arreglos es una traducción más literal y matrices es una
traducción que corresponde más al concepto matemático. Usaremos matrices de ahora en adelante.
Los índices no necesitan ser valores positivos. El siguiente ejemplo también muestra una
forma correcta de declaración, pero con límites del campo de datos negativos:
Dim MiMatriz(-10 to -5)
Declara un campo de datos del tipo entero con seis valores que pueden ser direccionados
usando los índices -10 al -5.
Hay tres límites que debe observar cuando defina los índices de los campos de datos:
• El índice más pequeño posible es -32768.
• El índice más grande posible es 32767.
• El número máximo de elementos (dentro de una dimensión de campo de datos) es 16368.
Otros valores de limites aplican para los índices de datos en VBA. Lo mismo aplica al máximo número de
elementos posibles por dimensión. Los valores válidos pueden ser encontrados en la documentación
relevante a VBA.
declara 4 variables del tipo entero que pueden ser llamadas con las siguientes direcciones:
MiMatriz(1), MiMatriz(2), MiMatriz(3) y MiMatriz(4).
Dim MiMatrizInt(5, 5)
define una matriz del tipo entero con dos dimensiones, cada una con 6 índices (que pueden
ser direccionados del 0 al 5). La matriz completa puede grabar un total de 6 x 6 = 36 valores
enteros.
Aunque puede definir cientos de dimensiones de matrices en OpenOffice.org Basic; sin
embargo, la cantidad disponible de memoria limita el número de dimensiones que puede
tener.
A diferencia de VBA, donde puede solo dimensionar matrices dinámicas por el uso de Dim MiMatriz(),
OpenOffice.org Basic le permite cambiar matrices dinámicas y estáticas con el uso de ReDim.
El siguiente ejemplo cambia las dimensiones de la matriz inicial de manera que pueda
guardar 11 o 21 valores:
Dim MiMatriz(4) As Integer 'Declaración con cinco valores
'...
Redim MiMatriz(10) As Integer 'Incrementa a 11 elementos
'...
Redim MiMatriz(20) As Integer 'Incrementa a 21 elementos
Cuando restaura las dimensiones de una matriz, puede usar cualquiera de las opciones
presentadas en las secciones previas. Esto incluye campos de datos multi-dimensionales y
especificar los valores de inicio y final. Cuando las dimensiones de un campo de datos son
cambiados, todo su contenido se pierde. Si desea mantener los valores originales, use el
comando Preserve:
Dim MiMatriz(10) As Integer 'Define la dimensión inicial
' ...
ReDim Preserve MiMatriz(20) As Integer ' Incrementa el campo
' de datos reteniendo
' los valores iniciales
A diferencia de VBA, donde solamente el límite superior de la última dimensión puede ser cambiado por
medio de Preserve, OpenOffice.org Basic le permite cambiar las otras dimensiones también.
Si usa Redim con Preserve, debe usar el mismo tipo de datos que el especificado en la declaración original
del campo de datos.
Variables locales
Las variables que son declaradas en una función o procedimiento son llamadas variables
locales.
Sub Prueba
Dim MiVar As Integer
' ...
End Sub
A diferencia de VBA, OpenOffice.org Basic se asegura que el nombre de una variable local no es usada
simultáneamente como global y privada en el encabezado del módulo. Cuando porte aplicaciones VBA a
OpenOffice.org Basic, debe cambiar los nombres de variables duplicados.
Variables públicas
Las variables públicas son definidas en la sección del encabezado de un módulo con la
palabra clave Dim. Estas variables están disponibles para todos los módulos de su librería.
Módulo A
Dim A As Integer
Sub Prueba
Flip
Flop
En Sub
Sub Flip
A = A + 1
En Sub
Módulo B
Sub Flop
A = A – 1
End Sub
Las variables públicas solamente están disponibles a la macro que están asociadas durante su
ejecución y luego la variable es restaurada.
Variables globales
En cuanto a su función, las variables globales son similares a las variables públicas, excepto
que sus valores son retenidos aún después de que la macro ha sido ejecutada. Las variables
globales son definidas en el encabezado del módulo usando la palabra clave Global:
Global A As Integer
Variables privadas
Las variables privadas están solo disponibles en el módulo en el cual está definida. Use la
palabra clave Private para definir la variable:
Private MiEntero As Integer
Si varios módulos contienen variables privadas con el mismo nombre, OpenOffice.org Basic
crea una variable diferente para cada ocurrencia del nombre. En el siguiente ejemplo, ambos
módulos A y B tienen una variable privada llamada C. La función Prueba define una
variable privada en el módulo A y una privada en el módulo B.
Módulo A:
Private C As Integer
Sub Prueba
AsigModuloA ' Asigna la variable C del módulo A
AsigModuloB ' Asigna la variable C del módulo B
MuestraVarA ' Muestra la variable C del módulo A
MuestraVarB ' Muestra la variable C del módulo B
End Sub
Sub AsigModuloA
C = 10
End Sub
Sub MuestraVarA
Msgbox C
End Sub
Módulo B:
Private C As Integer
Sub AsigModuloB
C = 10
End Sub
Sub MuestraVarB
Msgbox C
End Sub
Constantes
En OpenOffice.org Basic, use la palabra clave Const para declarar una constante:
Const A = 10
Operadores
OpenOffice.org Basic comprende los operadores matemáticos, lógicos, y de comparación.
Operadores matemáticas
Los operadoras matemáticos pueden ser aplicados a todos los tipos numéricos, sin embargo,
el operador + puede ser también usado para concatenar cadenas.
+ Suma de números y valores de fecha, concatenar cadenas.
- Resta de números y valores de fecha.
* Multiplicación de números.
/ División de números.
\ División de números con números enteros (redondeo)
^ Elevación a exponente.
Operadores lógicos
Los operadores lógicos permiten concatenar elementos de acuerdo al álbegra boleana. Si los
operadores son aplicados sobre valores boleanos, el vínculo provee el resultado ruquerido
directamente. Si lo usa en conjunto con valores enteros y entero largo, el vínculo será hecho a
nivel de bits.
AND vínculo AND
OR vínculo OR
XOR Vínculo OR exclusivo.
NOT Negación
EQV prueba equivalente (ambas partes Verdadero o Falso)
IMP Implicación (Si la primera parte es verdadera, entonces la segunda parte también debe
ser verdadera)
Operadores de comparación
Los operadores de comparación pueden ser aplicados a todos los tipos de variables
elementales (números, fecha, cadenas, y valores boleanos)
= Igualdad entre fechas, números y cadenas.
<> Diferencia entre fechas, números y cadenas.
> Mayor que para números, fechas y cadenas.
>= Mayor que o igual para números, fechas y cadenas.
< Menor que para números, fechas y cadenas.
<= Menor que o igual para números, fechas y cadenas.
Control de flujo
Las instrucciones de control de flujo restringen la ejecución de bloques de código mientras
una condición particular sea satisfecha.
If A > 3 Then
B = 2
End If
En este ejemplo, la variable B es asignada al valor 2 cuando A es mayor que 3, de otra forma
a B le es asignado el valor 0.
Para instrucciones más complejas, puede hacer cascadas de la instrucción If, por ejemplo:
If A = 0 Then
B = 0
ElseIf A < 3 Then
B = 1
Else
B = 2
End If
En este ejemplo, el nombre del día de la semana corresponde a un número, de manera que la
variable Nombre se le asigna el valor de “domingo” para el valor de 1, “Lunes” para el valor
de 2, y así consecutivamente.
El comando Select no está restringido a asignaciones simples de 1:1 – También puede
especificar operadores de comparación o listas de expresiones en el control de flujo Case. El
siguiente ejemplo muestra las variaciones de sintaxis más importantes.
Ciclos
Un ciclo ejecuta un bloque de código el número de pasos que sea especificado. También
pueden definirse ciclos con un número indeterminado de pasos.
Dim I
For I = 10 to 1 Step -1
' ... Parte central del ciclo.
Next I
En este ejemplo, el contador inicia con 10 y el valor es reducido en uno en cada paso, hasta
que el contador es 1.
La instrucción Exit For le permite salir de un ciclo For prematuramente. En el siguiente
ejemplo, el ciclo es terminado en el quinto paso:
Dim I
For I = 1 To 10
If I = 5 Then
Exit For
End If
' ... parte central del ciclo
Next I
La variante de ciclo For Each ... Next de VBA no está soportada en OpenOffice.org Basic.
Do ... Loop
El Do ... Loop no está vinculado a un número determinado de pasos. En cambio, el
Do ... Loop es ejecutado hasta que cierta condición sea cumplida. Hay cuatro variantes
del Do ... Loop (en el siguiente ejemplo, A > 10 representa cualquier condición):
1. Variante Do ... Loop
Do While A > 10
' Cuerpo del ciclo
Loop
verifica que la condición sea satisfecha antes de cada paso y sólo después se ejecuta el
ciclo.
2. Variante Do Until ... Loop
Do Until A > 10
'Cuerpo del ciclo
Loop
También verifica su condición despues del primer paso, pero trabaja el ciclo hasta que la
condición no sea satisfecha.
Como en los ciclo For ... Next, el Do ... Loop también está provisto de una
instrucción de terminación.El comando Exit Do puede hacer salir del ciclo en cualquier
punto dentro del ciclo.
Do
If A = 4 Then
Exit Do
End If
' Cuerpo del ciclo
While A > 10
Los valores son intercambiados en pares tantas veces mientras sean ordenados en orden
ascendente. Como las burbujas, los valores gradualmente van emigrando a la posición
Procedimientos y funciones
Los procedimientos y funciones son puntos fundamentales de la estructura de un programa.
Proveen la estructura para dividir problemas complejos en varias sub-tareas.
Procedimientos
Un procedimiento ejecuta una acción práctica sin proveer un valor explícito. Su sintaxis es:
Sub Prueba
' aquí coloca el código del procedimiento
End Sub
El ejemplo define un procedimiento llamado Prueba y contiene el código que puede ser
accesado desde cualquier punto del programa. La llamada es hecha al ingresar el nombre del
procedimiento en cierto punto del programa:
' ... código del programa
Prueba
' ... código del programa
Funciones
Una función, como un procedimiento, combina un bloque de programas para que sean
ejecutados como una unidad lógica. Sin embargo, a diferencia del procedimiento, una
función retorna un valor.
Function Prueba
' ... aquí va el código de esta función
Prueba = 123
End Function
3 N.T. Deje la expresión en inglés, porque muchos libros de informática conocen este algoritmo con este nombre,
aun las traducciones al español. La traducción sería ordenamiento de burbuja.
Function Prueba
Prueba = 12
'...
Prueba = 123
End Function
Pasando parámetros
Las funciones y procedimientos pueden recibir uno o más parámetros. Los parámetros deben
ser encerrados entre paréntesis después del nombre de la función o procedimiento. El
ejemplo:
Sub Prueba (A As Integer, B As String)
End Sub
define un procedimiento que espera un entero para A y una cadena para B como parámetros.
Normalmente los parámetros en OpenOffice.org Basic son pasados por . Los
cambios hechos a las variables son retenidos cuando la función o el procedimiento ha
terminado.
Sub Prueba
Dim A As Integer
A = 10
CambiaValor(A)
' El parámetro A ahora tiene el valor de 20
End Sub
Sub CambiaValor(ElValor As Integer)
ElValor=20
End Sub
En este ejemplo, el valor A que está definido en la función Prueba, es pasado como un
parámetro en la función CambiaValor. El valor en cambiado a 20 y pasado a ElValor, el
cual es retenido cuando se sale de la función.
También se puede pasar un parámetro como un si no desea los cambios subsecuentes
que afectan al valor originalmente pasado del parámetro. Para especificar que un parámetro
es pasado como valor, asegurese que la palabra clave ByVal precede la declaración de la
variable en el encabezado de la función.
En el ejemplo anterior, si reemplazamos la función CambiaValor con:
Sub CambiaValor(ByVal ElValor As Integer)
ElValor=20
End Sub
la variable A permanece sin afectarse por este cambio. Después de llamar a la función
CambiaValor, la variable A mantiene el valor de 10.
El método de pasar parámetros a los procedimientos y funciones es virtualmente identico a VBA. Por
defecto, los parámetros son pasados por referencia. Para pasar los parámetros como valores, use la
palabra clave ByVal. En VBA, deberá también usar la palabra clave ByRef para forzar que un parámetro
sea pasado por referencia. OpenOffice.org Basic no soporta esta palabra clave porque ya es un
procedimiento por defecto en OpenOffice.org Basic.
Como una regla, funciones y procedimientos en OpenOffice.org Basic son públicos. Las palabras claves
Public y Private usadas en VBA no son soportadas en OpenOffice.org Basic.
Parámetros opcionales
Las funciones y procedimientos solamente pueden ser llamados cuando todos los parámetros
necesarios son pasados durante la llamada.
OpenOffice.org Basic le permite definir parámetros como , esto es, si el parámetro
correspondiente no está incluido dentro de la llamada, OpenOffice.org Basic lo pasa como un
parámetro vacío. En el ejemplo:
Sub Prueba(A As Integer, Optional B As Integer)
End Sub
La función IsMissing verifica cuando un parámetro ha sido pasado y cuando está ausente.
Sub Prueba(A As Integer, Optional B As Integer)
Dim B_Local As Integer
' Verifica si el parámetro B está presente.
If Not IsMissing (B) Then
B_Local = B ' Parámetro B está presente.
Else
B_Local = 0 ' Parámetro B no está. 0 es el valor por defecto
End If
' código de la función
End Sub
La opción provista en VBA para definir valores por defecto para los parámetros por defecto no está
soportada en OpenOffice.org Basic.
Manejo de errores
El correcto manejo de las situaciones de errores es una de las tareas que más tiempo de
programación consumen. OpenOffice.org Basic provee un rango de tareas para simplificar el
manejo de errores.
La Instrucción On Error
La instrucción On Error es la llave para cualquier manejo de errores:
Sub Prueba
On Error Goto ManejoError
' Tareas en las que puede ocurrir un error.
Exit Sub
ManejoError:
'Código individualizado para el manejo del error.
End Sub
El comando Resume
El comando Resume Next continúa el programa en el línea siguiente a la que ocurrió el
error en el programa después del código en el manejador de errores ha sido ejecutado:
ManejoError:
' ... código para el manejo del error.
Resume Next
Use el comando Resume Proceed para especificar un punto de salto para continuar el
programa después del manejo de errores:
ManejoError:
' ... código para el manejo del error.
Resume Proceed
Proceed:
' El programa continúa aquí después del error.
Para continuar el programa sin ningún mensaje cuando ocurre un error, use el siguiente
formato:
Sub Prueba
On Error Resume Next
' Tareas en las que puede ocurrir un error.
End Sub
use el comando On Error Resume Next con cuidado porque sus efectos son globales.
Para más información, vea
muestra cómo la información de error puede ser desplegada en una ventana de mensajes.
Mientras VBA sumariza los mensajes de error es un objeto estatistico llamado Err, OpenOffice.org Basic
provee las variables Err, Error$, y Erl.
En VBA, el método Err.clear o el objeto Err reinicia los estados del error después de que ocurre un
error. En OpenOffice.org Basic, esto se cumple con los comandos On Error o Resume.
construcción Goto.
Si desea estructurar su código limpiamente para prevenir la generación de errores cuando usa
estas construcciones, no use comandos de salto sin monitorizarlos.
Tanga cuidado cuando use el comando On Error Resume Next porque omite todos los
mensajes de error emitidos.
La mejor solución es el uso de un único acceso para el manejo de errores dentro del programa
– mantiene manejo de errores separado del código del programa actual y no salta de nuevo al
código original después de que el error ocurre.
El siguiente es un ejemplo de un procedimiento de manejo de errores:
Sub Ejemplo
' Define el manejador de errores al inicio de la función
On Error Goto ErrorHandler
' Desactiva el manejo de errores
On Error Goto 0
' Final de la implementación regular del programa.
Exit Sub
' Inicio del manejador de errores
ErrorHandler:
' Chequea cual error se esperaba
If Err = NumeroError Then
' ... Proceso de manejo del error
Else
' ... Advertencia para error inesperado
End If
On Error Goto 0 ' Desactiva el manejador de errores
End Sub
Este procedimiento inicia con la definición del manejador de errores, seguido del código del
programa actual. Al final del código del programa el manejador de errores es desactivado
mediante la llamada a On Error Goto 0 y la implementación del procedimiento
termina con el comando Exit Sub (no se confunda con End Sub)
El ejemplo primero verifica que el número de error corresponda a un número esperado (como
el guardado en la constante imaginaria NumeroError) y que maneja el error de manera
adecuada. Si otro error ocurre, el sistema genera una advertencia. Es importante verificar el
número de error para que puedan ser detectados errores no anticipados.
La llamada a On Error Goto 0 al final del código restaura el estado de la información del
error (el código de error en las variables de sistema Err) de esta manera un error que ocurra
después puede ser claramente reconocido.
La siguiente sección presenta las funciones centrales de la librería de tiempo de ejecución.
Funciones de conversión
En muchas situaciones, las circunstancias hacen que una variable de un tipo tenga que ser
cambiado a una variable de otro tipo.
que a primera vista parece correcto, finalmente prueba que es una trampa. El intérprete de
Basic primero calcula el resultado del proceso de la suma y luego la convierte en cadena, lo
cual, como su resultado, produce la cadena "2".
Si, de otra forma, el intérprete de Basic primero convierte los valores iniciales B y C en una
cadena y aplica el operador de suma para el resultado, esto produce la cadena "11".
Lo mismo aplica cuando se usan variables del tipo Variant:
Dim A
Dim B
Dim C
B = 1
C = "1"
A = B + C
Desde que las variables pueden contener números y letras, no es claro que será asigando a la
variable A si el número 2 o la cadena "11".
El error de las fuentes notados por las conversiones implícitas solamente pueden ser evitadas
por la programación cuidadosa. Por ejemplo, evitando el uso del tipo de datos variant.
Para evitar otros errores resultantes de la conversión implicita de valores, OpenOffice.org
Basic ofrece un rango de de funciones de conversión, las cuales puede usar para definir el
tipo de datos a que debe convertir en una operación:
• CStr(Var) – convierte cualquier tipo de datos en una cadena.
• CInt(Var) – convierte cualquier tipo de datos en un valor entero.
• CLng(Var) – convierte cualquier tipo de datos en un valor entero largo.
• CSng(Var) – convierte cualquier tipo de datos en un valor sencillo.
• CDbl(Var) – convierte cualquier tipo de datos en un valor doble.
• CBool(Var) – convierte cualquier tipo de datos en un valor booleano.
• CDate(Var) – convierte cualquier tipo de datos en un valor de fecha.
Puede usar estas funciones de conversión para definir como OpenOffice.org Basic debe
realizar las operaciones de conversión:
Dim A As String
Dim B As Integer
Dim C As Integer
B = 1
C = 1
A = CStr(B + C) ' B y C primero son sumandos, luego convertidos
' (produce el número 2)
A = Cstr(B) + Cstr(C) ' B y C son convertidos en cadena, y luego
' combinados (produce la cadena "11"
Durante la primera suma en el ejemplo, OpenOffice.org Basic primero suma los valores
enteros y luego convierte el resultado en una cadena de caracteres. Se le asigna a A la cadena
2. En segunda instancia, las variables enteras son primero convertidas en dos cadenas y luego
vinculadas una con otra con el resultado de la asignación. Entonces a A le es asiganda la
cadena "11".
Las funciones de conversión numéricas CSng y CDbl también aceptan números decimales.
El símbolo del punto decimal a usar es el correspondiente a la definición del país específico.
Para conversión, el método CStr usa las especificación seleccionada del país específico
cuando formatea números, fechas y detalles de hora.
La función Val es diferente de los métodos Csng, Cdbl, y Cstr. El convierte una cadena
en un número; sin embargo siempre espera un punto para ser usado como seperados decimal.
Dim A As String
Dim B As Double
A = "2.22"
V = Val(A)'Convierte el número sin importar la configuración local.
Temporal = Valor
IsBoolean = True
On Error Goto 0
Exit Sub
ErrorBoleano:
IsBoolean = False
On Error Goto 0
End Function
La función IsBoolean define una variable interna del tipo boleano para ayudarse, y trata
de asignarle el valor del parámetro. Si la asignación es satisfactoria, la función retorna
Verdadero. Si esta falla, se produce un error en tiempo de ejecución, el cual es interceptado
por la función de error de la función.
Si una cadena en OpenOffice.org Basic contiene un valor no-numérico y esto es asignado a un número,
OpenOffice.org Basic no produce un mensaje de error, pero transfiere el valor 0 a la variable. Este
procedimiento difiere de VBA. Ahi, un error es disparado la implementación del programa terminada si una
asignación correspondiente es ejecutada.
Cadenas
Trabajando con conjuntos de caracteres
Cuando administre cadenas, OpenOffice.org Basic usa el conjunto de caracteres Unicode.
Las funciones Asc y Chr permite el valor Unicode perteneciente al carácter establecido y/o
el correpondiente carácter encontrado para el valor Unicode. Las siguientes expresiones
asignan varios valores Unicode a la variable Codigo:
Codigo = Asc("A") 'Letra latina A. (Valor Unicode 65)
Codigo = Asc("€") 'Caracter Euro. (Valor Unicode 8364)
Codigo = Asc("Æ") 'Letra cirilica A. (Valor Unicode 1083)
asegura que "MiCadena" es inicializada con el valor del número 13, el cual es el standar del
salto de línea.
El comando Chr es a menudo usado en lenguajes Basic para insertar caracteres de control
dentro de las cadenas.
La asignación
MiCadena = Chr(9) + "Esto es una prueba" + Chr(13)
se asegura que que el texto sea precedido por una tabulación (Unicode valor 9) y un salto de
línea (Unicode valor 13) sea agregado al final.
Búsqueda y reemplazo
OpenOffice.org Basic provee la función InStr para buscar cadenas parciales dentro de otra
cadena:
CadenaResultado = InStr (CadenaBuscar, MiCadena)
En los ejemplos previo, InStr omite los caracteres en mayúscula o minúscula. Para cambiar
las búsquedas de manera que InStr sea sentitivo a mayúsculas/minúsculas, agrege el
parámetro 0, como se muestra en el siguiente ejemplo:
CadenaResultado = InStr (CadenaBuscar, MiCadena, 0)
Usando las funciones anteriores para editar cadenas, los programadores pueden buscar y
reemplazar una cadena por otra:
reemplaza tres caracteres con la cadena "es" desde la sexta posición de la cadena
MiCadena.
Formateando cadenas
La función Format formatea los números como una cadena. Para hacer esto, la función
Format espera una expresión para ser especificada, la cual es usada como plantilla para
formatear los números. Cada posicionador dentro de la planilla asegura que este sea
formateado de acuerdo al valor de salida. Los posicionadores más importantes dentro de una
planilla son el cero (0), numeral (#), punto (.), coma (,), y el signo de dólar ($).
El carácter cero dentro de la plantilla, asegura que ese número siempre sea puesto en la
posición correspondente. Si no es provisto un número, 0 es desplegado en su lugar.
Un punto se coloca para el símbolo de punto decimal definido en las especificaciones del país
en el sistema operativo.
El ejemplo de abajo muestra cómo los caracteres cero y punto pueden definir los dígitos
después del punto decimal en una expresión:
MiFormato = "0.00"
MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1579,80"
MiCadena = Format(1579.8, MiFormato) ' Guarda "1579,80"
MiCadena = Format(0.4, MiFormato) ' Guarda "0,40"
MiCadena = Format(0.434, MiFormato) ' Guarda "0,43"
De la misma manera, pueden agregarse ceros al frente de un número para archivar con el
formato deseado:
MiFormato = "0000.00"
MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1579,80"
MiCadena = Format(1579.8, MiFormato) ' Guarda "1579,80"
MiCadena = Format(0.4, MiFormato) ' Guarda "0000,40"
MiCadena = Format(0.434, MiFormato) ' Guarda "0000,43"
Una coma representa, el carácter que el sistema operativo usa como el separador de miles, y
el signo numeral mantiene un dígito o lugar que solamente es desplegado cuando se requiere
en la cadena de salida:
MiFormato = "#,##0.00"
MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1.579,80"
MiCadena = Format(1579.8, MiFormato) ' Guarda "1.579,80"
MiCadena = Format(0.4, MiFormato) ' Guarda "0,40"
MiCadena = Format(0.434, MiFormato) ' Guarda "0,43"
En el lugar del signo de dólar, la función Format desplegará el símbolo de moneda definido
en el sistema.
MiFormato = "#,##0.00 $"
MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1.579,80 €"
MiCadena = Format(1579.8, MiFormato) ' Guarda "1.579,80 €"
MiCadena = Format(0.4, MiFormato) ' Guarda "0,40 €"
MiCadena = Format(0.434, MiFormato) ' Guarda "0,43 €"
Las instrucciones de formateo usadas en VBA para formatear fechas y horas no están soportadas en VBA.
Fecha y hora
OpenOffice.org Basic provee el tipo de datos Date, el cual salva la fecha y la hora en
formato binario.
Esta asignación puede funcionar apropiadamente porque OpenOffice.org Basic convierte los
valores definidos de fecha como una cadena dentro de la variable de fecha. Este tipo de
asignación, sin embargo, puede causar errores, porque los valores de fecha y hora son
definidos y desplegados de diferentes formas en los diferentes países.
Desde que OpenOffice.org usa la configuración especifica del país del sistema operativo
cuando convierte una cadena en un valor de fecha, la expresión mostrada anteriormente
solamente funciona con las configuraciones especificas que concuerden con la expresión de
cadena.
Para evitar este problema, la función DateSerial debe ser usada para asignar un valor fijo
a una variable de fecha:
Dim MiFecha As Date
MiFecha = DateSerial(2001, 1, 1)
Los parámetros de la función debe estar en esta secuencia: año, mes, día. La función se
asegura que la variable sea asignada correctamente con el valor correcto obviando las
especificaciones específicas de un país.
La función TimeSerial formatea los detalles de la hora, de la misma manera que la
función DateSerial formatea fechas:
Dim MiFecha As Date
MiFecha = TimeSerial(11, 23, 45)
Sus parámetros deben ser especificados en esta secuencia: horas, minutos y segundos.
verifica que la fecha guardada en MiFecha este en el año 2004. De la misma manera, el
ejemplo:
Dim MiHora As Date
' ... Inicializacion de MiHora
If Hour(MiHora) >= 12 And Hour(MiFecha) < 14 Then
' ... La hora especificada esta entre las 12 y las 14 horas
End If
Archivos y directorios
Trabajar con archivos es una de las principales básicas de una aplicación. El API de
OpenOffice.org Basic le provee un amplio rango de objetos por las cuales puede crear, abrir
y modificar documentos. Estos están presentados con detalle en el capítulo 4. Apesar de esto,
en algunos casos deberá accesar directamente el sistema de archivos, buscar por los
directorios o editar archivos de texto. La librería de tiempo de ejecución de OpenOffice.org
Basic provee algunas funciones básicas para realizar estas tareas.
Algunas funciones especificas de archivos y directorios del DOS no están provistas en OpenOffice.org, o su
función es limitada. Por ejemplo, el soporte para las funciones ChDir, ChDrive y CurDir no está
soportada. Algunas propiedades especificas del DOS no están usadas en las funciones que esperan los
archivos como parámetros (por ejemplo, para diferenciar entre archivos ocultos y sistemas de archivos).
Estos cambios son necesarios para asegurar un mayor nivel de independencia de la plataforma en
OpenOffice.org.
Administrando archivos
Buscando por los directorios
La función Dir en OpenOffice.org Basic es la responsable de buscar por los directorios a los
archivos y sub-directorios. Cuando se solicita por primera vez, una cadena conteniendo la
ruta de los directorios debe ser asignado a Dir como el primer parámetro. El segundo
parámetro de Dir especifica el archivo o directorio que se debe buscar. OpenOffice.org
Basic retorna el nombre de la primera entrada de directorio encontrada. Para recuperar la
siguiente entrada, la función Dir debe ser llamada sin parámetros. Si la función Dir no
encontra más entradas, retorna una cadena vacía.
El siguiente ejemplo muestra como la función Dir puede ser usada para recuperar todos los
archivos localizados en un directorio. El procedimiento guarda los nombres individuales en la
variable Archivos y luego despliega un cuadro de mensaje.
Sub VerArchivos
Dim Siguiente As String
Dim Archivos As String
Archivos = ""
Siguiente = Dir("C:\",0)
While Siguiente <> ""
Archivos = Archivos & Chr(13) & Siguiente
Siguiente = Dir
Wend
Msgbox Archivos
End Sub
El 0 es usado como segundo parámetro en la función Dir para asegurarse que la función
solamente retorne nombres de archivos y los directorios son ignorados. Los siguientes
parámetros pueden ser especificados:
• 0 : retorna archivos normales
• 16 : sub-directorios.
El siguiente ejemplo es virtualmente el mismo que el ejemplo anterior, pero la función Dir,
pero se le dio un 16 como parámetro, el cual retornará los sub-directorios de a carpeta en
lugar de los nombres.
Sub VerArchivos
Dim Siguiente As String
Dim Archivos As String
Archivos = ""
Siguiente = Dir("C:\",0)
Las opciones provistas por VBA para buscar por los directorios por archivos específicos con las
propiedades oculto, archivo de sistema, archivado, y nombre de volumen no existen en OpenOffice.org
Basic porque corresponden a funciones del sistema de archivos que no están disponibles en todos los
sistemas operactivos.
Las especificaciones de la ruta listada en Dir puede usar los comodines "*" y "?" tanto en VBA como en
OpenOffice.org Basic. El OpenOffice.org Basic sin embargo el comodín "*" puede ser el último carácter de
un nombre de archivo o de una extensión, lo cual no es válido en VBA.
Esta función crea directorios y subdirectorios. Todos los directorios que se necesitan dentro
de una jerarquía también son creados, si se requiere. Por ejemplo, Si sólo existe
C:\SubDir1, entonces puede llamar:
MkDir ("C:\SubDir1\SubDir2\SubDir3")
si el directorio contiene sub-directorios o archivos, estos también serán borrados, por eso
tenga cuidado con la función RmDir.
En VBA, las funciones MkDir y RmDir actuan solamente con el directorio actual. En OpenOffice.org Basic
por el contrario, MkDir y RmDir pueden ser usados para crear o borrar niveles de directorios.
En VBA, RmDir produce un error si un directorio contiene archivos. En OpenOffice.org Basic, el directorio y
sus archivos son borrados
retorna algunas propiedades del archivo. El valor de retorno es provisto como una máscara de
bits, en la cual son posibles los siguientes valores:
• 1 : archivo de sólo-lectura.
• 16 : nombre de un directorio.
El ejemplo
Las banderas de VBA para obtener las propiedades de oculto, archivo de sistema, archivado y nombre de
volumen no están soportadas por OpenOffice.org Basic porque son específicas de Windows y no están
disponibles en otros sistemas operativos o sólo parcialmente.
puede ser usada para asignarle el status de sólo lectura a un archivo. Si ya hay un status de
sólo lectura puede ser borrado con la siguiente llamada
SetAttr("prueba.txt",0)
la función FileLen determina el tamaño del archivo en bytes (como un entero largo)
FileLen("prueba.txt") ' provee el tamaño del archivo en bytes.
Para abrir un archivo este puede ser especificado como un archivo de texto, la llamada Open
es:
Open NombreArchivo For OutPut As #NumArchivo
Para poner un botón por defecto, agregue uno de los siguientes valores al valor del parámetro
de la lista de botones. Por ejemplo, para crear los botones de Si, No y Cancelar (valor 3) y
que Cancelar sea el botón por defecto (valor 512), el valor del parámetro es 3 + 512 = 515.
• 0 – primer botón por defecto.
• 256 – segundo botón por defecto.
• 512 – tercer botón por defecto.
Finalmente, los siguientes símbolos de información están disponibles y también pueden ser
desplegados agregando el valor relevante al parámetro:
• 16 – signo de detenerse.
• 32 – signo de pregunta.
• 48 – signo de exclamación.
• 64 – signo de Tip.
La llamada
Msgbox "¿Desea continuar?", 292
Otras funciones
Beep
La función Beep causa que el sistema haga un sonido que puede ser usada para advertir al
usuario de una acción incorrecta. Beep no tiene parámetros.
Beep ' genera un sonido informativo.
Shell
Programas externo pueden ser iniciados usando la función Shell.
Shell (Ruta, EstiloVentana, Parametro)
Wait
La función Wait termina la ejecución del programa por un tiempo especifico. El periodo de
espera está especificado en milisegundos. El comando
Wait 2000
Environ
La función Environ retorna las variables de ambiente del sistema operativo. Dependiendo del
sistema operativo y su configuración, diferentes tipos de datos son guardados aquí. La
llamada
Dim DirTemporal
DirTemporal = Environ("TEMP")
La API de OpenOffice.org es una interface universal de programación para accesar el
OpenOffice.org. Puede usar la API de OpenOffice.org para crear, abrir, modificar e imprimir
documentos de OpenOffice.org. Esto provee la opción de extender el rango personal de
OpenOffice.org a través de macros personales y escribir diálogos personalizados.
La API de OpenOffice.org no solamente puede ser usada en OpenOffice.org Basic, sino
también en otros lenguajes de programación como Java o C++. Una técnica llamada Red de
Objetos Universal (UNO4) la cual provee ua interface que hace posible una interface con
varios lenguajes de programación.
Este capítulo se centra en cómo OpenOffice.org puede ser usado en OpenOffice.org Basic
con la ayuda de UNO. Describe los conceptos principales de UNO desde el punto de vista de
un programador de OpenOffice.org Basic. Detalles sobre cómo trabajar con varias partes de
la API OpenOffice.org se pueden encontrar en los capítulos siguientes.
Esta llamada asigna la variable Obj una referencia al objeto creado recientemente.
com.sun.star.frame.Desktop se asemeja a un objeto; sin embargo en la terminología de UNO
es llamado un "servicio" en lugar de un tipo. De acuerdo a la filosofía de UNO, Obj es
descrito como una referencia a un objeto que soporta el servicio
com.sun.star.frame.Desktop. El término "servicio" es usado en OpenOffice.org
Basic y corresponde a los términos tipo y clase en otros lenguajes de programación.
Sin embargo, hay una diferencia importante: la Red de Objetos Universal puede soportar
varios servicios al mismo tiempo. Algunos servicios UNO en turno soportan otros servicios
en si mismos, por medio de un objeto, está provisto con un amplio rango de servicios. Por
ejemplo, en el objeto mencionado, el cual esta basado en el servicio
com.sun.star.frame.Desktop, también puede incluir otros servicios para guardar documentos
y terminar el programa.
Mientras la estructura de un objeto en VBA está definido por la clase a la cual pertenece, en
OpenOffice.org Basic la estructura esta definida por medio de los servicios a la cual pertenece. Un objeto
VBA está siempre asignada precisamente a una clase individual. Un objeto OpenOffice.org Basic, sin
embargo, soporta varios servicios.
Propiedades y métodos
Un objeto OpenOffice.org Basic provee un rango de propiedades y métodos los cuales
pueden ser llamados por los significados de el objeto.
Propiedades
Las propiedades son como las propiedades de un objeto; por ejemplo, Filename y title
para un objeto documento.
Las propiedades son puestas por simple asignación:
Documento.title = "Guia del programador de OpenOffice.org Basic"
Documento.Filename = "Progman.sxv"
Una propiedad, como una variable normal, tiene un tipo que define cuales valores son los que
puede guardar.
Las propiedades anteriores Filename y title son del tipo cadena.
Propiedades reales y propiedades imitadas
Muchas de las propiedades de un objeto en OpenOffice.org Basic están definidas en la
descripción del servicio UNO. Adicionalmente a estas propiedades "reales", también hay
propiedades las cuales consisten en dos métodos al nivel de UNO. Uno de estos es usado para
preguntar el valor de una propiedad y el otro es dada para asignarla (métodos get y set ).
La propiedad ha sido virtualmente imitada por estos dos métodos. Los objetos carácter por
ejemplo, proveen los métodos getPosition y setPosition por medio de los cuales el
punto de llave asociado puede ser llamado y cambiado. El programador OpenOffice.org
Basic puede accesar los valores por medio de la propiedad position. A pesar de esto, los
método originales también están disponibles (en nuestro ejemplo, getPosition y
setPosition).
Métodos
Los métodos son entendidos como funciones relacionadas directamente con un objeto a
través de los cuales este objeto es llamado. El objeto anterior Documento, por ejemplo,
provee el método Save, el cual puede ser llamado de esta manera:
Documento.Save()
los métodos, como las funciones, pueden contener parámetros y retornar valores. La sintaxis
de la llamada a este método está orientada a las funciones clásicas. La llamada:
Ok = Documento.Save(True)
también especifica un parámetro True para el objeto documento cuando llama al método
Save. Una vez que el método ha sido completado, Save retorna un valor en la variable Ok.
El método supportsService
Un número de objetos UNO soportan el método supportsService, el cual puede
establecer cuando un objeto soporta un servicio particular. La llamada:
Ok = TextElement.supportsService("com.sun.star.text.Paragraph")
Propiedades de depuración
Cada objeto UNO en OpenOffice.org Basic conoce que propiedades, métodos e interfaces
contiene. Esto provee propiedades que los retornan en forma de lista. Las propiedades
correspondientes son:
DBG_properties – retorna una cadena conteniendo todas las propiedades de un objeto.
DBG_methods – retorna una cadena conteniendo todos los métodos de un objeto.
DBG_supportedInterfaces – retorna una cadena conteniendo todas las interfaces que
soporta un objeto.
El siguiente código muestra cómo pueden ser usados DBG_properties y DBG_methods
en aplicaciones reales. Primer se crea el servicio com.sun.star.frame.Desktop y
luego despliega las propiedades y métodos soportados en cuadros de mensages.
Dim Obj as Object
Obj = createUnoService("com.sun.star.frame.Desktop")
Msgbox Obj.DBG_Properties
Msgbox Obj.DBG_Methods
Cuando se usa DBG_properties, hay que notar que la función retorna todas las propiedades
de un servicio particular que puede soportar teóricamente. Sin embargo, no hay completa
seguridad ya que estos pueden ser usados en el objeto en cuestión. Después de llamar las
propiedades, deberá usar la función IsEmpty para verificar si está realmente disponible.
Referencia API
Se puede encontrar más información sobre los servicios disponibles, y sus interfaces,
métodos, y propiedades en la referencia API para la API de OpenOffice.org. Esto puede ser
encontrado en www.openoffice.org:
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html
El origen de losobjetos está explicado más adelante en esta guía. En este punto, solamente
son discutidos algunos aspectos abstractos de los objetos, por medio de los cuales la API de
OpenOffice.org provee algunas de las interfaces centrales.
La interface com.sun.star.lang.XMultiServiceFactory
Los objetos dependientes del contexto generalmente son creados por significados de un
método de un objeto, del cual el objeto depende. El método createInstance, el cual está
definido en la interface XmultiServiceFactory, es usado en particular en estos objetos
de documentos.
El objeto de dibujo antes mencionado puede ser creado, por ejemplo, de la siguiente manera,
usado un objeto de hoja de cálculo:
Dim Rectangulo As Object
Rectangulo = _
SpreadSheet.createInstance("com.sun.star.drawing.RectangleShape")
Una plantilla de párrafo en un documento de texto puede ser creada dela misma manera:
Dim Estilo As Object
Estilo = _
TextDocument.createInstance("com.sun.star.style.ParagraphStyle")
La interface com.sun.star.container.XNameAccess
Un ejemplo del uso de XnameAccess es provisto por los objetos de hoja de un libro de
cálculo. Esto combina todas las páginas dentro de un libro de cálculo. Las páginas
individuales son accesadas usando el método getByName de XNameAccess:
La interface com.sun.star.container.XNameContainer
La interface XNameContainer toma la inserción, borrado y modificación de elementos
subordinados en un objeto básico. Las funciones responsables de esto son insertByName,
removeByName y replaceByName.
El siguiente es un ejemplo práctico de esto. Llama un documento, que contiene un objeto
StyleFamilies y lo usa para cambiar las plantillas de los párrafos (ParagraphStyles) en
el documento actual.
Dim StyleFamilies As Object
Dim ParagraphStyles As Object
Dim NewStyle As Object
StyleFamilies = Textdoc.StyleFamilies
ParagraphStyles = StyleFamilies.getByName("ParagraphStyles")
ParagraphStyles.insertByName("NewStyle", NewStyle)
ParagraphStyles.replaceByName("ChangingStyle", NewStyle)
ParagraphStyles.removeByName("OldStyle")
El ejemplo muestra un ciclo que corre entre todos los elementos de las hojas uno después del
otro y guarda una referencia a cada uno en la variable de objeto Sheet. Cuando trabaja con
índices, note que getCount retorna el número de elementos. Los elementos en
getByIndex sin embargo están numerados empezando por el 0. Por eso la variable del
contador del ciclo se ejecuta desde 0 hasta getCount() - 1.
La interface com.sun.star.container.XIndexContainer
La interface XIndexContainer provee las funciones insertByIndex y
removeByIndex. Los parámetros están estructurados de la misma forma a sus funciones
correspondientes en XnameContainer.
El StarDesktop
Cuando trabaje con documentos, hay dos servicios que son usados más frecuentemente:
• El servicio com.sun.star.frame.Desktop, el cual es similar al servicio central de
OpenOffice.org. Provee las funciones para el objeto Frame de OpenOffice.org, dentro del
cual están clasificadas todas las ventanas de documentos. Los documentos pueden ser
creados, abiertos e importados usando este servicio.
• La funcionalidad básica para objetos de documentos individuales están provistos por el
servicio com.sun.star.document.OfficeDocument. Esto provee los métodos
para salvar, exportar e imprimir documentos.
El servicio com.sun.star.frame.Desktop abre automáticamente cuando
OpenOffice.org es iniciada. Para hacer esto, OpenOffice.org crea un objeto que puede ser
buscado por significado con el nombre global de StarDesktop.
La interface más importante de el StarDesktop es
com.sun.star.frame.XComponentLoader. Esto básicamente cubre el método
loadComponentFromURL, el cual es el responsable de la creación, importación y
apertura de documentos.
El nombre de StarDesktop data de la versión StarOffice 5, el la cual todos los documentos estaban juntos
en una sola aplicación común llamada StarDesktop. En la presente versión de OpenOffice.org, no se usa
más un StarDesktop. Sin embargo, el nombre de StarDesktop aun existe para para el marco del objeto
porque indica claramente que este es un objeto básico para toda la aplicación.
El objeto StarDesktop asume asume la posición de sucesor del objeto Application de StarOffice 5 el
cual era aplicado al objeto principal. Sin embargo, la diferencia con objeto Application es que era
primariamente responsable de abrir nuevos documentos. Las funciones residentes en el anterior objeto
Application para controlar la presentación en pantalla de StarOffice (por ejemplo, FullScreen,
FunctionBarVisible, Heigth, Width, Top, Visible) ya no se usan más.
Msgbox ConvertFromURL("file:///C:/doc/prueba.sxw")
' devuelve (bajo Windows) c:\doc\prueba.sxw
El ejemplo convierte el nombre de un archivo local en una URL, y despliega un cuadro de
mensaje. Luego convierte una URL a un nombre de archivo local y también lo despliega.
El Internet Standard RFC 1738, en el cual está basado, permite el uso de los caracteres 0-9,
a-z y A-Z. Todos los demás caracteres son incluidos con la codificación de escape en las
URL's. Para hacer esto, son convertidos en sus valores hexadecimales del conjunto de
caracteres ISO8859-1 (ISO-Latin) precedidos por el signo de porcentaje. Por eso, por
ejemplo, un espacio en un nombre de un archivo local se convierte en %20 en la URL.
Formato de archivos XML
Desde la versión 6.0, StarOffice provee un formato de archivos basado en XML. A traves del
uso de XML, el usuario tiene la opción también de abrir y editar archivos en otros programas.
Compresión de archivos
Desde que el XML está basado en archivos de texto standard, los archivos resultantes son
usualmente muy grandes. Sin embargo OpenOffice.org los comprime y salva en un formato
ZIP.
Mediante la opción del método storeAsURL, el usuario puede guardae el archivo XML
original directamente. Vea las opciones del método StoreAsURL en la página 79.
Url = "file:///C:/prueba.sxw"
El ejemplo primero abre el archivo prueba.sxw en una nueva ventana con el nombre de
marco MyFrame. Una vez que el cuadro de mensaje ha sido confirmado, se reemplaza el
contenido de la ventana con el del archivo prueba2.sxw.
Opciones del método loadComponentFromURL
El cuarto parámetro de la función loadComponentFromURL es el campo de datos
PropertyValue, el cual provee en OpenOffice.org varias opciones para abrir o crear
documentos. El campo de datos debe proveer a PropertyValue la estructura para cada
opción en la que el nombre de la opción es guardada como una cadena también con el valor
asociado.
• AsTemplate (Boolean) – si es verdadero, carga un documento nuevo, sin título,
para la URL dada. Si es falso, la plantilla es cargada para edición.
• CharacterSet (String) – Define en cual conjunto de caracteres está basado el
documento.
• FilterName (String) – Especifica un filtro especial para la función
loadComponentFromURL
Los nombres de filtros están disponibles en el archivo
\share\config\registry\instance\org\openoffice\office\TypeDe
tection.xml.
• FilterOptions (String) – define opciones adicionales para los filtros.
• JumpMask (String) – una vez que el documento ha sido abierto, salta a la posición
definida en JumpMask.
• Password (String) – transfiere la clave para un archivo protegido con clave.
• ReadOnly (Boolean) – carga el documento como solo lectura.
El siguiente ejemplo muestra como un archivo de texto separado por comas puede ser abierto
en OpenOffice.org Calc usando la opción FilterName.
El campo de datos FileProperties cubre precisamente un valor porque guarda solamente una
opción.
La propiedad FilterName define cuando OpenOffice.org usa un filtro de texto en
OpenOffice.org Calc para abrir archivos.
Creando nuevos documentos
OpenOffice.org crea automáticamente un nuevo documento si el documento especificado en
la URL es una plantilla.
Alternativamente, si sólo se necesita un documento vacío sin ninguna adaptación, puede ser
especificada una URL private:factory.
Dim Dummy()
Dim Url As String
Dim Obj As Object
Url = "private:factory/swriter"
doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, dummy())
Objetos de documentos
La función vista anteriormente loadComponentFromURL vista en la sección previa,
retorna un objeto de documento. Esta soporta el servicio
com.sun.star.document.OfficeDocument, el cual se divide en dos interfaces
centrales:
• la interface com.sun.star.frame.XStorable, la cual es la responsable de salvar
documentos y
• la interface com.sun.star.view.XPrintable, la cual contiene los métodos para
imprimir documentos.
Cuando se cambie a OpenOffice.org, notará que la funcionalidad de los objetos de documentos ha sido
mantenida en gran parte. Los objetos de documentos, por ejemplo, aun proveen métodos para salvar e
imprimir documentos. Sin embargo, los nombres y parámetros de los métodos han cambiado.
Doc.Store()
Esta llamada está provista para el documento que ya ha sido asignado a un espacio de
memoria. Este no es el caso para documentos nuevos. En este caso, se usa el método
storeAsURL. Este método también está definido en
com.sun.star.frame.XStorable y puede ser usado para definir la dirección del
documento:
Dim Url As String
Dim Dummy()
Url = "file:///C:/prueba3.sxw"
Doc.StoreAsURL(Url, Dummy())
El ejemplo primero verifica que el documento actual haya sido modificado desde la última
vez que fue salvado. Continúa con el proceso de salvado solamente en este caso. Si el
documento ya tiene asignada una URL y no es de sólo lectura, es salvado bajo la URL
existente. Si no tiene una URL o ha sido abierto en el estado de sólo lectura, es salvado bajo
una URL nueva.
Opciones del método storeAsURL
Asi como el método loadComponentFromURL, algunas opciones también pueden ser
especificadas en la forma de un campo de datos PropertyValue usando el método
storeAsURL. Esto determina el procedimiento que usará OpenOffice.org cuando salva un
documento. StoreAsURL provee las siguientes opciones.
• CharacterSet (string) – define en cual conjunto de caracteres estará basado un
documento.
• FilterName (string) – espcifica un filtro especial para la función
loadComponentFromURL. Los nombres de filtros disponibles están definidos en el
archivo
\share\config\registry\instance\org\openoffice\office\TypeDe
tection.xml.
• FilterOptions (String) – define opciones adicionales para los filtros.
• Overwrite (Boolean) – Permite que un archivo existente sea sobreescrito sin
ninguna pregunta adicional.
• Password (String) – transfiere la clave para un archivo protegido.
• Unpacked (Boolean) – salva el documento (no comprimido) en subdirectorios.
El siguiente ejemplo muestra como la opción Overwrite puede ser usada conjuntamente
con storeAsURL:
Dim Doc As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValues
Dim Url As String
' ... inicializa el documento
Url = "file:///C:/prueba3.sxw"
FileProperties(0).Name = "Overwrite"
FileProperties(0).Value = True
Doc.StoreAsUrl(sUrl, mFileProperties())
El ejemplo salva Doc sobre el nombre especificado aun cuando exista un archivo con ese
nombre.
Imprimiendo documentos
Similar a salvar, los documentos son impresos directamente por los significados de los
objetos de documento. El método Print de la interface
com.sun.star.view.Xprintable esta provista para este propósito.
En su forma más simple, la llamada a Print es:
Dim Dummy()
Doc.Print(Dummy())
• Pages (String) – contiene la lista de las páginas que se van a imprimir (la sintáxis es
como la especificada en el diálogo de impresión)
El siguiente ejemplo muestra como varias páginas de un documento se imprimen usando la
opción Pages:
Dim Doc As Object
Dim PrintProperties(0) As New com.sun.star.beans.PropertyValue
PrintProperties(0).Name = "Pages"
PrintProperties(0).Value = "1-3; 7; 9"
Doc.Print(PrintProperties())
Pantillas
Las plantillas son llamadas listas que contienen atributos de formatos. Ellas se mueven entre
todas las aplicaciones de OpenOffice.org y ayudan significativamente a simplificar el
formateado. Si un usuario cambia uno de los atributos de la plantilla, entonces
OpenOffice.org automáticamente ajusta todas las secciones de documentos que dependen de
ese atributo. El usuario puede, por ejemplo, cambiar el tipo de fuente de todos los niveles de
uno de los encabezados por medio de una modificación central en el documento.
Dependiendo del tipo de documento, OpenOffice.org reconoce un rango de diferentes tipos
de plantillas.
OpenOffice.org Writer soporta:
• plantillas de caracteres,
• plantilla de párrafos,
• plantilla de marcos,
• plantillas de páginas y
• plantillas de números
OpenOffice.org Calc soporta
• plantillas de celdas
• plantillas de páginas
OpenOffice.org Impress soporta
• plantillas de elementos de caracteres
• plantillas de presentaciones
En la terminología de OpenOffice.org, las diferentes plantillas son llamadas
StyleFamilies para concordar con el servicio
com.sun.star.style.StyleFamily en el cual esta basado.
Las StyleFamilies son accesadas por medio del objeto de documento:
Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim CellStyles As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
CellStyles = StyleFamilies.getByName("CellStyles")
El ejemplo usa la propiedad StyleFamilies de una hoja de cálculo para establecer una
lista que contiene todas las plantillas de celdas disponibles.
Las plantillas individuales pueden ser accesadas directamente por medio de un índice:
El ciclo agregado al ejemplo anterior despliega los nombres de todas las plantillas de celdas
una después de otra en un cuadro de mensaje.
Adicionalmente a cadenas de caracteres, los documentos de texto también contienen
información sobre los formatos. Estos puede aparecer en cualquier punto del texto. La
estructura es un poco más complicada en las tablas. Esto no solamente incluye cadenas de
dimensiones sencillas, sino también campos de dos dimensiones. Muchos programas de
procesamiento de texto actualmente proveen la opción de de colocar objetos de dibujos,
marcos de texto, y otros objetos dentro del texto. Esto puede estar fuera del flujo del texto y
ser colocados en cualquier parte de la página.
Este capítulo presenta las principales interfaces y servicios para los documentos de texto. La
primera sección detalla la anatomía de los documentos de texto y se concentra en cómo un
programa OpenOffice.org Basic puede ser usado para tomas pasos iteractivos a traves del
documento OpenOffice.org. Se enfoca en párrafos, porciones de párrafos y sus formatos.
La segunda sección se enfoca en el trabajo eficiente con documentos de texto. Para este
propósito, OpenOffice.org ofrece varios objetos de ayuda, como el objeto TextCursor, el cual
se extiende más allá de la especificación de la primera sección.
La tercera sección va más allá del trabajo con textos. Se concentra en tablas, marcos de texto,
campos de texto, marcadores, contenidos de directorio y más.
La información sobre cómo crear, abrir, salvar e imprimir documentos está descrita en el
cápitulo 5, porque no solamente puede ser usada para documentos de texto, sino también con
otros tipos de documentos.
El diseño de la API de OpenOffice.org para OpenOffice.org Writer difiere de las versiones previas. La
versión API anterior concentraba el trabajo en el objeto Selection, el cual estaba muy orientado a la idea
de la interface del usuario para el usuario final, enfocado en el trabajo del resaltado controlado por el
mouse (ratón).
La API de OpenOffice.org ha reemplazado estas conecciones entre la interface del usuario y la interface del
programa. Ahora el programador tiene acceso paralelo a todas las partes de una aplicación y puede
trabajar con diferentes sub secciones de un documento al mismo tiempo. El antiguo objeto Selection ya
no está más disponible.
If TextElement.supportsService("com.sun.star.text.TextTable") Then
Msgbox "el bloque actual contiene una tabla"
End If
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Msgbox "el bloque actual contiene un párrafo"
End If
Wend
Párrafos
El servicio com.sun.star.text.Paragraph garantiza el acceso al contenido de un
párrafo. El texto de un párrafo puede ser obtenido y modificado usando la propiedad
String:
Dim Doc As Object
Dim Enum As Object
Dim TextElement As Object
Doc = StarDesktop.CurrentComponent
Enum = Doc.Text.Enumeration
While Enum.hasMoreElements
TextElement = Enum.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
TextElement.String = Replace(TextElement.String, "you", "U")
TextElement.String = Replace(TextElement.String, "too", "2")
TextElement.String = Replace(TextElement.String, "for", "4")
End If
Wend
El ejemplo abre el documento de texto actual y pasa por medio de él con la ayuda del objeto
Enumeration. Este usa la propiedad TextElement.String en todos los párrafos para accesar los
párrafos relevantes y reemplaza las cadenas, "you", "too" y "for" con los caracteres "U", "2"
y "4". La función Replace es usada para reemplazar no cae dentro del alcance lingüístico
standard del OpenOffice.org Basic. Esto es una instancia de ejemplo de función descrita en el
capítulo 3, en la sección Búsqueda y reemplazo.
El contenido del procedimiento descrito aquí para el acceso de párrafos de un texto es comparable con el
listado Paragraphs usado en VBA, el cual está provisto por los objetos Range y Document disponibles
aquí. Mientras en VBA los párrafos son accesados por su número (por ejemplo mediante la llamada
Paragraph(1)), en OpenOffice.org Basic, el objeto Enumeration se decribió previamente cómo debe
usarse.
No hay contraparte directa en OpenOffice.org Basic, para las listas Characters, Sentences, y Words
provistas en VBA. Sin embargo, tiene la opción puede cambiar a TextCursor el cual permite la
navegación a nivel de caracteres, frases y palabras. (refierase a TextCursor)
Porciones de párrafos
En el ejemplo previo se pudo cambiar texto, según se requiera, pero algunas veces también se
puede destruir un formato.
Esto es porque el párrafo de turno consiste en sub objetos individuales. Cada uno de estos sub
objetos consiste en su propia información de formateado. Si se centra un párrafo, por
ejemplo, contiene una palabra escrita en negrita, entonces esto es representado en
OpenOffice.org por tres porciones de párrafos: La porción antes de la negrita, luego la
palabra en negrita, y finalmente la porción después de la negrita, que de nuevo es puesta
como normal.
Si el párrafo es cambiado usando la propiedad del párrafo String, entonces OpenOffice.org
primero borra las viejas porciones de párrafo e inserta una nueva porción de párrafo. El
formateo de las secciones previas es borrado.
Para prevenir este efecto, el usuario puede accesar las porciones de párrafo asociadas en lugar
del párafo entero. Los párrafos proveen su propio objeto Enumeration para este propósito. El
siguiente ejemplo muestra un ciclo doble que pasa por todos los párrafos del documento de
texto y las porciones de párrafos que contienen y aplica el proceso de reemplazamiento del
ejemplo previo:
Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TextElement As Object
Dim TextPortion As Object
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.Enumeration
El ejemplo corre por el documento de texto en un ciclo doble. El ciclo de afuera se refiere a
los párrafos del texto. El ciclo interno procesa las pociones de párrafos en estos párrafos. El
ejemplo de código modifica el contenido en cada una de las porciones de párrafo, usando la
propiedad String de la cadena, como en el caso del ejemplo para los párrafos. Sin embargo,
como las porciones de párrafo son editadas directamente, la información del formato es
retenida cuando se reemplazan las cadenas.
Formateando
Hay varias formas para el formateado del texto. La forma más simple es asignar las
propiedades directamente a la secuencia de texto. Esto es llamado formateo directo. El
formateo directo es usado en particular con documentos cortos, porque estos formatos pueden
ser asignados por el usuario con el mouse. Se puede, por ejemplo, marcar cierta palabra
dentro de un texto usando la negrita o centrar una línea.
Adicionalmente al formateo directo, también puede formatear usando plantillas. Esto es
llamado formateo indirecto. Con el formateo indirecto, el usuario asigna plantillas pre
definidas a ciertas partes del texto. Si el esquema del texto es cambiado posteriormente, el
usuario solamente tiene que cambiar la plantilla. OpenOffice.org cambia la forma de todas
las porciones de texto que usan esa plantilla.
En VBA, las propiedades de formateado de un objeto está normalmente por encima de los sub objetos (por
ejemplo, Range.font, Range.Borders, Range.Shading, Range.ParagraphFormat). Las propiedades
son accesados por significado de expresiones en cascada. (Por ejemplo, Range.Font.AllCaps). En
OpenOffice.org Basic, las propiedades de formateado por el contrario están disponibles directamente,
usando los objetos adecuados (TextCursor, Paragraph, y asi). Puede encontrar un vistazo de las
propiedades de párrafo disponibles en las dos secciones siguientes
Propiedades de caracteres
Las propiedades de formato que se refieren a caracteres individuales son llamadas
propiedades de caracteres. Estas incluyen la negrita y el tipo de fuente. Los objetos que
permiten esto, tienen que soportar el servicio
com.sun.star.style.CharacterProperties. OpenOffice.org reconoce un
amplio rango de servicios que soportan este servicio. Estos incluyen los servicios
com.sun.star.text.Paragraph para los párrafos y también el servicio
com.sun.star.text.TextPortion para las porciones de párrafos.
El servicio com.sun.star.style.CharacterProperties no provee ninguna
interface, pero en cambio, ofrece un rango de propiedades mediante las cuales las
propiedades de párrafos pueden ser definidas y llamadas. Una lista completa de todas las
propiedades de caracteres pueden ser encontradas en la referencia de la API de
OpenOffice.org. La siguiente lista describe las propiedades más importantes.
• CharFontName (string) – nombre de la fuente seleccionada.
• CharColor (Long) – color del texto.
• CharHeight (Float) – tamaño de la fuente en puntos (pt).
• CharUnderline (Constant group) – tipo de subrayado (constantes en concordancia con
com.sun.star.awt.FontUnderLine)
• CharWeight (Constant group) – ancho del carácter (constantes en concordancia con
com.sun.star.awt.FontWeight)
• CharBackColor (Long) – color del fondo.
• CharKeepTogether (Boolean) – suprimir el salto de línea.
• CharStyleName (String) – nombre de la plantilla.
Propiedades de párrafos
La información de formatos que no se refiere a caracteres individuales, sino a un párrafo
entero es considerada como una propiedad de párrafo. Esto incluye la distancia de un párrafo
al borde de la página, y el espaciado de las líneas. Las propiedades de los párrafos están
disponibles desde el servicio com.sun.star.style.ParagraphProperties.
Las propiedades de los párrafos están disponibles desde varios objetos. Todos los objetos que
soporten el servicio com.sun.star.text.Paragraph también proveen soporte para
las propiedades de párrafo en el servicio
com.sun.star.style.ParagraphProperties.
Una lista completa de las propiedades de párrafos pueden ser encontradas en la referencia de
la API de OpenOffice.org. Las propiedades de párrafos más comunes son:
La estructura básica de el ejemplo está orientada a los ejemplo vistos de ejecutarse a traves
de las porciones de párrafos de un texto que ya se ha discutido. Las funciones para escribir el
archivo HTML, también es una código de prueba del peso de la fuente de las porciones de
texto correspondientes, y provee porciones de párrafos en negrita con su etiqueta
correspondiente en HTML, que ha sido agregada.
Valores por defecto para las propiedades de párrafo y carácter
El formateo directo siempre tiene prioridad sobre el formateo indirecto. En otras palabras, el
formateado usando plantillas tiene asignado menor prioridad que el formateado directo en un
texto.
Establecer cuándo una sección de un documento ha sido formateada directa o indirectamente
no es fácil. Las barras de símbolos provistas por OpenOffice.org muestran las propiedades
comunes de texto, como tipo de fuente, peso y tamaño. Sin embargo, los ajustes
correspondientes basados en plantillas o formateo directo en el texto, no están claros.
OpenOffice.org Basic provee el método getPropertyState, con el cual los
programadores pueden verificar cómo cierta propiedad ha sido formateada. Como un
parámetro, toma el nombre de la propiedad y retorna una constante que provee información
acerca del origen del formato. Las siguientes respuestas posibles, están definidas en la
enumeración com.sun.star.beans.PropertyState:
• com.sun.star.beans.propertyState.DIRECT_VALUE – esta propiedad es
definida directamente en el texto. (formateo directo).
• com.sun.star.beans.propertyState.DEFAULT_VALUE – esta propiedad es
definida por una plantilla (formateo indirecto).
• com.sun.star.beans.propertyState.AMBIGUOS_VALUE – esta propiedad no
está clara. Este estado es levantado, por ejemplo, cuando se pregunta por la propiedad
negrita de un párrafo, que incluye palabras marcadas en negrita y palabras marcadas en
fuente normal.
El siguiente ejemplo muestra como las propiedades del formato pueden ser editados en
OpenOffice.org. Busca por el texto por porciones de párrafos que han sido marcados con
negrita usando formateo directo. Si encuentra la porción de párrafo correspondiente, borra el
formateo directo usando el método setPropertytoDefault y asigna el carácter de
plantilla MyBold a la porción de párrafo correspondiente.
Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TextElement As Object
Dim TextPortion As Object
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
' ciclo sobre todos los párrafos
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Enum2 = TextElement.createEnumeration
' ciclo sobre todas las porciones de párrafo
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
If TextPortion.CharWeight = _
com.sun.star.awt.FontWeight.BOLD AND _
TextPortion.getPropertyState("CharWeight") = _
com.sun.star.beans.PropertyState.DIRECT_VALUE Then
TextPortion.setPropertyToDefault("CharWeight")
TextPortion.CharStyleName = "MyBold"
End If
Wend
End If
Wend
El TextCursor
El TextCursor en la API de OpenOffice.org Basic es comparable con el cursor visible en un
documento OpenOffice.org. Marca cierto punto dentro de un documento de texto y puede
navegar en varias direcciones por medio del uso de comandos. El objeto TextCursor
disponible en OpenOffice.org Basic, sin embargo, no debe ser confundido con el cursor
visible. Estas son dos cosas diferentes.
primero mueve diez caracteres a la derecha sin resaltado, y luego se devuelve tres caracteres
y las resalta. El área resaltada por el TextCursor entonces empieza después del séptimo
El ejemplo primero crea un objeto de documento para el texto que se acaba de abrir. Luego
interactúa con todo el texto, oración por oración, y resalta cada una de las primeras palabras y
le pone un formato de negrita.
Obteniendo y modificando contenidos del texto
Si un TextCursor contiene un área resaltada, entonces el texto está disponible por
significado mediante la propiedad String del objeto TextCursor. El siguiente ejemplo
usa la propiedad String y despliega las primeras palabras de una oración en un cuadro de
mensajes:
Dim Doc As Object
Dim Cursor As Object
Dim Proceed As Boolean
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
MsgBox Cursor.String
Proceed = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
Loop While Proceed
La primera palabra de cada oración puede ser modificada de la misma manera usando la
propiedad String:
Una vez que el SearchDescriptor ha sido creado, recibe el texto que debe ser buscado:
SearchDesc.searchString = "Cualquier texto"
Como en la antigua API de OpenOffice.org, buscar y reemplazar texto en la nueva API también es usando
el objeto de documento. Mientras previamente había un objeto llamado SearchSettings especialmente para
definir estas opciones, en el nuevo objeto las búsquedas son hechas usando un objeto SearchDescriptor o
ReplaceDescriptor para reemplazar texto automáticamente. Estos objetos cubren no solo las porciones,
sino también el documento de texto actual, y si es necesario, el reemplazo de texto asociado. Los
descriptores del objeto son creados usando el objeto de documento, completados en concordancia con las
peticiones relevantes, y luego transferidas de nuevo al objeto de documento como un parámetro para los
métodos de búsqueda.
• El carácter ^ marca el inicio de un párrafo. Todas las ocurrencias del nombre Pedro que
estén al inicio de un párrafo pueden ser encontradas usando la expresión de búsqueda
^Pedro.
• El carácter $ marca el final de un párrafo. Todas los casos del nombre Pedro que están al
final de un párrafo pueden ser encontrados usando la expresión de búsqueda Pedro$.
• Un * indica que el carácter precedente puede ser repetido cualquier número de veces.
Puede ser combinado con el punto como un comodín para cualquier carácter. La expresión
temper.*a, por ejemplo, puede encontrar las palabras temperancia y
temperatura.
El siguiente ejemplo muestra cómo todas las líneas vacías en un documento de texto pueden
ser removidas con la ayuda de las expresiones regulares ^$:
Dim Doc As Object
Dim Replace As Object
Dim I As Long
Doc = StarDesktop.CurrentComponent
Replace = Doc.createReplaceDescriptor
Replace.SearchRegularExpression = True
Replace.SearchString = "^$"
Replace.ReplaceString = ""
Doc.replaceAll(Replace)
Tablas
El siguiente ejemplo crea una tabla con la ayuda de el método createInstance descrito
previamente.
Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(5, 4)
Doc.Text.insertTextContent(Cursor, Table, False)
Una vez creado, la tabla es puesta con el número de filas y columnas requeridas usando la
llamada initialize y luego insertada en el documento de texto usando
insertTextContent.
Como puede ver en el ejemplo, el método insertTextContent espera no solo el objeto
content que va a ser insertado, sino también dos parámetros:
• Un objeto Cursor que determina la posición de insertado.
• Una variables boolean que especifica cuando el objeto Content va a reemplazar la
selección actual del cursor (valor verdadero) o va a ser insertado antes de la selección
actual en el texto (valor falso).
Cuando crea o inserta tablas en un documento de texto, los objetos disponibles en VBA son similares en
OpenOffice.org Basic: El objeto de documento TextCursor en OpenOffice.org Basic o la contraparte
Range en VBA. Mientras el método Document.Tables.Add toma la tarea de crear y ajustar una tabla en
VBA, este es creado en OpenOffice.org Basic en concordancia con el ejemplo previo usando
CreateInstance, inicializando el documento por medio de insertTextContent.
Las tablas insertadas en un documento de texto pueden ser determinadas usando un simple
ciclo. El método del documento de texto getTextTables() es usado para este propósito:
Dim Doc As Object
Dim TextTables As Object
Dim Table As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count – 1
Table = TextTables(I)
' Editando la tabla
Next I
Las tablas de texto están disponibles en OpenOffice.org por medio de la lista TextTables del objeto de
documento. Esto tiene lugar de la lista de tablas formadas provistas por el objeto Selection. El ejemplo
previo muestra cómo una tabla de texto puede ser creada. Las opciones para accesar una tabla de texto
están descritas a continuación.
Editando tablas
Una tabla consiste en filas individuales. Estas por vez contienen varias celdas. Estrictamente
hablando, no hay columnas en las tablas de OpenOffice.org. Estas son producidas
simplemente por el arreglo de filas (una bajo la otra) unas juntas a otras. Para simplificar el
acceso a las tablas, OpenOffice.org provee algunos métodos con los que se pueden operar las
columnas. Estos son útiles si no hay celdas combinadas en la tabla.
Primero tomemos las propiedades de la tabla misma. Estas están definidas en el servicio
com.sun.star.text.TextTable. Aquí están las propiedades más importantes del
objeto tabla:
• BackColor (Long) – Color de fondo de la tabla.
• BottomMargin (Long) – margen inferior en centésimas de milímetro.
• LeftMargin (Long) – margen izquierdo en centésimas de milímetro.
• RightMargin (Long) – margen derecho en centésimas de milímetro.
• TopMargin (Long) – margen superior en centésimas de milímetro.
• RepeatHeadline (boolean) – el encabezado de la tabla es repetido en cada página.
• Width (Long) – ancho absoluto de la tabla en centésimas de milímetro.
Filas
Una tabla consiste en una lista de filas. El siguiente ejemplo muestra como las filas de una
tabla pueden ser obtenidas y formateadas:
Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Dim Rows As Object
Dim Row As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(5, 4)
Doc.Text.insertTextContent(Cursor, Table, False)
Rows = Table.getRows
For I = 0 To Rows.getCount() - 1
Row = Rows.getByIndex(I)
Row.BackColor = &HFF00FF
Next
El ejemplo primero crea una lista conteniendo todas las filas usando la llamada
Table.getRows. Los métodos getCount y getByIndex permiten que la lista sea
procesada posteriormente y pertenece a la interface
com.sun.star.table.XtableRows. El método GetByIndex retorna el objeto fila,
y soporta el servicio com.sun.star.text.TextTableRow.
Una celda de una tabla es comparable con el texto standard. Soporta la interface
TextCursor para crear un objeto TextCursor asociado.
CellCursor = Cell.createTextCursor()
El ejemplo crea una lista TextTables conteniendo todas las tablas del texto que se está
recorriendo mediante el ciclo. OpenOffice.org Entonces crea una lista de los nombres de
celdas asociados para cada una de estas tablas. Estas son recorridas mediante un ciclo. Si una
celda contiene un valor numérico, entonces el ejemplo cambia el formato correspondiente.
Para hacer esto, primero crea un objeto TextCursor que hace referencia al contenido de la
celda de la tabla y entonces adapta las propiedades del párrafo de la celda de la tabla.
Marcos de texto
Los marcos de texto son considerados objetos TextContent, como las tablas y gráficos.
Estos pueden esecialmente consisten en texto standard, pero pueden ser puestos en cualquier
posición en una página y no están incluidas en el flujo del texto.
Como con los objetos TextContent, también es hecha una distinción con marcos de texto
entre la actual creación e inserción en el documento.
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Doc.Text.insertTextContent(Cursor, Frame, False)
Los marcos de texto son la contraparte a los marcos de posición usados en Word. Mientras VBA usa el
método Document.Frames.Add para este propósito, la creación en VBA es hecha usando el el
procedimiento anterior también con la ayuda de el TextCursor y de el método createInstance del
objeto de documento.
Los objetos de marco de texto proveen un rango de propiedades con las cuales la posición y
el comportamiento del marco pueden ser cambiados. La mayoría de estas propiedades están
definidas en el servicio com.sun.star.text.BaseFrameProperties, el cual
también está soportado por cada servicio TextFrame. Las principales propiedades son:
• BackColor (Long) – Color de fondo del marco de texto.
• BottomMargin (Long) – márgen inferior en centécimas de milímetro.
• LeftMargin (Long) – márgen izquierdo en centécimas de milímetro.
• RightMargin (Long) – márgen derecho en centécimas de milímetro.
• TopMargin (Long) – márgen superior en centécimas de milímetro.
• Heigth (Long) – Alto del marco de texto en centécimas de milímetro.
El ejemplo crea un TextCursor para marcar la inserción del marco de texto. Esto está
posicionado entre la primera y segunda palabra del texto. El marco de texto es creado usando
Doc.createInstance. Las propiedades del marco de texto son puestas para los valores
iniciales requeridos.
La interacción de las propiedades entre AnchorType (del servicio TextContent) y
VertOrient (del servicio BaseFrameProperties) se pueden notar aquí.
AnchorType recibe el valor AS_CHARACTER. El marco de texto es insertado de esta
manera directamente en el flujo de texto y se comporta como un carácter. Esto puede, por
ejemplo, ser movido a la siguiente línea cuando se ocurre un salto de línea. El valor
LINE_TOP de la propiedad VertOrient asegura que el borde superior del marco de texto
este a la misma altura del borde superior del carácter.
Una vez que la inicialización está completa, el marco de texto es finalmente insertado en el
documento de texto usando una llamada desde insertTextContent.
Para editar el contenido de un marco de texto, el usuario puede usar el TextCursor, el cual ha
sido mencionado numerosas veces y que también está disponible para los marcos de texto.
Campos de texto
Los campos de texto son objetos TextContent porque ellos proveen una lógica adicional
extendida más allá del puro texto. Los campos de texto pueden ser insertados en el
documento de texto usando el mismo método que es usado para otros objetos
TextContent:
Dim Doc As Object
Dim DateTimeField As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.CreateTextCursor()
DateTimeField = Doc.createInstance("com.sun.star.text.Textfield.DateTime")
DateTimeField.IsFixed = False
DateTimeField.IsDate = True
Doc.Text.InsertTextContent(Cursor, DateTimeField, False)
El ejemplo inserta un campo de texto con la fecha actual al inicio del documento actual. El
valor True de la propiedad IsDate resulta en que solamente es desplegada la fecha y no la
hora. El valor False para IsFixed asegura que la fecha sea actualizada automáticamente
cuando el documento es abierto.
En OpenOffice.org, los campos son administrados usando el concepto orientado a objetos. Para crear un
campo de texto, un campo de texto del tipo definido debe ser primeramente creado e inicializado usando
las propiedades requeridas. El campo de texto es insertado en el documento usando el método
insertTextContent. El correspondiente código fuente ha sido visto en el ejemplo anterior. Los tipos de
campos más importantes y sus propiedades están descritas en las siguientes secciones.
Adicionalmente a insertar campos de texto, buscar un documento por los campos es también
una tarea importante. El siguiente ejemplo muestra como todos los campos de texto pueden
ser recorridos en un ciclo y verificados por su tipo relevante.
Dim Doc As Object
Dim TextFieldEnum As Object
Dim TextField As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
TextFieldEnum = Doc.getTextFields.createEnumeration
While TextFieldEnum.hasMoreElements()
TextField = TextFieldEnum.nextElement()
If TextField.supportsService("com.sun.star.text.TextField.DateTime") Then
MsgBox "Fecha/Hora"
ElseIf TextField.supportsService("com.sun.star.text.TextField.Annotation")
Then
MsgBox "Anotación"
Else
MsgBox "desconocido"
End If
Wend
El punto de inicio para establecer los campos de texto actuales es la lista TextFields del
objeto de documento. El ejemplo crea un objeto Enumeration en base de esta lista, con la
cual todos los campos de texto pueden ser consultados por turnos en un ciclo. Los campos de
texto encontrados son verificados contra el servicio soportado usando el método
supportsService. Si el campo prueba ser de un tipo Fecha/Hora o una Anotación,
entonces el tipo de campo correspondiente es desplegado en el cuadro de información. Si por
otra parte, el ejemplo encuentra cualquier otro campo, entonces se despliega la información
"desconocido".
Abajo, encontrará una lista de los campos de texto más importantes y sus propiedades
asociadas. Una lista completa de todos los campos de texto esta provista en la referencia API
en el módulo com.sun.star.text.TextField. (Cuando lista el nombre del servicio
de un campo de texto, los caracteres en mayúsculas y minúsculas deben ser usados en
OpenOffice.org basic, como en el ejemplo previo.)
Números de páginas, palabras y caracteres
Los campos de texto
• com.sun.star.text.TextField.PageCount
• com.sun.star.text.TextField.WordCount
• com.sun.star.text.TextField.CharacterCount
retorna el número de páginas, palabras o caracteres de un texto. Estos soportan la siguiente
propiedad:
• NumberingType (const) – formato de número (en concordancia con las constantes de
com.sun.star.style.NumberingType)
Página actual
El número de la página actual puede ser insertado usando el campo de texto
Marcadores
Los marcadores (Servicio com.sun.star.text.bookmark) son objetos
TextContent. Los marcadores son creados e insertados usando el concepto de nuevo
descrito previamente:
Dim Doc As Object
Dim Bookmark As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.CreateTextCursor()
Bookmark = Doc.createInstance("com.sun.star.Bookmark")
Bookmark.Name = "Mi marcador"
Doc.Text.InsertTextContent(Cursor, Bookmark, True)
El ejemplo crea un Cursor, el cual marca en la posición del punto de inserción del
marcador con el objeto de marcador (Bookmark). Al marcador le es asignado un nombre y
es insertado en el documento por medio de insertTextContent en la posición del
cursor.
Los marcadores de texto son accesados por medio de una lista llamada Bookmarks. Los
marcadores pueden ser accesados por su número o por su nombre.
El siguiente ejemplo muestra como un marcador puede ser encontrado dentro de un texto, y
un texto insertado en esa posición.
OpenOffice.org Basic provee una interface extensa para la creación y edición de libros de
cálculo controlados por programación. Este capítulo describe como controlar los servicios,
métodos y propiedades relevantes de los documentos de hoja de cálculo.
La primera sección contiene la estructura básica de los documentos de hoja de cálculo y
muestra como accesar y editar los contenidos de celdas individuales.
La segunda sección se concentra en cómo editar hojas de cálculo eficientemente, poniéndo el
foco en áreas de celdas y las opciones de búsqueda y reemplazo de los contenidos de las
celdas.
El objeto Range le permite direccionar cualquier area de la tabla y ha sido extendido en la API nueva
Una terminología diferente es usada en VBA y en OpenOffice.org. Mientras que el objeto de documento en
VBA es llamado Libro de trabajo y sus páginas inidividuales páginas de trabajo, estos son llamados
Documento de hojas de cálculo y Hojas en OpenOffice.org.
Hojas de cálculo
Se pueden accesar hojas individuales de las hojas de cálculo por medio dela lista Sheets.
El siguiente ejemplo muestra cómo puede accesar una hoja bien sea por su número o por su
nombre:
Dim Doc As Object
Dim Sheet As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
En el primer ejemplo, las hojas son accesadas por su número (el conteo inicia en 0). En el
segundo ejemplo, la hoja es accesada por su nombre con el método getByName.
El objeto Sheet que es obtenido por el método getByName soporta el servicio
com.sun.star.sheet.Spreadsheet. Adicionalmente se proveen algunas interfaces
para editar el documento, este servicio provee las siguientes propiedades:
• IsVisible (Boolean) – las hojas de cálculo son visibles.
• PageStyle (String) – nombre de la plantilla para la hoja de cálculo.
Creando, borrando y renombrando hojas de cálculo
La lista sheets del documento spreadsheet también es usado para crear, borrar y
renombrar hojas de cálculo individuales. El siguiente ejemplo usa el método hasByName
para verificar si existe una hoja llamada "MiHoja". Si existe, el método determina el objeto
correspondiente usando el método getByName y entonces salva la referencia en una
variable sheet. Si la correspondiente hoja no existe, encontes es creado con la llamada a
createInstance e insertado en el libro de cálculo mediante el método insertByName.
Dim Doc As Object
Dim Sheet As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
If Doc.Sheets.hasByName("MiHoja") Then
Sheet = Doc.Sheets.getByName("MiHoja")
Else
Sheet = Doc.CreateInstance("com.sun.star.sheet.Spreadsheet")
Doc.Sheets.insertByName("MiHoja", Sheet)
End If
Filas y columnas
Cada hoja contiene una lista de filas y columnas. Están disponibles mediante las propiedades
Rows y Columns del objeto de Hojas de Cálculo y soporta los servicios
com.sun.star.table.TableColumns y/o
com.sun.star.table.TableRows.
El siguiente ejemplo crea dos objetos que referencian a la primera fila y primera columna de
una hoja y guarda las referencias de los objetos FirstCol y FirstRow en una variable.
Las listas Rows y Columns son accesadas por medio de un índice en OpenOffice.org Basic. A diferencia de
VBA, la primera columna tiene el índice 0 y no el 1.
Este ejemplo usa el método insertByIndex para insertar una nueva columna dentro de la
cuarta posición en la hoja (índice 3 – la numeración inicia en 0). El segundo parámetro
especifica el número de columnas a ser insertadas (en este ejemplo una).
El método removeByIndex borra la sexta columna (índice 5). De nuevo, el segundo
parámetro especifica el número de columnas que se desean borrar.
Los métodos para insertar y borrar columnas usa la función del objeto Rows de la misma
manera que el método muestra para la edición de las columnas usando el objeto columns.
Celdas
Una hoja de cálculo consiste en una lista bi-dimensional que contiene celdas. Cada celda es
definida por posición X-Y con respecto a la celda superior izquierda que tiene la posición
(0,0).
El siguiente ejemplo crea un objeto que referencia la celda superior izquierda e inserta texto
en la celda:
Las propiedades Value, String y Formula superponen el método PutCell para asignar valores en una
celda.
OpenOffice.org trata el contenido que ha sido ingresado por la propiedad String como un
texto, aunque el contenido sea un número. Los números son alineados a la izquierda en la
celda, mientras lo demás alineado a la derecha. También puede notar la diferencia entre el
texto y los números cuando usa fórmulas.
Mientras que la celda A1 contiene el valor de 100 y la celda el valor de 1000, la fórmula
A1+A2 retorna el valor de 100. Esto es porque el contenido de la celda A2 fue ingresado
como un texto y no como un número.
Para verificar si el contenido de una celda es un número o una cadena, se puede usar la
propiedad Type:
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
Cell.Value = 1000
Select Case Cell.Type
Case com.sun.star.table.CellContentType.EMPTY
MsgBox "Contenido: Vacío"
Case com.sun.star.table.CellContentType.VALUE
MsgBox "Contenido: Valor"
Case com.sun.star.table.CellContentType.TEXT
MsgBox "Contenido: Texto"
Case com.sun.star.table.CellContentType.FORMULA
MsgBox "Contenido: Fórmula"
End Select
Este ejemplo inserta un rango de celdas del tamaño de dos filas y dos columnas en la segunda
fila y la segunda columna (cada inicio está en 1) de la primera hoja de cálculo (número 0) en
el libro de hojas de cálculo. Cualquier valor existente en el rango de celdas especificado es
movido hacia abajo.
Para definir el rango de celdas que desea insertar use la estructura
com.sun.star.table.CellRangeAddress. Los siguientes valores están incluidos
en esta estructura:
• Sheet (short) – El número de la hoja. (la numeración inicia en 0)
• StartColumn (long) – La primera columna en el rango de celdas (la numeración inicia
en 0)
• StartRow (long) – la primera fila en el rango de celdas (la numeración inicia en 0)
• EndColumn (long) – La columna final en el rango (la numeración inicia en 0)
• EndRow (long) – la última fila en el rango de celdas (la numeración inicia en 0)
La estructura completa de CellRangeAddress debe ser pasada como parámetro al
método InsertCells. El segundo parámetro de InsertCells contiene un valor de la
enumeración com.sun.star.sheet.CellInsertMode y define que se hará con los
valores que están localizados frente a la posición en la que se va a insertar. La enumeración
CellInsertMode reconoce los siguientes valores:
• NONE – los valores actuales se mantienen en su posición actual.
• DOWN – las celdas en y abajo de la posición de inserción serán movidas hacia abajo.
• RIGHT – las celdas en y a la derecha de la posición de inserción serán movidas hacia la
derecha.
• ROWS – las filas después de la posición de inserción serán movidas hacia abajo.
• COLUMNS – las columnas después de la posición de inserción serán movidas hacia la
derecha.
El método RemoveRange es la contrapartida del método insertCells. Este método
borra el rango que está definido en la estructura CellRangeAddress de la hoja.
Este ejemplo remueve el rango de celdas B2:C3 de la hoja y levanta las celdas de abajo dos
filas. El tipo de remoción está definido por uno de los siguientes valores de la enumeración
com.sun.star.sheet.CellDeleteMode:
• NONE – los valores actuales conservan su posición actual.
• UP – las celdas en y bajo el punto de remoción son movidas hacia arriba.
• LEFT – las celdas depués del punto de remoción son movidas a la izquierda.
• ROWS – las filas después del punto de remoción son movidas hacia arriba.
• COLUMNS – las columnas después del punto de inserción son movidas hacia la izquierda.
La interface XrangeMovement provee dos métodos adicionales para mover
(moveRange) o copiar (copyRange) rangos de celdas. El siguiente ejemplo mueve el
rango B2:C3 de manera que el rango inicie en la posición A6:
Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5
Sheet.moveRange(CellAddress, CellRangeAddress)
Formateado
Un documento de hoja de cálculo provee las propiedades y métodos para el formateo de
celdas y páginas.
Propiedades de celdas
Hay numerosas opciones para formatear celdas, para especificar tipo de fuente y tamaño para
el texto.
Cada celda soporta los servicios com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties, cuyas principales propiedades
están descritas en el capítulo 6 (Documentos de texto en la página 71). Formateados
especiales de las celdas son manejados por el servicio
com.sun.star.table.CellProperties. Las principales propiedades de este
servicio están descritas en las secciones siguientes.
Puede aplicar todas las propiedades nombradas a las celdas y a los rangos de celdas
El objeto CellProperties en la API de OpenOffice.org es comparable con el objeto Interior de VBA que
también define propiedades especificas de las celdas.
Justificación
OpenOffice.org provee varias funciones que permiten cambiar la justificación del texto en
una celda de una tabla.
Las siguientes propiedades definen la justificación horizontal y vertical del texto:
• HoriJustify (enum) – justificación horizontal del texto (valores de
com.sun.star.table.CellHoriJustify)
• VertJustify (enum) – justificación vertical del texto (valores del
com.sun.star.table.CellVertJustify)
• Orientation (enum) – orientación del texto (valores de
com.sun.star.table.CellOrientation)
• IsTextWrapped (boolean) – permite los saltos de línea automáticos dentro de una
celda.
• RotateAngle (Long) – ángulo de rotación del texto en centésimas de grado.
El siguiente ejemplo muestra como se pueden “apilar” los contenidos de una celda, de
manera que los caracteres individuales son impresos uno sobre el otro en la esquina superior
izquierda de la celda. Los caracteres no han sido rotados.
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
Cell.Value = 23400.3523565
LocalSettings.languaje = "en"
LocalSettings.Country = "us"
NumberFormats = Doc.NumberFormats
NumberFormatString = "#,##0.000"
NumberFormatId = NumberFormats.queryKey(NumberFormatString, localsettings, True)
If NumberFormatId = 1 Then
NumberFormatId = NumberFormats.addNew(NumberFormatString, localsettings)
End If
msgBox NumberFormatId
Cell.NumberFormat = NumberFormatId
Las propiedades de página (márgenes de páginas, bordes y demás) para un documento Microsoft Office
están definidos por el significado PageSetup en el objeto Worksheet (Excel) o el objeto Document (Word).
En OpenOffice.org, estas propiedades están definidas usando el estilo de página el cual está vinculado al
documento relacionado.
Fondo de página
El servicio com.sun.star.style.PageProperties define las siguientes
propiedades para el fondo de las páginas:
• BackColor (long) – color de fondo.
• BackGraphicURL (string) – URL del gráfico de fondo que desea usar.
• BackGraphicFilter (string) – nombre del filtro para interpretar el gráfico de fondo.
• BackGraphicLocation (enum) – Posición del gráfico de fondo (el valor de acuerdo
con la enumeración com.sun.star.style.GraphicLocation)
Formato de la página
El formato de la página está definido usando las siguientes propiedades del servicio
com.sun.star.style.PageProperties:
• IsLandscape (boolean) – formato horizontal.
• Width (long) – ancho de la página en centécimas de milímetro.
• Height (long) – alto de la página den centécimas de milímetro.
• PrinterPaperTray (string) – nombre de la bandeja de papel que desea usar.
El siguiente ejemplo configura el tamaño del papel del estilo de página "default" al formato
DIN A5 horizontal. (alto 14.8 cm, ancho 21 cm)
Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.IsLandscape = True
DefPage.Width = 21000
DefPage.Height = 14800
Note la última línea del ejemplo: mientras el texto es cambiado, el objeto Textcontent
debe ser asignado al encabezado de nuevo para que el cambio sea efectivo.
Otro mecanismo para cambiar el texto de los encabezado y los pies está disponible para los
documentos de texto (OpenOffice.org Writer) porque este consiste en un bloque sencillo de
texto. Las siguientes propiedades están definidas en el servicio
com.sun.star.style.PageProperties:
Rangos de celdas
Adicionalmente a un objeto para celdas individuales (el servicio
com.sun.star.table.Cell), OpenOffice.org también provee objetos que representan
rangos de celdas. Como el objeto CellRange es creado usando la llamada a
getCellRangeByName del objeto de hoja de cálculo:
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Hoja 1")
CellRange = Sheet.getCellRangeByName("A1:C15")
Los dos puntos (:) son usados para especificar un rango de celdas en el documento de hoja de
cálculo. Por ejemplo, A1:C15 representa todas las celdas en las filas 1 a la 15 y las columnas
A, B y C.
La localización de celdas individuales en un rango de celdas puede ser determinado usando el
método getCellByPosition, donde las coordenadas de la celda superior izquierda en el
rango de celdas es (0,0). El siguiente ejemplo usa el método para crear un objeto en la celda
C3.
Este ejemplo usa la primera hoja del documento para crear un ReplaceDescriptor y
luego lo aplica a todas las demás hojas mediante un ciclo.
Dibujos y presentaciones
Este capítulo provee una introducción a la creación y edición controlada por macros de
dibujos. La primera sección describe la estructura de los dibujos, incluyéndo los elementos
básicos que pueden contener los dibujos. La segunda sección hace referencia a funciones de
edición más complejas, como agrupamiento, rotación, y escalado de objetos.
La información acerca de la creación, apertura, y guardado de los documentos de dibujo
puede ser encontrado en el capítulo 5, Trabajando con documentos OpenOffice.org.
Páginas
Las páginas de un documento de dibujo están disponibles por medio de la lista DrawPages.
Puede accesar páginas individuales por medio de su nombre o por medio de su número. Si un
documento tiene una página y es llamada Slide 1, entonces los siguientes ejemplos son
idénticos:
Ejemplo 1
Ejemplo 2
Dim Doc As Object
Dim Page As Object
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages.getByName("Slide 1")
El siguiente ejemplo crea un rectángulo y lo rellena con rojo (valor RGB 255,0,0):
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillColor = RGB(255,0,0)
Page.add(RectangleShape)
Gradiente de colores
Si ajusta la propiedad a FillStyle a GRADIENT, puede aplicar una gradiente de color a
cualquier area de relleno en un documento OpenOffice.org.
Si desea aplicar un color de gradiente predefinido, puede asignar el nombre asociado de la
propiedad FillTransparenceGradientName. Para definir su propio color de
gradiente, necesita completar la estructura com.sun.star.awt.Gradient para
asignarle la propiedad FillGradient. Esta propiedad provee las siguientes opciones:
• Style (Enum) – Tipo de gradiente, por ejemplo, linear o radial (valores por defecto de
acuerdo con com.sun.star.awt.GradientStyle)
• StarColor (Long) – color inicial de la gradiente de colores.
• EndColor (Long) – color final de la gradiente de colores.
• Angle (Short) – ángulo del color de la gradiente de colores.
• XoffSet (Short) – coordenada X en la cual la gradiente de colores inicia, especificada en
centécimas de milímetro.
• YoffSet (Short) – coordenada Y en la cual la gradiente de colores inicia, especificada en
centécimas de milímetro.
• StarIntensity (Short) – Intensidad de StarColor como porcentaje (en OpenOffice.org
Basic, también puede especificar valores mayores que 100 porciento)
• EndIntensity (Short) – Intensidad de EndColor como porcentaje (en OpenOffice.org
Basic, también puede especificar valores mayores que 100 porciento)
• StepCount (Short) – número de graduaciones del color con el cual OpenOffice.org
calcula la gradiente.
El siguiente ejemplo demuestra el uso de las gradientes de colores con la ayuda de la
estructura com.sun.star.awt.Gradient:
Este ejemplo crea una gradiente de color lineal (Style = LINEAR). La gradiente inicia con
rojo (StarColor) en la esquina superior izquierda, y se extiende a un ángulo de 45 grados
(Angle) y verde (EndColor) en la esquina inferior derecha. La intensidad de los colores es
de un 150 porciento. (StarIntensity y EndIntensity) cuyos resultados se ven más
brillantes que los valores especificados en las propiedades StarColor y EndColor. La
gradiente de color es pintada usando una centécimas de graduación de colores individuales
(StepCount).
Sombreado
Para crear un relleno de sombras, la propiedad FillStyle debe ser ajustada a HATCH. El
código de programa para definir sombreado es muy similar al código de gradientes de color.
Contra una estructura auxiliar, en este caso com.sun.star.drawing.Hatch, es usada
para definir la apariencia del sombreado. La estructura del sombreado tiene las siguientes
propiedades:
• Style (Enum) – tipo de sombreado: simple, cuadrado, o cuadrado con diagonales
(valores por defecto en com.sun.star.awt.HatchStyle)
• Color (Long) – color de las líneas.
• Distancia (long) – distancia entre las líneas en centécimas de milímetro.
• Angle (Short) – ángulo del sombreado en décimas de grado.
El siguiente ejemplo demuestra el uso de la estructura del sombreado:
Este código crea una estructura simple de sombreado (HatchStyle = SINGLE) cuyas
líneas son rotadas 45 grados (Angle). Las líneas son gris oscuro (Color) y tienen un
espacio de 0.2 milímetros (Distance) entre ellas.
Mapas de bits
Para usar un mapa de bits como relleno, debe ajustar la propiedad FillStyle a BITMAP.
Si el mapa de bits ya está disponible en OpenOffice.org, sólo necesitará especificar su
nombre en la propiedad FillBitMapName y su estilo de desplegado (simple, mosaico o
alargado) en la propiedad FillBitmapMode (valores por defecto de acuerdo con
com.sun.star.drawing.BitmapMode)
Si desea usar un mapa de bits externo, puede especificar su URL en la propiedad
FillBitmapURL.
El siguiente ejemplo crea un rectángulo y hace un mosaico del mapa de bits "Sky" disponible
en OpenOffice.org para rellenar el area del rectángulo.
Transparencia
Puede ajustar la transparencia que desea aplicar como relleno. La forma más simple para
cambiar la transparencia de un elemento de dibujo es usar la propiedad
FillTransparence.
El siguiente ejemplo crea un rectángulo rojo con una transparencia del 50 porciento.
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillTransparence = 50
RectangleShape.FillColor = RGB(255,0,0)
Page.add(RectangleShape)
provee son:
• LineStyle (Enum) – tipo de línea (los valores por defecto en
com.sun.star.drawing.LineStyle)
• LineColor (Long) – color de la línea.
• LineTransparence (Short) – transparencia de la línea.
• LineWidth (Long) – ancho de la línea en centécimas de milímetro.
• LineJoint (enum) – transición a los puntos de conexión (valores de defecto con
com.sun.star.drawing.LineJoint)
El siguiente ejemplo crea un rectángulo con un borde sólido (LineStyle = SOLID) que
tiene 5 milímetros de ancho (LineWidth) y un 50 porciento de transparencia. Los bordes
derecho e izquierdo de la línea extienden sus puntos para intersercar con la otra
(LineJoint = MITER) para formar un ángulo derecho.
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
RectangleShape.LineColor = RGB(128,128,128)
RectangleShape.LineTransparence = 50
RectangleShape.LineWidth = 500
RectangleShape.LineJoint = com.sun.star.drawing.LineJoint.MITER
RectangleShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID
Page.Add(RRectangleShape)
Este código usa la propiedad String del rectángulo para insertar el texto y las propiedades
CharWeight y CharFontName del servicio
com.sun.star.style.CharacterProperties para formatear la fuente del texto.
El texto solamente puede ser insertado después de que el objeto de dibuja ha sido agregado a
la página. También puede usar el servicio com.sun.star.drawing.Text para posicionar y
formatear el texto en el objeto de dibujo. Los siguientes son solo las propiedades más
importantes de este servicio:
• TextAutoGrowHeight (Boolean) – adapta el alto del elemento de dibujo al texto que
contenga.
• TextAutoGrowWidth (Boolean) – adapta el ancho del elemento de dibujo al texto que
contenga.
• TextHorizontalAdjust (Enum) – posición horizontal del texto dentro del elemento
de dibujo. (Valores de acuerdo con
com.sun.star.drawing.TextHorizontalAdjust)
• TextVerticalAdjust (Enum) – posición vertical del texto dentro del elemento de
dibujo (valores de acuerdo con com.sun.star.drawing.TextVerticalAdjust)
• TextLeftDistance (Long) – distancia izquierda entre el elemento de dibujo y el
texto dentro en centécimas de milímetro.
• TextRightDistance (Long) – distancia derecha entre el elemento de dibujo y el
texto dentro en centécimas de milímetro.
• TextUpperDistance (Long) – distancia superior entre el elemento de dibujo y el
texto dentro en centécimas de milímetro.
• TextLowerDistance (Long) – distancia inferior entre el elemento de dibujo y el
texto dentro en centécimas de milímetro.
El siguiente ejemplo demuestra el uso de las propiedades anteriores.
Este código inserta un elemento de dibujo en una página y luego agrega el texto en la esquina
superior izquierda del objeto de dibujo usando las propiedades TextVerticalAdjust y
TextHorizontalAdjust. La mínima distancia entre el borde del texto del objeto de
dibujo está ajustada a tres milímetros.
Propiedades de las sombras
Puede agregar sombras a la mayoría de los objetos de dibujo con el servicio
com.sun.star.drawing.ShadowProperties. Las propiedades de este servicio
son:
• Shadow (Boolean) – Activa la sombra
• ShadowColor (Long) – Color de la sombra.
• ShadowTransparence (Short) – Transparencia de la sombra.
• ShadowXDistance (Long) – Distancia vertical de la sombra del objeto de dibujo en
centécimas de milímetro.
• ShadowYDistance (Long) – Distancia horizontal de la sombra del objeto de dibujo en
centécimas de milímetro.
El siguiente ejemplo crea un rectángulo con una sombra con una configuración vertical y
horizontal desde un restángulo de 2 milímetros. La sombra es renderizada en gris oscuro a un
50 porciento de transparencia-
Líneas
OpenOffice.org Provee el servicio com.sun.star.drawing.LineShape para los
objetos de líneas. Los objetos de líneas soportan todos los servicios generales de formateado
con excepción de los de áreas. Los siguientes son todas las propiedades que están asociadas
con el servicio LineShape:
• Propiedades de líneas com.sun.star.drawing.LineProperties
• Propiedades de texto com.sun.star.drawing.Text (con
com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties)
Figuras de polígono
OpenOffice.org También soporta figuras de polígonos complejos por medio del servicio
com.sun.star.drawing.PolyPolygonShape. Estrictamente hablando, un objeto
PolyPolygon no es un simple polígono, sino un polígono múltiple. Algunas listas
independientes contienen los puntos de las esquinas que pueden ser especificados y
combinados para formar un objeto completo.
Como las figuras rectangulares, todas las propiedades de formato de los objetos de dibujo
también están provistas para los polypolygons:
• Propiedades de relleno com.sun.star.drawing.FillProperties
• Propiedades de líneas com.sun.star.drawing.LineProperties
• Propiedades de texto com.sun.star.drawing.Text (con
com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties)
• Propiedades de sombras com.sun.star.drawing.ShadowProperties
El servicio PolyPolygonShape también tiene una propiedad que permite definir las
coordenadas del polígono:
• PolyPolygon (Array) una matriz que contiene las coordenadas del polígono. (doble
matriz con los puntos del tipo com.sun.star.awt.Point)
El siguiente ejemplo muestra como puede definir un triángulo con el servicio
PolyPolygonShape.
Desde que los puntos de un polígono son definidos como valores absolutos, necesita
especificar el tamaño de la posición inicial del polígono. En cambio, necesita crear una
matriz de los puntos, empacar esta matriz en una segunda matriz (usando la llamada (Array
(Coordinates), y luego asignar esta matriz al polígono. Después de que la llamada
correspondiente es hecha, el polígono puede ser insertado en el documento.
Esta matriz doble en la definición permite la creación de formas complejas al combinar
algunos polígonos. Por ejemplo, puede crear un rectángulo e insertar otro rectángulo adentro
para crear un hueco en el rectángulo original:
Con respecto a cuales areas son rellenas y cuales areas son huecos, OpenOffice.org aplica
una regla simple:
El límite de la figura de afuera es siempre el borde exterior del polígono. La siguiente línea
interior es el borde interior de la figura y marca la transición del primer hueco. Si hay otra
línea adentro, marca la transición del area de relleno.
Los últimos elementos de dibujo presentados aquí son objetos gráficos basados en el servicio
com.sun.star.drawing.GraphicObjectShape. Este puede ser usado con
cualquier gráfico dentro de OpenOffice.org cuya apariencia puede ser adaptada usando un
amplio rango de propiedades.
Los objetos gráficos soportan dos de las propiedades generales de formateo:
• Propiedades de Texto com.sun.star.drawing.Text (con
com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties)
• Propiedades de sombras com.sun.star.drawing.ShadowProperties
Propiedades adicionales que son soportadas por los objetos gráficos son:
Este código inserta el gráfico test.jpg y adapta su apariencia usando las propiedades de
Adjust. En este ejemplo, los gráfico son decolorados como un 40 porciento con ningún otra
conversión de colores. No toma lugar (GraphicColorMode = STANDARD).
Agrupando objetos
En muchas situación, es útil agrupar varios objetos de dibujo individuales juntos de manera
que se comporten como un sólo gran objeto.
El siguiente combina dos objetos de dibujo:
Dim Doc As Object
Dim Page As Object
Dim Square As Object
Dim Circle As Object
Dim Shapes As Object
Dim Group As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim NewPos As New com.sun.star.awt.Point
Dim Height As Long
Dim Width As Long
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
Point.x = 3000
Point.y = 3000
Size.Width = 3000
Size.Height = 3000
' Crea un elemento de dibujo cuadrado
Square = Doc.createInstance("com.sun.star.drawing.RectangleShape")
Square.Size = Size
Square.Position = Point
Square.FillColor = RGB(255,128,128)
Page.add(Square)
' Crea un elemento de dibujo circular
Circle = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Circle.Size = Size
Circle.Position = Point
Circle.FillColor = RGB(255,128,128)
Circle.FillColor = RGB(0,255,0)
Page.add(Circle)
' Combina los elementos de dibujo cuadrado y círculo
Shapes = createUnoService("com.sun.star.drawing.ShapeCollection")
Shapes.add(Square)
Shapes.add(Circle)
Group = Page.group(Shapes)
' Centra los elementos de dibujo combinados
Height = Page.Height
Width = Page.Width
NewPos.X = Width / 2
NewPos.Y = Height / 2
Height = Group.Size.Height
Width = Group.Size.Width
NewPos.X = NewPos.X - Width / 2
NewPos.Y = NewPos.Y - Height / 2
Group.Position = NewPos
Este código crea un rectángulo y un círculo y los inserta dentro de la página. Entonces crea
un objeto que soporte el servicio com.sun.star.drawing.ShapeCollection y usa
el método Add para agregar el rectángulo y el círculo a este objeto. ShapeCollection es
agregado a la página usando el método Group y retorna el objeto Group actual que puede
ser aditado como una fugura individual.
Si desea formatear objetos individuales de un grupo, aplique el formateo antes de agregarlos
al grupo. No puede modificar los objetos una vez que están en el grupo.
El siguiente ejemplo crea el mismo rectángulo como en el ejemplo previo, pero en cambio lo
recorta por el medio 30 grados usando la propiedad ShearAngle:
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
RectangleShape.ShearAngle = 3000
Page.add(RectangleShape)
Búsqueda y reemplazo
Como en los objetos de texto, los documentos de dibujo proveen una función de búsqueda y
reemplazo. Esta función es similar a la usada en los objetos de texto descrita en el capítulo 6,
Documentos de texto.(pág 79) Sin embargo, los documentos de dibujo los objetos
descriptores para búsqueda y reemplazo no son creados directamente por medio del objeto de
documento, sino por medio del nivel de caracteres asociado.
El siguiente ejemplo muestra el proceso de reemplazo dentro de un dibujo:
Dim Doc As Object
Dim Page As Object
Dim ReplaceDescriptor As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
ReplaceDescriptor = Page.createReplaceDescriptor()
ReplaceDescriptor.SearchString = "is"
ReplaceDescriptor.ReplaceString = "was"
For I = 0 to Doc.drawPages.Count – 1
Page = Doc.drawPages(I)
Page.ReplaceAll(ReplaceDescriptor)
Next I
Este código usa la primera página de dibujo del documento para crear el ReplaceDescriptor y
luego aplica este descriptor en un ciclo para todas las páginas del documento de dibujo.
Presentaciones
En OpenOffice.org las presentaciones están basadas en documentos de dibujo. Cada página
de la presentación es una filmina.
Puede accesar filminas de la misma forma en que un dibujo estándar es accesado por medio
de la lista DrawPages de objeto de documento. El servicio
com.sun.star.presentation.PresentationDocument, es el responsable de los documentos de
presentaciones, también provee el servicio completo
com.sun.star.drawing.DrawingDocument.
El código usado en este ejemplo crea un objeto Doc que hace referencia al documento de
presentación actual y establece el objeto de presentación asociado. El método start() del
objeto es usado para iniciar el ejemplo y ejecutar la presentación en pantalla.
Los siguientes métodos son provistos para los objetos de presentación:
OpenOffice.org puede desplegar los datos como un diagrama, lo cual crea vínculos gráficos
entre los datos en forma de barras, gráficos de pastel, líneas y otros elementos. Los datos
pueden ser desplegados como gráficos en 2D o 3D, y la apariencia de los elementos de
diagramas puede ser adaptada individualmente de la misma manera en que se procesan los
elementos de dibujo.
Si los datos están disponibles de la hoja de cálculo, entonces pueden ser vinculados
dinámicamente al diagrama. Cualquier modificación en los datos básicos pueden en esta
instancia ser vistos inmediatamente al diagrama asociado. Este capítulo provee un vistazo de
la interface de programación de los módulos de diagramas de OpenOffice.org enfocados al
uso de diagramas dentro de los documentos de cálculo.
Mientras el código usado en el ejemplo puede aparecer complejo, el proceso central está
limitado a tres líneas: la primera línea central crea la variable Doc, que hace referencia a la
hoja de cálculo actual. (Línea Doc = StarDesktop.CurrentComponent). El código
usado en el ejemplo crea una lista conteniendo todos los diagramas de la primera hoja de
cálculo. (Línea Charts = Doc.Sheets(0).Charts). Finalmente, un nuevo diagrama
es agregado en la última línea de la lista usando el método addNewByName. Este diagrama
nuevo es entonces visible al usuario.
La última línea inicializa las estructuras auxiliares Rect y RangeAddress, las cuales
proveen el método addNewByName provisto como parámetro. Rect determina la posición
del diagrama dentro de la hoja de cálculo. RangeAddress determina el rango de datos que
van a ser vinculados en el diagrama.
El ejemplo previo crea un diagrama de barras. Si un tipo diferente de diagrama es requerido,
entonces el diagrama de barras debe ser explícitamente reemplazado.:
Chart = Charts.getByName("MyChart").embeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")
Fondo
Cada diagrama tiene un area de fondo. Cada area es un objeto, que cual puede ser accesado
usando las siguientes propiedades del objeto de diagrama:
• Area (Object) area de fondo del diagrama (soporta el servicio
com.sun.star.chart.ChartArea).
El fondo del diagrama cubre toda su area, incluyéndo el area bajo el título, sub-título y llave
del diagrama. El servicio asociado com.sun.star.chart.ChartArea soporta la
propiedades línea y relleno y provee más propiedades.
Paredes y pisos del diagrama
Mientras el fondo del diagrama cubre toda el area del diagrama, la pared de fondo del
diagrama está limitada al area directamente detrás del area de datos.
Dos paredes de diagramas normalmente existen en los diagramas 3D: uno detrás del area de
datos y uno como la demarcación izquierda para el eje de las Y. Los diagramas 3D
normalmente también tienen un piso.
• Floor (Object) piso del panel del diagrama (sólo para diagramas de 3D, soportan el
servicio com.sun.star.chart.ChartArea).
• Wall (Object) paredes del diagrama (sólo para diagramas 3D, soportan el servicio
com.sun.star.chart.ChartArea).
Los objetos específicos soportan el servicio com.sun.star.chart.ChartArea, los
cuales en cambio proveen las propiedades comunes de relleno y línea (servicios
com.sun.star.drawing.FillProperties y
com.sun.star.drawing.LineStyle, refiérase al capítulo 7 pág 126).
Las paredes y piso del diagrama son accesados por medio del objeto Chart, los cuales en
cambio es parte del objeto Chart:
Chart.Area.FillBitmapName = "Sky"
El siguiente ejemplo muestra como los gráficos (llamado Sky) puede ser contenido en
OpenOffice.org puede ser usado como fondo de un diagrama
Dim Doc As Object
Dim Charts As Object
Dim Chart as Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = 0
RangeAddress(0).StartColumn = 0
RangeAddress(0).StartRow = 0
RangeAddress(0).EndColumn = 2
RangeAddress(0).EndRow = 12
Doc = StarDesktop.CurrentComponent
Charts = Doc.Sheets(0).Charts
Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart").EmbeddedObject
Chart.Area.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
Chart.Area.FillBitmapName = "Sky"
Chart.Area.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT
Ejes
OpenOffice.org reconoce cinco diferentes ejes que pueden ser usados en un diagrama. El el
escenario más simple, estos son los ejes de las X y de las Y. Cuando se trabaja con diagramas
3D, algunas veces también es provisto un eje de las Z.
Para diagramas en los cuales los valores de varios renglones de datos derivan unos de otros,
OpenOffice.org provee un segundo eje de las X y eje de las Y para operaciones de escalado.
Primeros ejes de las X, Y y Z
Adicionalmente al eje actual, para cada uno de los primeros ejes de las X, Y y Z, hay también
un título, una descripción, una rejilla y una rejilla auxiliar. Hay opciones para desplegar y
conciliar todos estos elementos. El objeto de diagrama provee las siguientes propiedades para
administrar estas características
(Tomando el ejemplo del eje de las X; las propiedades para los ejes de las Y y las Z están
estructurados de la misma forma):
• HasXAxis (Boolean) activa el eje de las X.
• XAxis (Object) objeto con información detallada acerca del eje de las X. (soporta el
servicio com.sun.star.chart.ChartAxis).
primarias de un eje.
• AutoStepHelp (Boolean) – automáticamente determina la distancia entre las líneas
secundarias de los ejes.
• Logarithmic (Boolean) – escalas de los ejes de manera logarítmica (en lugar de la
manera lineal).
• DisplayLabels (Boolean) – activa las etiquetas de texto para los ejes.
• TextRotation (Long) – ángulo de rotación para las etiquetas de texto en centécimas de
grado.
• Marks (Const) – constante que especifica cuales de las líneas primarias de los ejes deben
estar dentro o fuera del area de diagrama (valores por defecto de acuerdo con
com.sun.star.chart.ChartAxisMarks)
• HelpMarks (Const) – constante que especifica cuales de las líneas secundarias de los
ejes deben estar dentro y/o fuera del area del diagrama (valores por defecto de acuerdo con
com.sun.star.chart.ChartAxisMarks)
• Overlap (Long) – porcentaje que especifica la extención en las cuales las barras de los
diferentes conjuntos de datos pueden ser sobrepuestos (al 100%, las barras son mostradas
completamente sobrepuestas, al -100%, hay una distancia de la mitad de una barra entre
ellas).
• GapWidth (long) – porcentaje que especifica la distancia que puede haber entre entre los
diferentes grupos de barras de un diagrama (al 100%, hay una distancia correspondiente a
la mitad de una barra).
• ArrangeOrder (enum) – detalles de la posición de la inscripción; adicionalmente a la
posición de una línea, también está la opción de dividir la etiqueta alternativamente sobre
dos líneas (valores por defecto de acuerdo con
com.sun.star.chart.ChartAxisArrangeOrderType)
• TextBreak (Boolean) – permite saltos de línea.
• TextCanOverlap (Boolean) – permite que el texto se sobreponga.
• NumberFormat (Long) – formato de números (refiérase al capítulo 7, en la sección
formato de números, fecha y texto, pág 105)
Propiedades de los ejes de las rejillas
El objeto para el eje de las rejilas está basado en el servicio com.sun.star.chart.ChartGrid el
cual, a su vez soporta las propiedades de línea del servicio
com.sun.star.drawing.LineStyle (Refiérase al capítulo 7 pag 126).
Propiedades del título del eje
Los objetos para el formateo del título del eje están basados en el servicio
com.sun.star.chart.ChartTitle, el cual también es usado para los títulos de los
diagramas.
Ejemplo
El siguiente ejemplo crea un diagrama de línea. El color para la pared de fondo del diagrama
es puesto a blanco. Ambos ejes X y Y tienen una rejilla auxiliar gris para la orientación
visual. Elvalor mínimo para el eje-Y está fijado en y el valor máximo está fijado en 100 de
manera que la resolución del diagrama es retenida, aún si los valores son cambiados.
Dim Doc As Object
Dim Charts As Object
Dim Chart as Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress
Doc = StarDesktop.CurrentComponent
Charts = Doc.Sheets(0).Charts
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = 0
RangeAddress(0).StartColumn = 0
RangeAddress(0).StartRow = 0
RangeAddress(0).EndColumn = 2
RangeAddress(0).EndRow = 12
Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart").embeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")
Chart.Diagram.Wall.FillColor = RGB(255, 255, 255)
Chart.Diagram.HasXAxisGrid = True
Chart.Diagram.XMainGrid.LineColor = RGB(192, 192, 192)
Chart.Diagram.HasYAxisGrid = True
Chart.Diagram.YMainGrid.LineColor = RGB(192, 192, 192)
Chart.Diagram.YAxis.Min = 0
Chart.Diagram.YAxis.Max = 100
Diagramas 3D
Muchos diagramas en OpenOffice.org pueden ser desplegados con gráficos 3D. Todos los
tipos de diagramas que proveen esta opción soportan el servicio
com.sun.star.chart.Dim3DDiagram. El servicio provee solamente una propiedad:
• Dim3D (Boolean) activa el desplegado en 3D.
Diagramas en pila
Los diagramas en pila son diagramas que son arreglados con varios valores individuales uno
sobre el otro para producir un valor total. Esta vista muestra no solamente los valores
individuales, sino también un vistazo de todos los valores.
En OpenOffice.org, varios tipos de de diagramas pueden ser desplegados en forma de pila.
Todos estos diagramas soportan el servicio com.sun.star.chart.StackableDiagram, el cual a su
vez provee las siguientes propiedades:
• Stacked (Boolean) activa la vista en pila.
• Percent (Boolean) en lugar de los valores absolutos, despliega su distribución en
porcentajes.
Tipos de diagramas
Diagramas de líneas
Los diagramas de líneas (servicio com.sun.star.chart.LineDiagram) soportan un
eje-X, dos ejes-Y y un eje-Z. Pueden ser desplegados como gráficos 2D o 3D (servicio
com.sun.star.chart.Dim3Ddiagram). Las líneas pueden ser apiladas
(com.sun.star.chart.StackableDiagram).
Los diagramas de líneas proveen las siguientes propiedades:
• SymbolType (const) – símbolo para desplegar los puntos de datos(constantes de acuerdo
con com.sun.star.chart.ChartSymbolType).
• SymbolSize (Long) – tamaño del símbolo para desplegado de los puntos de datos en
centécimas de milímetro.
• SymbolBitmapURL (String) – nombre del archivo gráfico para el desplegado de los
puntos de datos.
• Lines (Boolean) – vínculos de los puntos de datos por significado de las líneas.
• SplineType (Long) – función spline para el emparejado de líneas (0: sin la función, 1:
splines cúbicas, 2: splines B).
• SplineOrder (Long) – ancho polinomial para las splines (solamente para splines B).
• SplineResolution (Long) – número soportado de puntos para el cálculo de las spline
Diagramas de área
Los diagramas de área (servicio com.sun.star.chart.AreaDiagram) soportan un
eje-X, dos ejes-Y y un eje-Z. Pueden ser desplegados como gráficos en 2D y 3D. (servicio
com.sun.star.chart.Dim3Ddiagram). Las areas pueden ser apiladas
(com.sun.star.chart.StackableDiagram).
Diagramas de barras
Los diagramas de barras (servicio com.sun.star.chart.BarDiagram) soportan un
eje-X, dos ejes-Y, y un eje-Z . Pueden ser desplegados como gráficos en 2D y 3D. (servicio
com.sun.star.chart.Dim3Ddiagram). Las barras pueden ser apiladas
(com.sun.star.chart.StackableDiagram).
Proveen las siguientes propiedades:
• Vertical (Boolean) despliega las barras verticalmente, en otro caso son desplegadas
horizontalmente.
• Deep (Boolean) – en la vista 3D, posiciones de las barras detrás una de la otra en lugar de
una junto a la otra.
• StackedBarsConnected (Boolean) – vínculos asociados a las barras en los
diagramas apilados por el significado de las líneas (disponible solamente con diagramas
de carta horizontales).
• NumberOfLines (Long) – número de líneas para ser desplegadas en un diagrama
apilado como líneas en lugar de barras.
Diagramas de pastel
Los diagramas de pastel (servicio com.sun.star.chart.PieDiagram) no contienen
ejes y no pueden ser apilados. Pueden ser desplegados como gráficos 2D o 3D. (servicio
com.sun.star.chart.Dim3Ddiagram).
OpenOffice.org Tiene una interface a base de datos integrada (independiente de cualquier
sistema) llamada Star Database Connectivity (SDBC). El objetivo del desarrollo de esta
interface es proveer el acceso a tantas fuentes de datos como sea posible.
Para hacer esto posible, las fuentes de datos son accesadas por medio de controladores. Las
fuentes por medio de la cual estos controladores toman sus datos, es irrelevante para el
usuario SDBC. Algunos controladores accesan bases de datos basadas en archivos y toman
sus datos directamente de estas. Otros usan interfaces estándar como JDBC o ODBC. Estas,
sin embargo, tienen controladores especiales por medio de los cuales pueden accesar la
libreta de direcciones MAPI, directorios LDAP o hojas de cálculo OpenOffice.org como
fuentes de datos.
Desde que los controladores están basados en componentes UNO, otros controladores pueden
ser desarrollados y por lo tanto abrir nuevas fuentes de datos. Puede encontrar detalles de
esto en la "StarOffice Developer's Guide".
En términos de su concepto, SDBC es comparable con las librerias de ADO y DAO en VBA.
Permite un alto nivel de acceso a bases de datos, independientemente de la base de datos
existente en la capa final (backend5).
La interface de OpenOffice.org ha crecido desde el lanzamiento de StarOffice 6.0. Mientras
en el pasado, las bases de datos fueron principalmente accesadas usando un amplio rango de
método del objeto application, la interface en OpenOffice.org lo subdivide en varios objetos.
Un DatabaseContext es usado como el objeto raíz para las funciones de bases de datos.
5 N.T. Es sumamente dificil traducir el concepto de "backend" al español. Por eso incluí el término en inglés para
dar mayor "claridad" al texto. Backend es un término standard de multicapas (n-Tier), que indica la aplicación o la
base de datos que subyace o existe por detrás de la aplicación del usuario ("frontend")
Fuentes de datos
Una base de datos es incorporada a OpenOffice.org mediante su creación comúnmente
referida a la fuente de datos. La interface de usuario provee una opción correspondiente para
la creación de fuentes de datos en el menu Extras. Sin embargo, también puede crear fuentes
de datos y trabajar con las mismas usando OpenOffice.org Basic.
Un contexto de objeto que es creado usando la función createUnoService sirve como el
punto de inicio para el acceso a las fuentes de datos. Esto esta basado en el servicio
com.sun.star.sdb.DatabaseContext que es el objeto raíz para todas las
operaciones de bases de datos.
El siguiente ejemplo muestra como un contexto de base de datos puede ser creado y usando
para determinar los nombres de todas las fuentes de datos disponibles. Despliega los nombres
de un cuadro de mensaje.
El ejemplo crea un objeto DataSource para una fuente de datos llamada "Customers".
Las fuentes de datos proveen un rango de propiedades, los cuales proveen información
general acerca del origen de los datos e información acerca de los métodos de acceso. Las
propiedades son:
• Name (String) nombre de la fuente de datos.
• URL (String) URL de datos en el formulario jdbc: subprotocol : subnombre o sdbc:
subprotocol : subnombre.
• Info (Array) matriz que contiene los pares de valores de propiedades con los parametros
de conexión (usualmente al menos el nombre de usuario y la contraseña).
• User (String) nombre de usuario.
• Password (String) contraseña del usuario (no se guarda).
• IsPasswordRequired (Boolean) la contraseña es necesaria y preguntada
interactivamente al usuario.
• IsReadOnly (Boolean) permite acceso de sólo lectura a la base de datos.
• NumberFormatsSupplier (Object) objeto que contiene el número de formatos
disponibles para la base de datos (soporta la interface
com.sun.star.util.XNumberFormatsSupplier, refierase al capítulo 7,
sección número, fecha y formato de texto).
• TableFilter (Array) lista de los nombres de las tablas a desplegar.
• TableTypeFilter (Array) lista de los tipos de tablas a ser deplegados. Los valores
disponibles son TABLE, VIEW y SYSTEM TABLE.
• SuppressVersionColumns (Boolean) – suprime el desplegado de las comunas que
son usadas para la administración de versiones.
Las fuentes de datos de OpenOffice.org no son comparables 1:1 con las fuentes de datos en
ODBC. Mientras una fuente de datos ODBC solamente cubre información acerca del origen
de los datos, una fuente de datos en OpenOffice.org también incluye un rango de información
acerca de cómo los datos son desplegados dentro de la base de datos en las ventanas de base
de datos dentro de OpenOffice.org.
Consultas
Consultas predefinidas pueden ser asignadas a las fuentes de datos. OpenOffice.org Nota que
los comandos SQL de las consultas están disponibles todo el tiempo. Las consultas son
usadas para simplificar el trabajo con las bases de datos, porque pueden ser abiertas con un
simple click de mouse y también provee a los usuarios sin ningún conocimiento de SQL la
opción de mentener comandos SQL.
Un objeto que soporta el servicio com.sun.star.sdb.QueryDefinition está
conciliado detrás de una consulta. Las consultas son accesadas por significado de el método
QueryDefinitions de la fuente de datos.
El siguiente ejemplo lista los nombres de las consultas de las fuentes de datos que pueden ser
establecidas en un cuadro de mensaje.
Dim DatabaseContext As Object
Dim DataSource As Object
Dim QueryDefinitions As Object
Dim QueryDefinition As Object
Dim I As Integer
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
QueryDefinitions = DataSource.getQueryDefinitions()
For I = 0 To QueryDefinitions.Count() - 1
QueryDefinition = QueryDefinitions(I)
MsgBox QueryDefinition.Name
Next I
El código usado en el ejemplo primero verifica si la base de datos está protegida con
contraseña. Si no, crea la conexión a la base de datos requerida usando la llamada
GetConnection call. Las dos cadenas vacías en la línea de comandos son para el nombre de
usuario y la contraseña.
Si la base de datos está protegida por contraseña, el ejemplo crea un
InteractionHandler y abre la base de datos usando el método
ConnectWithCompletion method. El InteractionHandler se asegura que
OpenOffice.org pregunte al usuario los datos necesarios para accesar la base de datos.
• getBoolean() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getString() soporta todos los tipos de datos SQL.
• getBytes() soporta los tipos de datos para valores binarios.
• getDate() soporta los tipos de datos SQL para números, cadenas, fecha y hora.
• getTime() soporta los tipos de datos SQL para números, cadenas, fecha y hora.
• getTimestamp() soporta los tipos de datos SQL para números, cadenas, fecha y hora.
• getCharacterStream() soporta los tipos de datos SQL para números, cadenas y
valores binarios.
• getUnicodeStream() soporta los tipos de datos SQL para números, cadenas y valores
bianrios.
• getBinaryStream() valores binarios.
• getObject() soporta todos los tipos de datos.
En todas las instancias, el número de columnas debe ser listado como un parámetro para
aquellos valores que deben ser consultados.
El objeto ResultSet provee métodos Update para modificar valores, los cuales están
estructurados de la misma manera que los métodos de acceso para abstraer valores. El
método updateString, for example, permite que una cadena sea escrita.
Antes de la modoficación, los valores deben ser transferidos a la base de datos usando el
método updateRow(). La llamada debe tener lugar antes de los comandos de navegación,
porque si no los valores se perderán.
Si ocurre un error durante las modificaciones, este puede ser reversado usando el método
cancelRowUpdates(). Esta llamada solamente está disponible mientras los datos no
sean reescritos en la base de datos usando updateRow().
Puede agregar ventanas de diálogos y formularios personalizados a los documentos de
OpenOffice.org. Estos pueden ser vinculados a las macros de OpenOffice.org Basic para
extender el rango de uso del OpenOffice.org Basic.
Los diálogos pueden, por ejemplo, desplegar información de una base de datos, o guiar a los
usuarios por un proceso paso a paso para la creación de un documento nuevo en la forma de
un autopiloto.
Creando diálogos
Puede crear y estructurar diálogos usando el editor de diálogos de OpenOffice.org y usarlo de
la misma manera en que usa OpenOffice.org Draw:
Esencialmente, puede arrastrar los controles que desea de la paleta de diseño (derecha) dentro
del area de diálogo donde puede definir su posición y tamaño.
Este ejemplo muestra un dialogo que contiene una etiqueta y un cuadro de lista.
Puede abrir un diálogo usando el siguiente código
Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Dlg.dispose()
Cerrando diálogos
Cerrando con Aceptar o cancelar
Este código define el objeto para el elemento de control "MyButton" y luego inicializa la
variable de objeto "Ctl" con la referencia al elemento. Finalmente, el código ajusta la
propiedad Label para el elemento de control con el valor de "New Label".
Notese que OpenOffice.org Basic distingue entre los caracteres en mayúsculas y minúsculas
para los nombres de los elementos de control.
Este ejemplo desactiva el botón cmdNtext en el diálogo Dlg con la ayuda del objeto model de
cmdNtext.
Propiedades
Nombre y título
Cada elemento de control tiene su propio nombre que puede ser consultado usando la
siguiente propiedad model:
Model.Name (String) nombre del elemento de control
Puede especificar el título que aparece en la barra de título de un diálogo con la siguiente
propiedad model:
• Model.Title (String) título del diálogo (aplica solamente a los diálogos).
Posición y tamaño
Puede consultar el tamaño y la posición de un elemento de control usando las siguientes
propiedades del objeto model:
• Model.Height (long) Alto del elemento de control (en unidades de ma)
• Model.Width (long) Ancho del elemento de control (en unidades de ma)
• Model.PositionX (long) Posición X del elemento de control, medido desde el borde
interior izquierdo del cuadro de diálogo (en unidades de ma)
• Model.PositionY (long) Posición Y del elemento de control, medido desde el borde
interior superior del cuadro de diálogo (en unidades de ma)
Para asegurar la independencia de la plataforma en la apariencia de los diálogos,
OpenOffice.org usa la medida interna Map AppFont (ma) para especificar la posición y
tamaño dentro de los diálogos. Una unidad ma está difinida como un octavo del alto
promedio de un carácter del sistema de fuentes definido en el sistema operativo y un cuarto
de su ancho. Mediante el uso de las unidades ma, OpenOffice.org asegura que un diálogo se
vea de la misma forma en los diferentes sistemas operativos, bajo diferentes configuraciones
de sistema.
Si desea cambiar el tamaño o la posición de los elementos de control en tiempo de ejecución,
determine el tamaño total del diálogo y ajuste los valores para el elemento de control de
acuerdo al radio de las partes.
La unidad Map AppFont (ma) reemplaza la unidad Twips archivada par una mejor
independencia de la plataforma.
Diálogos de multi-página
Un diálogo en OpenOffice.org puede tener una o más páginas. La propiedad Step de un
diálogo define la página actual del diálogo mientras la propiedad Step para el elemento de
control especifica la página en la cual los elementos de control van a ser desplegados.
El valor 0 en Step es un caso especial. Si ajusta este valor a cero en un diálogo, todos los
elementos de control son visibles independientemente de su valor Step. De manera similar,
si ajusta este valor a cero para un elemento de control, el elemento será desplegado en todas
las páginas en el diálgo.
En el ejemplo precedente, puede también asignar el valor 0 al Step para la línea divisoria y
para los botones "Cancel", "Prev", "Next", y "Done" para desplegar estos elementos en todas
las páginas. También puede asignar los elementos a una página individual (por ejemplo la
página 1).
El siguiente código de programa muestra como el valor Step en los manejadores de eventos
de los botones "Next" y "Prev" pueden ser incrementados y reducidos y cambiar el estado de
los botones.
Sub cmdNext_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = Not cmdPrev.Model.Enabled
cmdNext.Model.Enabled = False
Dlg.Model.Step = Dlg.Model.Step + 1
End Sub
Sub cmdPrev_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = False
cmdNext.Model.Enabled = True
Dlg.Model.Step = Dlg.Model.Step – 1
End Sub
Una variable global Dlg que hace referencia al diálogo abierto debe ser incluida para hacer
este ejemplo posible. El diálogo cambia su apariencia como sigue:
Página 1:
Página 2:
Eventos
Los diálogos y formularios de OpenOffice.org están basados en un modelo de programación
orientada a eventos donde puede asignar controladores de eventos a los elementos de control.
Un controlador de evento ejecuta un procedimiento predefinido cuando ocurre una acción
particular, aun cuando la acción es otro evento. Se pueden editar documentos o abrir bases de
datos con el control de eventos y también accesar otros elementos de control.
Los elementos de control de OpenOffice.org reconocen diferentes tipos de eventos que
pueden ser disparados en diferentes situaciones. Estos tipos de eventos pueden ser divididos
en cuatro grupos:
Control del Mouse: Eventos que corresponden a acciones del mouse (por ejemplo, simples
movimientos del mouse o un click en un lugar específico de la pantalla)
Control de teclado: Eventos que son disparados por golpes de teclas.
Modificación del Foco: Eventos que OpenOffice.org realiza cuando los elementos de control
son activados o desactivados.
Eventos específicos de los controles: Eventos que solamente ocurren en relación con ciertos
elementos de control.
Cuando trabaja con eventos, asegurese crear el diálogo asociado en el ambiente de desarrollo
de OpenOffice.org y que contenga los elementos de control requeridos o documentos (si sus
eventos son aplicados a un formulario).
La figura anterior muestra el ambiente de desarrollo con una ventana de diálogo que contiene
dos cuadros de listas. Puede mover datos de una lista a otra lista usando los botones entre los
dos cuadros de listas.
Si desea desplegar el formato en pantalla, entonces debe crear los procedimientos asociados
con OpenOffice.org Basic de manera que puedan ser llamados por los controladores de
eventos. Aun cuando pueda usar estos procedimientos en cualquier módulo, lo mejor es
limitar su uso a dos módulos. Para hacer su código más fácil de leer, asigne nombres con
significado a los procedimientos. Saltar directamente a un procedimiento de programa
general desde una macro puede tener como resultado un código no muy claro. En cambio,
para simplificar el mantenimiento del código y la resolución de problemas, debe crear otro
procedimiento que sirva como punto de entrada al manejador de eventos – aun cuando
solamente ejecute una simple llamada al procedimiento destino.
El siguiente código muestra un ejemplo de movimiento de una entrada de izquierda a derecha
en un cuadro de lista de un diálogo:
Sub cmdSelect_Initiated
Dim objList As Object
lstEntries = Dlg.getControl("lstEntries")
lstSelection = Dlg.getControl("lstSelection")
If lstEntries.SelectedItem > 0 Then
lstSelection.AddItem(lstEntries.SelectedItem, 0)
lstEntries.removeItems(lstEntries.SelectedItemPos, 1)
Else
Beep
End If
End Sub
Parámetros
La ocurrencia de un evento particular no es siempre suficiente para una respuesta apropiada.
Se puede requerir información adicional. Por ejemplo, para procesar un click de mouse,
puede necesitar la posición en la pantalla donde el botón del mouse fue presionado.
En OpenOffice.org Basic, puede usar los parámetros del objeto para proveer más
información acerca de un evento a un procedimiento, por ejemplo:
La ocurrencia con la cual el objeto Event está estructurado depende del tipo de evento del
cual el procedimiento puede disparar llamadas. Las siguientes secciones describen los tipos
de eventos en detalle.
Independientemente del tipo de evento, todos los objetos proveen acceso a elementos de
control importantes y sus modelos. El elemento de control puede ser accesado usando
Event.Source y su modelo usando Event.Source.Model
Puede usar estas propiedades para dispara eventos dentro de un controlador de eventos.
Los eventos de VBA Click y Doubleclick no están disponibles en OpenOffice.org Basic. En su lugar debe
usar el evento de OpenOffice.org Basic MouseUp para el evento click e imite el evento Doubleclick
cambiando la lógica de la aplicación.
Más información sobre las constantes de las teclas puede ser encontrado en la Referencia a la
API bajo el grupo de constantes de com.sun.star.awt.Key.
Eventos de foco
Los eventos de foco indican si un control recibe o pierde el foco. Puede usar estos eventos
para, por ejemplo, determinar si un usuario finaliza un proceso en un elemento de control de
manera que se puedan actualizar otros elementos del diálogo. Los siguientes eventos de foco
están disponibles:
• When receiving focus El elemento recibe el foco
• When losing focus El elemento pierde el foco
Los objetos Event para el foco están estructurados de la siguiente manera:
• FocusFlags (short) causa del cambio del foco (Los valores por defecto de acuerdo con
com.sun.star.awt.FocusChangeReason).
• NextFocus (Object) el objeto que recibe el foco (solamente para el evento "When
losing focus" -el elemento pierde el foco-)
• Temporary (Boolean) se pierde el foco de manera temporal.
Grupos de campos
Barras de progreso
Líneas divisorias (horizontal y vertical)
Gráficos
Campos de selección de archivos
Los elementos de control más importantes son presentados a continuación:
Botones (buttom)
Un botón realiza una acción cuando se hace click en él.
El escenario más simple para el botón es disparar un evento "When Initiating" cuando el
usuario le da click. Puede vincular otras acciones al botón para abrir un diálogo usando la
propiedad PushButtonType. Cuando hace click en un botón en el que esta propiedad ha
sido puesta en el valor de 0, el diálogo no se afecta. Cuando hace click en un botón en el que
esta propiedad ha sido puesta en el valor de 1, el diálogo es cerrado y el método Execute
del diálogo retorna el valor de 1. (la secuencia del diálogo ha terminado correctamente).
Si el "PushButtonType" tiene el valor de 2, el diálogo es cerrado y el método Execute
del diálogo retorna el valor de 0 (diálogo cerrado).
Las siguientes son todas las propiedades que están disponibles mediante el modelo del botón:
• Model.BackgroundColor (long) color de fondo
• Model.DefaultButton (Boolean) el botón es usado como el valor por defecto y
responde a la tecla enter y no tiene foco.
• Model.FontDescriptor (struct) estructura que especifica los detalles de la fuente
que va a ser usada (de acuerdo con la estructura com.sun.star.awt.FontDescriptor)
• Model.Label (String) etiqueta que está desplegada en el botón
• Model.Printable (Boolean) el elemento de control puede ser impreso
• Model.TextColor (Long) color del texto del elemento de control
• Model.HelpText (String) texto de ayuda es que desplegado cuando se mueve el
mouse sobre el elemento de control
• Model.HelpURL (String) URL de la ayuda en línea para el elemento de control
correspondiente
• PushButtonType (short) acción que está vinculada al botón (0: sin acción, 1: Aceptar,
2: Cancelar)
Cuando selecciona una opción, todas las demás acciones del grupo son desactivadas. Esto
asegura que de cualquier forma, solamente una opción del botón sea activada.
Un elemento de control provee dos propiedades:
• State (Boolean) activa el botón
• Label (String) etiqueta que es desplegada en el botón.
También puede usar las siguientes propiedades del modelo de botones de opción:
• Model.FontDescriptor (struct) estructura con detalles de la fuente que está siendo
usada (de acuerdo con com.sun.star.awt.FontDescriptor)
• Model.Label (String) – etiqueta que es desplegada en el elemento de control
• Model.Printable (Boolean) el elemento de control puede ser impreso
• Model.State (Short) si esta propiedad es igual a 1, la opción está activa, de lo
contrario está desactivada
• Model.TextColor (Long) color del texto del elemento de control
• Model.HelpText (String) texto de la ayuda que es desplegado cuando el cursor del
mouse permanece sobre el elemento de control
• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento de
control
Para combinar varios botones de opción en un grupo, debe posicionarlos uno después del otro
en la secuencia de activación sin interrupción (propiedad Model.TabIndex, descrita como
Order en el editor de diálogos). Si la secuencia de activación es interrumpida por otro
elemento de control, OpenOffice.org automáticamente inicia un nuevo grupo de elementos de
control que puede ser activado independientemente del primer grupo de elementos de control.
6 N.T. Es bastante dificil traducir estos nombres, porque en su mayoría son conocidos por los nombres en inglés.
Para más claridad dejo también los nombres en inglés.
múltiple, Falso bloquea las selecciones múltiples (la propiedad no puede ser llamada
directamente, sino por medio de IsMultipleMode)
• IsMultipleMode (Boolean) permite múltiples selecciones dentro de las listas, sólo
lectura
Cajas de listas proveen los siguientes métodos:
• addItem (Item, Pos) ingresa la cadena especificada en "Item" dentro de la lista en la
posición "Pos"
• addItems (ItemArray, Pos) ingresa las entradas listadas en el campo de datos
"ItemArray" dentro de la lista en la posición "Pos"
• removeItems (Pos, Count) remueve las entradas de "Count" de la posición "Pos"
• selectItem (Item, SelectMode) activa o desactiva el resaltado del elemento
especificado en la cadena "Item" dependiendo de la variable booleana "SelectMode"
• makeVisible (Pos) se mueve por entre los campos de la lista de manera que la entrada
especificada en "Pos" sea visible
El objeto model de las cajas de listas proveen las siguientes propiedades:
• Model.BackgroundColor (long) color de fondo del elemento de control
• Model.Border (short) tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple)
• Model.FontDescriptor (struct) estructura con los detalles de la fuente usada(de
acuerdo con la estructura com.sun.star.awt.FontDescriptor)
• Model.LineCount (Short) número de líneas del elemento de control
• Model.MultiSelection (Boolean) permite selecciones de entradas múltiples
• Model.SelectedItems (Array of Strings) lista de las entradas resaltadas
• Model.StringItemList (Array of Strings) lista de todas las entradas
• Model.Printable (Boolean) el elemento de control puede ser impreso
• Model.ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura
• Model.Tabstop (Boolean) el elemento de control puede ser accesado por la tecla Tab.
• Model.TextColor (Long) color del texto del elemento de control
• Model.HelpText (String) texto de ayuda que es desplegado cuando el cursor del
mouse descansa sobre el elemento de control
• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento de
control
La opción VBA para registrar entradas de la lista con un valor númerico adicional (ItemData) no existe en
OpenOffice.org Basic. Si desea administrar un valor numérico (por ejemplo un ID de base de datos)
adicional al texto de lenguaje natural, debe crear un campo de datos adicional que es administrado de
forma paralela a la caja de lista.
En muchos aspectos, la estructura de los formularios de OpenOffice.org corresponde a los
diálogos discutidos en el capítulo previo. Sin embargo, hay algunas diferencias importantes:
Los diálogos aparecen en el formulario en una ventana de diálogo sencilla, la cual es
desplegada sobre un documento que no permite ninguna otra acción mas que el proceso del
diálogo, hasta que este es finalizado. Los formularios, por en contrario, son desplegados
directamente en el documento, como elementos de dibujo.
Un editor de diálogos es provisto para la creación de diálogos, y puede ser encontrado en el
ambiente de desarrollo de OpenOffice.org Basic. Los formularios son creados usando la
barra de herramientas de las funciones de formulario directamente dentro del documento.
Mientras las funciones de los diálogos están disponibles en todos los documentos
OpenOffice.org, la vida de las funciones de los formularios están solamente disponibles en
los documentos de texto y las hojas de cálculo.
Los elementos de control de un formulario puede ser vinculado con una tabla de una base de
datos externa. Esta función no está disponible en los diálogos.
Los elementos de control de los diálogos y formularios difieren en varios aspectos.
Los usuarios que deseen proveer a sus formularios sus propios métodos para el manejo de
eventos, pueden referirse al capítulo 10 (diálogos). El mecanismo explicado son idénticos a
aquellos para formularios.
El ejemplo determina el modelo del elemento de control "MyListBox", el cual está localizado
en el primer formulario del documento de texto abierto actualmente.
Si no está seguro del formulario del elemento de control, puede usar la opción de búsqueda
por todos los formularios por el elemento de control requerido:
Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer
Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms
For I = 0 To Forms.Count – 1
Form = Forms.GetbyIndex(I)
If Form.HasByName("MyListBox") Then
Ctl = Form.GetbyName("MyListBox")
Exit Function
End If
Next I
El ejemplo usa el método HasByName para verificar todos los formularios de un documento
de texto para determinar cual de ellos contiene un elemento de control llamado "MyListBox".
Si un modelo correspondiente es encontrado, entonces una referencia es salvada en la
variable "Ctl" y la búsqueda es terminada.
El código listado en el ejemplo es muy similar al ejemplo previo para determinar el modelo
de un elemento de control. No usa solamento del objeto de documento "Doc" sino también el
controlador de documento "DocCrt" el cual hace referencia a la ventana del documento
actual. Con la ayuda de este controlador de documento y el modelo del elemento de control,
entonces usa el método GetControl para determinar la vista (variable CtlView) del
fomulario de elemento de control.
El ejemplo verifica todos los elementos de dobujo para determinar si soportan la interface
com.sun.star.drawing.XControlShape necesaria para los elementos de control de los
formularios. Si este es el caso, entonces se verifica la propiedad Control.Name para ver si el
nombre del elemento de control es "MyListBox". Si es verdadero, la función termina la
búsqueda.
Determinado el tamaño y posición de los elementos de control
El objeto forma del elemento de control debe sr conocido para que el código funcione. Si este
no es el caso, puede ser determinado usando el código de ejemplos anteriores.
Botones
El objeto modelo de un botón provee las siguientes propiedades:
• BackgroundColor (long) color de fondo
• DefaultButton (Boolean) el botón sirve como valor por defecto. En este caso,
también responde a la entrada si el botón no tiene el foco.
• Enabled (Boolean) el elemento de control está activado
• Tabstop (Boolean) el elemento de control puede ser accesado mediante la tecla de
tabulador
Botones de opción
Las siguientes propiedades están disponibles por medio de su objeto modelo:
• Enabled (Boolean) el elemento de control puede ser activado
• Tabstop (Boolean) el elemento de control puede ser accesado por la tecla "Tab".
• TabIndex (Long) posición del elemento de control en la secuencia de activación
• FontName (String) nombre del tipo de fuente
• FontHeight (Single) alto del carácter en puntos (pt).
• Tag (String) cadena que contiene información adicional, la cual puede ser guardada en el
• Tabstop (Boolean) el elemento de control puede ser accesado mediante la tecla "Tab".
• TabIndex (Long) posición del elemento de control en la secuencia de activación
• FontName (String) nombre del tipo de fuente.
• FontHeight (Single) alto del carácter en puntos (pt).
• Tag (String) cadena que contiene información adicional, la cual puede ser guardada en el
botón para acceso controlado por programación.
• Label (String) etiqueta del botón.
• Printable (Boolean) el elemento de control puede ser impreso.
• State (Short) si es 1, la opción está activada, de lo contrario está desactivada.
• RefValue (String) cadena para guardar información adicional (por ejemplo, administrar
ID de resgitros de datos).
• TextColor (Long) color del texto del elemento de control.
• HelpText (String) texto de ayuda desplegado automáticamente, cuando el cursor del
mouse está sobre el elemento de control.
• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.
Campos de texto
Los objetos modelo de los formularios de campos de texto ofrecen las siguientes
propiedades:
• Align (short) orientación del texto (0: alineado a la izquierda, 1: centrado, 2: alineado a
la derecha).
• BackgroundColor (long) color de fondo del elemento de control.
• Border (short) tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple).
• EchoChar (String) carácter de relleno para los campos de contraseña.
• FontName (String) nombre del tipo de fuente.
• FontHeight (Single) alto del carácter en puntos (pt).
• HardLineBreaks (Boolean) los saltos de línea automáticos son insertados
permanentemente en el texto del elemento de control.
• HScroll (Boolean) el texto tiene barra de desplazamiento horizontal.
• MaxTextLen (Short) tamaño máximo del texto; si se especifica el valor 0, no hay
límites.
• MultiLine (Boolean) permite entradas multi-líneas.
• Printable (Boolean) el elemento de control puede ser impreso.
• ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura.
Cajas de listas
El objeto de modelo de las cajas de listas proveen las siguientes propiedades:
• BackgroundColor (long) color de fondo del elemento de control.
• Border (short) tipo de borde (0: sin borde, 1: cuadro 3D, 2: cuadro simple).
• FontDescriptor (struct) estructura con los detalles de las fuentes usadas (de acuerdo
con la estructura com.sun.star.awt.FontDescriptor).
• LineCount (Short) número de líneas del elemento de control.
• MultiSelection (Boolean) permite la selección de múltiples entradas.
• SelectedItems (Array of Strings) lista de las entradas resaltadas.
• StringItemList (Array of Strings) lista de todas las entradas.
• ValueItemList (Array of Variant) lista conteniendo información adicional para cada
entrada (por ejemplo, para administrar ID de registros de datos).
• Printable (Boolean) el elemento de control puede ser impreso.
• ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura.
• Enabled (Boolean) el elemento de control puede ser activado.
• Tabstop (Boolean) el elemento de control puede ser accesado por la tecla "Tab".
• TabIndex (Long) posición del elemento de control en la secuencia de activación.
• FontName (String) nombre del tipo de fuente.
• FontHeight (Single) alto del carácter en puntos (pt).
• Tag (String) cadena que contiene información adicional que puede ser guardada en el
botón para acceso controlado por programación.
Por medio de su propiedad ValueItemList, las cajas de listas proveen la contraparte de la propiedad de
VBA, ItemData, por medio de la cual puede administrar información adicional para las entradas
individuales de las listas.
Tablas
Otro elemento de control provisto para el trabajo con bases de datos: el elemento de control
tabla. Este representa el contenido completo de una tabla o consulta. En el escenario más
simple, un elemento de control tabla es vinculado a una base de datos usando el formulario
de autopiloto, el cual vincula todas las columnas de los campos de la base de datos de
acuerdo a las especificaciones del usuario. Debido a que la API asociada es relativamente
compleja, no vamos a dar una descripción completa en este punto.
i
CharBackColor 71 com.sun.star.chart.ChartTitle 138, 142
CharColor 71 com.sun.star.chart.Dim3Ddiagram 145 s.
CharFontName 71, 124 com.sun.star.chart.Dim3DDiagram 144
CharHeight 71 com.sun.star.chart.PieDiagram 146
CharKeepTogether 71 com.sun.star.chart.StackableDiagram 145
CharStyleName 71 com.sun.star.document.OfficeDocument 57
CharUnderline 71 com.sun.star.drawing.BitmapMode 121
CharWeight 71, 124 com.sun.star.drawing.CircleKind 127
Chr 34 com.sun.star.drawing.CircleKind.ARC 127
CInt(Var) 32 com.sun.star.drawing.CircleKind.CUT 127
CircleEndAngle 127 com.sun.star.drawing.CircleKind.FULL 127
CircleKind 127 com.sun.star.drawing.CircleKind.SECTION 127
CircleStartAngle 127 com.sun.star.drawing.ColorMode 131
clearContents 115 com.sun.star.drawing.DrawPage 117
ClickCount 166 com.sun.star.drawing.FillProperties 128
CLng(Var) 32 com.sun.star.Drawing.FillProperties 122
Close 44 com.sun.star.drawing.Hatch 120
Códigos de página 9 com.sun.star.drawing.LineProperties 128
CollapseToEnd 76 com.sun.star.drawing.LineProperties 127
CollapseToStart 76 com.sun.star.drawing.LineShape 127
Collate (Boolean) 63 com.sun.star.drawing.LineStyle 122
Color 104, 120 com.sun.star.drawing.PolyPolygonShape 128
Column 85, 102 com.sun.star.drawing.RotationDescriptor 133
Columns 98 com.sun.star.drawing.ShadowProperties 128
COLUMNS 101 s. com.sun.star.drawing.Shape 118
com.sun.star.awt.Gradient 119 com.sun.star.drawing.Text 127 s.
com.sun.star.awt.HatchStyle) 120 com.sun.star.form.FormButtonType 180
com.sun.star.awt.Key 167 s. com.sun.star.frame.Desktop 57
com.sun.star.awt.Point 128, 179 com.sun.star.frame.XStorable 61
com.sun.star.awt.Selection 172 com.sun.star.sdb.CommandType 185
com.sun.star.awt.Size 179 com.sun.star.sdb.DatabaseContext 148
com.sun.star.awt.UnoControlEdit 172 com.sun.star.sdb.DataSource 149
com.sun.star.awt.UnoControlListBox 173 com.sun.star.sdb.DefinitionContainer 151
com.sun.star.beans.PropertyState 74 com.sun.star.sdb.QueryDefinition 150
com.sun.star.beans.propertyState.AMBIGUOS_V com.sun.star.sdbc.ResultSetConcurrency 154
ALUE 74 com.sun.star.sdbc.ResultSetType 154
com.sun.star.beans.propertyState.DEFAULT_VAL com.sun.star.sheet.CellDeleteMode 102
UE 74 com.sun.star.sheet.CellFlags 115
com.sun.star.beans.propertyState.DIRECT_VALU com.sun.star.sheet.CellInsertMode 101
E 74 com.sun.star.sheet.GeneralFunction 114
com.sun.star.chart.AreaDiagram 145 com.sun.star.sheet.HeaderFooterContent 111
com.sun.star.chart.ChartArea 140 com.sun.star.sheet.Spreadsheet 96
com.sun.star.chart.ChartAxis 141 s. com.sun.star.sheet.SpreadsheetDocument 95
com.sun.star.chart.ChartAxisArrangeOrderType com.sun.star.sheet.TablePageStyle 112
143 com.sun.star.sheet.XRangeMovement 100
com.sun.star.chart.ChartAxisMarks 143 com.sun.star.style.CharacterProperties 71, 103,
com.sun.star.chart.ChartGrid 142 127 s.
com.sun.star.chart.ChartLegendPosition 138 s. com.sun.star.style.GraphicLocation 107
ii
com.sun.star.style.PageProperties 107 s. Content 91
com.sun.star.style.ParagraphProperties 71, 103, Conversiones 31
127 s. ConvertFromURL 58
com.sun.star.table.BorderLine 108 ConvertToURL 58
com.sun.star.table.CellAddress 102 CopyCount (Integer) 63
com.sun.star.table.CellContentType 100 copyRange 102
com.sun.star.table.CellProperties 103 COUNT 114
com.sun.star.table.CellRangeAddress 101 COUNTNUMS 114
com.sun.star.table.ShadowFormat 103, 109 createInstance 53
com.sun.star.table.ShadowLocation 103 CreateInstance 82
com.sun.star.table.TableColumns 97 createSearchDescriptor 79
com.sun.star.table.TableColumns 96 createTextCursorByRange 93
com.sun.star.table.TableRows 96 s. CreateUnoDialog 157
com.sun.star.table.XtableRows 84 createUnoService 148
com.sun.star.text.BaseFrameProperties 87 CSng(Var) 32
com.sun.star.text.bookmark 92 CStr(Var) 32
com.sun.star.text.ChapterFormat 92 CustomShow 135
com.sun.star.text.ControlCharacter 78
com.sun.star.text.Paragraph 68
DataField 185
com.sun.star.text.TextContent 82
DataSourceName 184
com.sun.star.text.TextContentAnchorType 82
Date 39, 91
com.sun.star.text.TextField.Annotation 91
DATETIME 115
com.sun.star.text.TextField.Chapter 92
DateTimeValue 92
com.sun.star.text.TextField.CharacterCount 90
datos multi-dimensionales 15
com.sun.star.text.TextField.DateTime 91
Day 38
com.sun.star.text.TextField.PageCount 90
DBG_methods 52
com.sun.star.text.TextField.WordCount 90
DBG_properties 52
com.sun.star.text.TextTable 68, 84
DBG_supportedInterfaces 52
com.sun.star.text.TextTableRow 84
Declaración explícita de variables 7
com.sun.star.text.VertOrientation 85
Declaración implicita de variables 7
com.sun.star.text.WrapTextMode 82
Deep 145
com.sun.star.TextField.PageNumber 91
DefaultButton 179
com.sun.star.util.ReplaceDescriptor 81
Dim3D 144
com.sun.star.util.XNumberFormatsSupplier 149
Dir 40
com.sun.star.view.PaperFormat.A4 64
DisplayLabels 143
com.sun.star.view.PaperFormat.Letter 64
Distancia 120
com.sun.star.view.PaperOrientation.LANDSCAPE
Do ... Loop 23
64
dobles 11
com.sun.star.view.PaperOrientation.PORTAIT
dólar 36
64
DOWN 101
com.sun.star.view.Xprintable 63
DrawPages 116
com.sun.star.view.XPrintable 61
coma 36
Comentarios 6 EchoChar 182
Command 150, 184 Editable 172
COMMAND 185 EDITATTR 115
CommandType 184 EMPTY 100
ComputeFunction 114 Enabled 179 ss., 183
iii
enableTriState 171 FontHeight 180, 182 s.
end 135 FontName 180, 182 s.
EndColor 119 FooterBackColor 110
EndColumn 101 FooterBackGraphicFilter 110
endExecute 158 FooterBackGraphicLocation 110
EndIntensity 119 FooterBackGraphicURL 110
EndRow 101 FooterBackTransparent 110
entero largo 11 FooterBodyDistance 110
enteros 10 FooterBottomBorder 110
Environ 48 FooterBottomBorderDistance 110
eof 44 FooterHeight 110
EQV 20 FooterIsDynamicHeight 110
Erl 29 FooterIsOn 91, 109
Err 29 FooterIsShared 110
Error$ 29 FooterLeftBorder 110
escritura exponencial 12 FooterLeftBorderDistance 110
Event.Source 166 FooterLeftMargin 110
Event.Source.Model 166 FooterRightBorder 110
Exit Function 26 FooterRightBorderDistance 110
Exit Sub 26 FooterRightMargin 110
FooterShadowFormat 111
FooterText 112
Falso y verdadero 13
FooterTextLeft 112
fecha 14
FooterTextRight 112
file:/// 58
FooterTopBorder 110
FileCopy 42
FooterTopBorderDistance 110
FileDateTime 43
For ... Next 22
FileExist 42
Formateado 36 s.
FileLen 43
FORMULA 100, 115
FileName (String) 63
FORWARD_ONLY 155
FillBitmapMode 121
FreeFile 43
FillBitMapName 121
Funciones 25
FillBitmapURL 121
FillColor 118
FillTransparence 122 Gamma 131
FillTransparenceGradient 122 GapWidth 143
FillTransparenceGradientName 119 get, método 50
FilterName (string) 62 GetAttr 42
FilterName (String) 60 getBinaryStream 154
FilterOptions (String) 60 getBoolean 154
FilterOptions (String) 63 getByIndex 55, 85
findFirst 80 getByName 53, 96
findNext 80 getByte 153
first() 155 getBytes 154
FirstPage 135 getCellRangeByName 113
Floor 140 getCharacterStream 154
FocusFlags 168 getColumns 85
FontDescriptor 183 GetCount 55, 85
iv
getDate 154 HasXAxisGrid 142
getDouble 153 HasXAxisHelpGrid 142
getElementNames 54 HasXAxisTitle 142
getFloat 153 HeaderBackColor 109
getFocus 160 HeaderBackGraphicFilter 109
getInt 153 HeaderBackGraphicLocation 109
getLong 153 HeaderBackGraphicURL 109
getObject 154 HeaderBackTransparent 109
getPosition 50 HeaderBodyDistance 109
getPropertyState 73 HeaderBottomBorder 109
getShort 153 HeaderBottomBorderDistance 109
getString 154 HeaderHeight 109
getTextTables() 83 HeaderIsDynamicHeight 109
getTime 154 HeaderIsShared 109
getTimestamp 154 HeaderLeftBorder 109
getUnicodeStream 154 HeaderLeftBorderDistance 109
goLeft 76 HeaderRightBorder 109
goRight 76 HeaderRightBorderDistance 109
gotoEnd 76 HeaderRightMargin 108
gotoEndOfParagraph 76 HeaderShadowFormat 109
gotoEndOfWord 76 HeaderText 112
gotoNextParagraph 76 HeaderTextLeft 112
gotoNextWord 76 HeaderTextRight 112
gotoPreviousParagraph 76 HeaderTopBorder 109
gotoPreviousWord 76 HeaderTopBorderDistance 109
gotoRange 76 Height 85, 97, 107, 117
gotoStart 76 Heigth 87
gotoStartOfParagraph 76 HelpMarks 143
gotoStartOfWord 76 HelpText 180 ss.
GRADIENT 119 HelpURL 180 ss.
GraphicColorMode 131 hexadecimales 13
GraphicURL 131 Highlighted 169
HoriJustify 104
HoriOrient 88
HARD_HYPEN 78
Hour 38
HARD_SPACE 78
HScroll 182
HARDATTR 115
HardLineBreaks 182
hasByName 54, 96 If ... Then ... Else 20
HasLegend 138 IMP 20
hasLocation() 62 Info 149
HasMainTitle 138 Inputbox 45, 47
hasMoreElements 55 insertByIndex 55, 98
HasSecondaryXAxis 142 InsertByIndex 85
HasSecondaryXAxisDescription 142 insertByName 54, 96
HasSubTitle 138 InsertCell 101
HasXAxis 141 insertCells 101
HasXAxisDescription 142 InsertTextContent 83
v
InStr 35 last() 155
interface 51 Left 35
Internet Standard RFC 1738 58 LEFT 102, 166
Intérprete 2 LeftBorder 108
isAfterLast() 155 LeftBorderDistance 108
IsAlwaysOnTop 135 LeftMargin 84, 87, 107
IsArray 33 LeftPageFooterContent 111
IsAutoHeight 85 LeftPageHeaderContent 111
IsAutomatic 135 Legend 138
isBeforeFirst() 155 Len 35
IsCellBackgroundTransparent 103 Line Input 44
IsCollapsed 76 LINE_BREAK 78
IsDate 33, 92 LINE_TOP 88
IsEditable 172 Líneas de programación 5
IsEndless 135 LineColor 123
isEndOfParagraph 76 LineCount 183
isEndOfWord 76 LineJoint 123
isFirst() 155 Lines 145
IsFixed 92 LineShape 127
IsFullScreen 135 LineStyle 123
IsLandscape 107 LineTransparence 123
isLast( 155 LineWidth 123
IsModified() 62 loadComponentFromURL 57
IsMouseVisible 135 LoadLibrary 157
IsMultipleMode 174 Location 103, 128
IsNumeric 33 Logarithmic 143
ISO8859 9
IsPasswordRequired 149
makeVisible 174, 184
IsReadOnly 149
Marcadores 6
IsReadOnly() 62
Marks 143
isStarOfParagraph 76
Matrices 14
isStarOfWord 76
Matrices, valor para el índice inicial 15
IsStartOfNewPage 97
Max 142
IsTextWrapped 104
MAX 114
IsTransparent 103
MaxTextLen 172, 182
IsVisible 96 s.
mensajes de error 29
ItemCount 173
método Store 61
ItemId 169
Métodos 50
Mid 35
JumpMask (String) 60 Mid, con reemplazo de caracteres 36
MIDDLE 166
Min 142
KeyChar 167
MIN 114
KeyCode 167
Minute 38
Kill 42
MOD 20
Model.Align 173
Label 171, 180 ss. Model.BackgroundColor 170, 173 s.
vi
Model.Border 173 s. NumberFormat 92, 143
Model.DefaultButton 170 NumberFormatsSupplier 149
Model.EchoChar 173 NumberingType 90 s.
Model.Enabled 160 NumberOfLines 146
Model.FontDescriptor 170 ss. numeral 36
Model.HardLineBreaks 173 Números decimales 12
Model.Height 159 Números enteros 12
Model.HelpText 170 ss.
Model.HelpURL 170 ss.
OBJECTS 115
Model.HScroll 173
objeto Selection 68
Model.Label 170 ss.
objetos dependientes del contexto 53
Model.LineCount 174
octales 13
Model.MaxTextLen 173
Offset 91
Model.MultiLine 173
On Error 28
Model.MultiSelection 174
On Error Resume Next 29 s.
Model.PositionX 159
Open 43
Model.PositionY 159
OpenOffice.org Basic 5
Model.Printable 170 ss.
OptimalHeight 97
Model.ReadOnly 173 s.
OptimalWidth 97
Model.SelectedItems 174
OR 20
Model.State 171 s.
Orientation 104, 117
Model.StringItemList 174
Origin 142
Model.TabIndex 160, 171
Overlap 143
Model.Tabstop 160, 172 ss.
Overwrite (Boolean) 63
Model.Text 173
Model.TextColor 170 ss.
Model.Title 159 Pages (String) 64
Model.VScroll 173 PageStyle 96
Model.Width 159 Página actual 90
módulos 51 PaperFormat (Enum) 64
moneda 11 PaperOrientation (enum) 64
Month 38 PaperSize (Size) 64
moveRange 102 ParaAdjust 72
Msgbox 45 ParaBackColor 72
MultiLine 182 ParaBottomMargin 72
MultipleMode 173 PARAGRAPH_BREAK 78
MultiSelection 183 ParaLeftMargin 72
ParaLineSpacing 72
ParamArray 28
Name 42, 149 s.
parámetros 26
Name (String), Impresora 64
Parámetros opcionales 27
next() 155
ParaRightMargin 72
NextFocus 168
ParaStyleName 72
NONE 101 s.
ParaTabStops 72
NOT 20
ParaTopMargin 72
notación URL 58
Password 149
Now 39
Password (String) 60, 63
Number 117
Pause 135
vii
Percent 144 ResultSetType 154
Point 118 Resume 28
PolyPolygon 128 Right 35
Position 118, 139, 179 RIGHT 101, 166
previous() 155 RightBorder 108
Print 44, 63 RightBorderDistance 108
Printable 181 ss. RightMargin 84, 87, 107
PrintAnnotations 112 RightPageFooterContent 111
PrintCharts 113 RightPageHeaderContent 111
PrintDownFirst 113 RmDir 41
PrintDrawing 113 RotateAngle 104, 133
Printer, propiedad 64 Row 102
PrinterPaperTray 107 Rows 98
PrintFormulas 113 ROWS 101 s.
PrintGrid 113
PrintHeaders 113
SCROLL_INSENSITIVE 155
PrintObjects 113
SCROLL_SENSITIVE 155
PrintZeroValues 113
SearchBackwards 79
private:factory 61
SearchCaseSensitive 79
Procedimientos 25
SearchDescriptor 79
PRODUCT 114
SearchFlags 59
PropertyValue 60
SearchRegularExpression 79
Propiedades 50
SearchSimilarity 79
punto 36
SearchSimilarityAdd 79
PUSH 180
SearchSimilarityExchange 79
PushButtonType 170
SearchSimilarityRelax 80
SearchSimilarityRemove 79
QUERY 185 SearchStyles 79
QueryDefinitions 150 SearchWords 79
Second 38
SecondaryXAxis 142
ReadOnly 182 s.
Select ... Case 21
ReadOnly (Boolean) 60
Selected 169
Red de Objetos Universal (UNO) 49
SelectedItem 173
ReDim 16
SelectedItemPos 173
RefValue 181 s.
SelectedItems 173, 183
rehearseTimings 135
SelectedItemsPos 173
removeByIndex 55, 98
SelectedText 172
RemoveByIndex 85
Selection 172
removeByName 54
selectItem 174, 184
removeItems 174, 184
sencillas 11
RemoveRange 101
set, método 50
removeTextContent 83
SetAttr 43
RepeatHeadline 84
setPosition 50
replaceByName 54
Shadow 125
ReplaceDescriptor 81
ShadowColor 125
RESET 180
ShadowFormat 103, 108
ResultSetConcurrency 154
viii
ShadowTransparence 125 TabIndex 180, 182 s.
ShadowWidth 103 TABLE 185
ShadowXDistance 125 TableFilter 149
ShadowYDistance 125 TableTypeFilter 149
ShearAngle 133 Tabstop 179 s., 182 s.
Sheet 101 s. Tag 180, 182 s.
Sheets 95 TargetFrame 180
Shell 47 TargetURL 180
Size 118, 128, 139, 179 Temporary 168
SOFT_HYPEN 78 Text 172, 183
Sort (Boolean) 63 TEXT 100
SplineOrder 145 TextAutoGrowHeight 124
SplineResolution 145 TextAutoGrowWidth 124
SplineType 145 TextBreak 143
Stacked 144 TextCanOverlap 143
StackedBarsConnected 145 TextColor 180 ss.
StarColor 119 TextHorizontalAdjust 124
StarDesktop 57 TextLeftDistance 124
StarDesktop.CurrentComponent 58 TextLowerDistance 124
StarDesktop.LoadComponentFromURL 59 TextRightDistance 124
StarIntensity 119 TextRotation 139, 143
start 135 TextUpperDistance 124
StartColumn 101 TextVerticalAdjust 124
StartRow 101 TextWrap 82
StartWithNavigator 135 Time 39
State 171, 181 s. Title 138
STDEV 114 TopBorder 108
STDEVP 114 TopBorderDistance 108
StepCount 119 TopMargin 84, 87, 107
StepHelp 142 Transparency 131
StepMain 142
storeAsURL 62
Unicode 9
String 139
Universal Network Objects (UNO) 49
STRING 115
Unpacked (Boolean) 63
StringItemList 183
UP 102
Style 119 s.
UpdateCatalogName 150
StyleFamilies 65
updateRow() 156
STYLES 115
UpdateSchemaName 150
SUBMIT 180
UpdateTableName 150
Subtitle 138
URL 149, 180
SUM 114
UsePn 135
supportsService 52
User 149
SuppressVersionColumns 149
SymbolBitmapURL 145
SymbolSize 145 VALUE 100, 115
SymbolType 145 ValueItemList 183
VAR 114
variables 7
ix
Variables boleanas 13 VBA, recuperar solo directorios 41
Variables globales 18 VBA, Redimensionar matrices 16
Variables locales 17 VBA, reiniciar los estados de error 29
Variables privadas 18 VBA, RmDir 42
Variables públicas 17 VBA, Snapshot 155
VARP 114 Verificar el contenido de las variables 33
VBA, Application.ActiveDocument 58 Vertical 145
VBA, Application.ActiveWorkBook 58 VertJustify 104
VBA, atributos de archivos 43 VertOrient 85, 88
VBA, ByRef 27 VScroll 183
VBA, Cambio de los límites de la matriz 17
VBA, Characters, Sentences, y Words 69
Wait 47
VBA, Comodines 41
Wall 140
VBA, compatibilidad entre StarOffice Basic y
Weekday 38
VBA 2
Width 84, 88, 97, 107, 117
VBA, definir valores por defecto 28
VBA, Document.Tables.Add 83
VBA, Dynaset Recordset 155 X 166
VBA, For Each ... Next 23 XAxis 141
VBA, Formateo fecha y hora 37 XAxisTitle 142
VBA, funciones y procedimientos 27 XEnumeration 55
VBA, InsertAfter 75 XEnumerationAccess 55
VBA, InsertBefore 75 XHelpGrid 142
VBA, Like 20 XIndexAccess 55
VBA, marcadores 7 XIndexContainer 55
VBA, marcos 87 XMainGrid 142
VBA, máximo de caracteres 10 XmultiServiceFactory 53
VBA, mensajes de error 29 XNameAccess 53
VBA, MkDir 42 XNameContainer 53 s.
VBA, MoveEnd 75 XoffSet 119
VBA, MoveStart 75 XOR 20
VBA, objetos 50 XrangeMovement 102
VBA, Paragraph(1) 69
VBA, Paragraphs 69
VBA, ParamArray 28 Y 166
VBA, Parámetros 27 Year 38
VBA, Range 75, 83, 103 YoffSet 119