Download as pdf or txt
Download as pdf or txt
You are on page 1of 204

OpenOffice.

org
Guía básica del programador

Traducción Arturo Garro de


“Basic Programmer's Guide” del StarOffice 6.0
Revisión de Julio 2003
Escrita en OpenOffice.org 643c (Windows) y 1.0.1 (Linux)
Se terminó de escribir en OpenOffice.org 1.1.0 RC4 (Linux y Windows)
Copyrights y marcas registradas.

Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is described in this
document. In particular, and without limitation, these
intellectual property rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or more additional
patents or pending patent applications in the U.S.
and in other countries.
This document and the product to which it pertains are distributed under licenses restricting their use, copying, distribution, and
decompilation. No part of the product or of this document
may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any.
Third-party software, including font technology, is copyrighted and licensed from Sun suppliers.
This product is based in part on the work of the Independent JPEG Group and The FreeType Project.
Portions Copyright 2000 SuSE, Inc. Word for Word Copyright © 1996 Inso Corp. International CorrectSpell spelling correction system
Copyright © 1995 by Lernout & Hauspie Speech
Products N.V. All rights reserved.
Sun, Sun Microsystems, the Sun logo, Java, Solaris, StarOffice, the Butterfly logo, the Solaris logo, and the StarOffice logo are
trademarks or registered trademarks of Sun Microsystems,
Inc. in the U.S. and other countries.
UNIX is a registered trademark in the U.S. and in other countries, exclusively licensed through X/Open Company, Ltd. Screen Beans
and Screen Beans clipart characters are registered
trademarks of A Bit Better Corporation.
Federal Acquisitions: Commercial Software - Government Users Subject to Standard License Terms and Conditions.
DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
MERCHANTABILITY, FITNESS FOR FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED,
EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE
HELD TO BE LEGALLY INVALID.


Sun Microsystems, Inc. a les droits de propriété intellectuels relatants à la technologie incorporée dans ce produit. En particulier, et sans
la limitation, ces droits de propriété intellectuels
peuvent inclure un ou plus des brevets américains énumérés à http://www.sun.com/patents et un ou les brevets plus supplémentaires ou
les applications de brevet en attente dans les Etats -
Unis et les autres pays.
Ce produit ou document est protégé par un copyright et distribué avec des licences qui en restreignent l'utilisation, la copie, la
distribution, et la décompilation. Aucune partie de ce produit
ou document ne peut être reproduite sous aucune forme, par quelque moyen que ce soit, sans l'autorisation préalable et écrite de Sun et
de ses bailleurs de licence, s'il y ena.
Le logiciel détenu par des tiers, et qui comprend la technologie relative aux polices de caractères, est protégé par un copyright et
licencié par des fournisseurs de Sun.
Ce produit repose en partie sur le travail de l’Independent JPEG Group et de The FreeType Project.
Portions Copyright 2000 SuSE, Inc. Word for Word Copyright © 1996 Inso Corp. Système de correction orthographique International
CorrectSpell Copyright © 1995 de Lernout & Hauspie
Speech Products N.V. Tous droits réservés.
Sun, Sun Microsystems, le logo Sun, Java, Solaris, StarOffice, le logo Butterfly, le logo Solaris et le logo StarOffice sont des marques
de fabrique ou des marques déposées de Sun
Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
UNIX est une marque déposée aux Etats-Unis et dans d'autres pays et licenciée exlusivement par X/Open Company, Ltd.
Les Screen Beans et les objets graphiques prédessinés Screen Beans sont des marques déposées de A Bit Better Corporation.
Acquisitions fédérales : logiciel commercial ; les utilisateurs gouvernementaux sont soumis aux conditions générales standard de la
licence.
LA DOCUMENTATION est fournie « TELLE QUELLE » et TOUTES LES CONDITIONS, REPRÉSENTATIONS ET GARANTIES
EXPRESSES OU TACITES, Y COMPRIS TOUTE GARANTIE
TACITE CONCERNANT LA QUALITÉ MARCHANDE, L'APTITUDE À UN USAGE PARTICULIER OU LA NON-VIOLATION
DE DROITS DE TIERS SERONT REJETÉES, EXCEPTÉ
DANS LE CAS OÙ L'EXCLUSION OU LA LIMITATION DE TELLES GARANTIES NE SERAIT PAS AUTORISÉE PAR LA
LÉGISLATION EN VIGUEUR.

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.

Acerca de OpenOffice.org Basic


El lenguaje de programación OpenOffice.org Basic ha sido desarrollado especialmente para
OpenOffice.org (OpenOffice.org) y está firmemente integrado en el paquete de oficina.
Como el nombre lo sugiere, OpenOffice.org Basic es un lenguaje de programación de la
familia Basic. Cualquiera que haya trabajado previamente con otros lenguajes de Basic – en
particular con Visual Basic o Visual Basic para Aplicaciones (VBA) de Microsoft – puede
acostumbrarse fácilmente a OpenOffice.org Basic.
Grandes secciones de las construcciones básicas de OpenOffice.org Basic son compatibles
con Visual Basic.
El lenguaje de programación OpenOffice.org Basic puede ser dividido en cuatro secciones:
• : Define las construcciones lingüisticas elementales,
or ejemplo, declaraciones de variables, ciclos, y funciones.
• : Provee funciones estandares que no tienen referencia
con OpenOffice.org, por ejemplo, funciones para edición de números, cadenas, valores de
fecha, y archivos.
• : Permite el acceso a
documentos de OpenOffice.org y permite que sean creados, salvados, modificados e
impresos.
• : Crea ventanas de diálogo presonalizadas y provee un entorno para
agregar elementos de control y manejadores de eventos.

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)

Posibles usos de OpenOffice.org Basic


El fuerte de las aplicaciones de OpenOffice.org Basic inicia cuando las funciones estadard de
OpenOffice.org terminan. Tareas rutinarias pueden ser automatizadas en OpenOffice.org
Basic, vínculos a otros programas – por ejemplo, servidores de bases de datos – y actividades
más complejas pueden ser realizadas el presionar un botón usando scripts predefinidos.
OpenOffice.org Basic ofrece acceso completo a todas las funciones de OpenOffice.org,
soporta todas las funciones, modifica tipos de documentos, y provee opciones para crear
ventanas de diálogo personalizadas.

Uso de OpenOffice.org Basic


El OpenOffice.org Basic puede ser usado por cualquier OpenOffice.org u OpenOffice.org sin
necesidad de programas adicionales o ayudas especiales.
En la instalación standar, OpenOffice.org Basic tiene los componentes necesarios para crear
sus propias macros de Basic, incluyéndo:
•  que provee un editor para crear y probar las
macros.
•  el cual es necesario para ejecutar las macros.
•  a varias aplicaciones de OpenOffice.org, que permite el acceso directo a
los documentos de Office.

Estructura de esta guía


Los primeros tres capítulos introducen al lector al OpenOffice.org Basic:
• Capítulo 2: El lenguaje de OpenOffice.org Basic.
• Capítulo 3: La librería de tiempo de ejecución de OpenOffice.org Basic.
• Capítulo 4: Introducción a la API de OpenOffice.org.
Estos tres capítulos ofrecen un vistaso del OpenOffice.org Basic y puede ser leído por
cualquiera que intente escribir programas en OpenOffice.org Basic.
Los capítulos restantes describen componentes individuales de la API de OpenOffice.org con
más detalle y pueden ser leídos selectivamente según lo requiera.
• Capítulo 5: Trabajando con documentos de OpenOffice.org
• Capítulo 6: Documentos de texto.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• Capítulo 7: Documentos de hoja de cálculo.


• Capítulo 7: Dibujos y Presentaciones.
• Capítulo 8: Diagramas (Gráficos)
• Capítulo 9: Acceso a base de datos.
• Capítulo 10: Diálogos.
• Capítulo 11: Formularios.

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

Los programadores que deseen trabajar directamente en Java y C++ en lugar de


OpenOffice.org Basic deben consultar la Guía del Desarrollador de OpenOffice.org en lugar
de esta guía. La programación de OpenOffice.org con Java o C++ es considerablemente más
compleja que la programación con OpenOffice.org Basic.

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:

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

LongExpressión = (expresion1 + expresion2 ) + _


(expresion3 + expresion4 ) + _
(expresion5 + expresion5 ) + _
(expresion6 + expresion7 )

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

Puede ser escrita como sigue:


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

• La palabra clave rem, seguida por el comentario:


Rem Este comentario está dentro de la palabra clave Rem

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• Los marcadores no pueden contener caracteres especiales como ä, â, í ß.


• El tamaño máximo de un marcador es de 255 caracteres.
• No hay distinción entre mayúsculas y minúsculas. El marcador OneTestVariable, por
ejemplo, define la misma variable para onetestvariable y ONETESTVARIABLE.
Sin embargo hay una excepción a esta regla: hay una distición hecha entre mayúsculas y
minúsculas para las constantes UNO-API. Más información acerca de UNO es presentada
en el capítulo 4.

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.

Algunos ejemplos de marcadores correctos e incorrectos:


Surname ' Correcto
Surname5 ' Correcto. (el número 5 no es el primer carácter
Primer Nombre ' Incorrecto. Se permiten espacios.
DéjàVu ' Incorrecto. Letras como é, à no están permitidas.
5Surname ' Incorrecto. El primer carácter no puede ser un número.
Primer,Nombre ' Incorrecto. Las comas no están permitidas.

Trabajado con variables


Declaración implicita de variables
Los lenguajes Basic están diseñados para que sean fáciles de usar. Como resultado,
OpenOffice.org Basic permite la creación de variables por medio del simple uso sin una
declaración explícita. En otras palabras, una variable empieza a exisitir desde que es incluida
en su código. Dependiendo de las variables que estén presentes, el siguiente ejemplo declara
tres nuevas variables:
a = b + c

Declarar variables implícitamente no es una buena práctica de programación porque puede


resultar en la introducción de una nueva variable como resultado de un error tipográfico. En
lugar de generar un error, el intérprete inicializa el error tipográfico como una nueva variable
con un valor de 0. Puede ser bastante dificil encontrar errores de esta naturaleza en su código.

Declaración explícita de variables


Para prevenir errores causadas por la declaración implícita de variables, OpenOffice.org
Basic provee una instrucción llamada:
Option Explicit

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:

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

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.

La variable es declarada como un entero y no puede registrar cualquier tipo de números.


También puede usar el siguiente estilo para declarar una variable del tipo entero:
Dim MiVar%' Declara una variable del tipo entero.

La instrucción Dim puede tener varias declaraciones de variables:


Dim MiVar1, MiVar2

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

De un conjunto de caracteres ASCII a Unicode


Los conjuntos de caracteres en una cadena concuerdan con el código correspondiente
(números y caracteres) en una tabla que describe como la computadora desplegará la cadena.
Conjunto de caracteres ASCII
El conjunto de caracteres ASCII es un juego de caracteres que representan números,
caracteres, y símbolos especiales en un byte. Los códigos ASCII 0 a 127 corresponden al
alfabeto y los símbolos comunes (como puntos, paréntesis y comas), también y algunos
códigos especiales de pantalla e impresora. El conjunto de caracteres ASCII es el más
comúnmente usado para transferir datos entre computadoras.
Sin embargo, este conjunto de caracteres no incluye un rango de caracteres especiales usados
en Europa, como â, ä y î, asi como otros formatos de caracteres, como el alfabeto Cirílico.
Conjunto de caracteres ANSI
Microsoft baso sus productos Windows en el conjunto de caracteres del Instituto Americano
Nacional de Standares (ANSI1), el cual fue gradualmente extendido para incluir los caracteres
que fueron omitidos por el conjunto de caracteres ASCII.
Códigos de página
El conjunto de caracteres ISO8859 provee un standar internacional. Los primeros 128
caracteres del conjunto ISO corresponden al conjunto de caracteres ASCII. El standar ISO
introduce nuevos conjuntos de caracteres (Códigos de página) de esta manera más lenguajes
pueden ser correctamente desplegados. Sin embargo, como un resultado, el mismo valor del
carácter puede representar diferentes caracteres en diferentes lenguajes.
Unicode
Unicode incrementa el tamaño de un carácter a cuatro bytes y combina diferentes conjuntos
de caracteres para crear un standar que se ajuste al mayor número de lenguajes del mundo. La
versión 2.0 de Unicode está soportada por muchos programas – incluyéndo OpenOffice.org y
OpenOffice.org Basic.

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

También puede ser escrita la declaración de esta forma:

1 N.T: Por las siglas en inglés de American National Standars Institute.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

Dim Variable$

Cuando porte aplicaciones VBA, asegurese que el máximo permitido en OpenOffice.org Basic sea
observado (65535 caracteres).

Especificación de cadenas específica.


Para asignar una cadena específica a una variable de cadena, encierre la cadena en comillas
dobles (").
Dim MiCadena As String
MiCadena = "Esto es una prueba"

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim MiVar As Integer


Dim MiVar%

Variables de entero largo


Las variables de entero largo pueden guardar cualquier número entre -2147483648 y
2147483648. Una variable de entero largo puede tomar cuatro bytes de memoria. El símbolo
del tipo de declaración es &. Los cálculos con variables de enteros largos son muy rápidos y
son particularmente útiles para contadores de ciclos. Si asigna un número de punto flotante a
una variable de entero largo, el número es redondeado hacia arriba o hacia abajo al entero
más cercano.
Ejemplos de declaraciones de enteros largos
Dim Variable As Long
Dim Variable&

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

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

deseados por el uso de números de punto flotante.


Ejemplo de declaraciones de variables de moneda:
Dim Variable As Currency
Dim Variable@

Especificación explícita de números


Los números pueden ser representados de muchas maneras, por ejemplo, en formato decimal
o en notación científica, o en cualquier base diferente al sistema decimal. Las siguientes
reglas aplican a los caracteres numéricos en OpenOffice.org Basic:
Números enteros
El método más simple es trabajar con cualquier número entero. Estos son listados en el texto
fuente sin los separadores de miles:
Dim A As Integer
Dim B As Float
A = 1210
B = 2438

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

OpenOffice.org Basic ignora la parte decimal del exponente y se interpreta la expresión


como:
A = 1.43E2

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

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

en guardado internamente como un entero de dos bytes, donde 0 corresponde a Falso y


cualquier otro valor corresponde a Verdadero. No hay simbolo de declaración para las
variables boleanas. La declaración puede realizarse simplemente usando As Boolean.
Ejemplo de una declaración de una variable boleana:
Dim Variable As Boolean

Detalles sobre la hora y la fecha


Variables de fecha
Las variables de fecha pueden contener valores de fecha y hora. Cuando se salvan los datos,
OpenOffice.org Basic usa formato interno que permite las comparaciones y las operaciones
matemáticas en los valores de hora y fecha. No hay símbolo de declaración para las variables
de fecha. La declaración puede realizarse usando el suplemento As Date.
Ejemplo de una declaración de variable de fecha:
Dim Variable As Date

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim MiMatriz(5 to 10)

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.

Especificando un valor para el índice inicial


El índice inicial usualmente inicia con el valor 0. Alternativamente, puede cambiar el índice
inicial para todas las declaraciones de campos de datos al valor de 1 usando la siguiente
llamada:
Option Base 1

La llamada puede ser incluida en el encabezado de un módulo si desea que se aplique en


todas las declaraciones de matrices en el módulo. Sin embargo, esto no afecta las secuencias
UNO que estén definidas por medio del API de OpenOffice.org, cuyos índices siempre
inician con 0. Para no afectar la claridad, debería evitar el uso del Option Base 1.
El número de elementos en una matriz no es afectado si usa Option Base 1, solamente el
índice inicial cambia. La declaración:
Option Base 1
' ...
Dim MiMatriz(3) As Integer

declara 4 variables del tipo entero que pueden ser llamadas con las siguientes direcciones:
MiMatriz(1), MiMatriz(2), MiMatriz(3) y MiMatriz(4).

En OpenOffice.org Basic, la expresión Option Base 1 no afecta el número de elementos en un arreglo,


como si sucede en VBA. Es el índice inicial el que se mueve en OpenOffice.org Basic. Mientras que la
declaración MiMatriz(3) crea tres valores enteros en VBA con los índices del 1 al 3, la misma declaración
en OpenOffice.org Basic crea cuatro valores enteros con los índices del 1 al 4.

Campos de datos multi-dimensionales


Además de los campos de datos de una sola dimensión, OpenOffice.org Basic también
soporta trabajar con campos de datos multi-dimensionales. Las dimensiones correspondientes
están separadas unas de otras por medio de comas. El ejemplo:

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

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.

Cambios dinámicos en las dimensiones de los campos de


datos
Los ejemplos previos están basados en los campos de datos de una dimensión específica.
También se pueden definir matrices en las cuales las dimensiones del campo de datos puede
cambiar dinámicamente. Por ejemplo, puede definir una matriz que para contener todas las
palabras que inician con la letra A. Como el número de palabras inicialmente es desconocido,
necesitará poder cambiar consecuentemente los límites de la matriz. Para hacer esto en
OpenOffice.org Basic, use la siguiente instrucción:
ReDim MiMatriz(10)

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

Cuando usa Preserve, asegúrese que el número de dimensiones y el tipo de la variable se


mantenga igual.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Alcance y tiempo de vida de las variables


Una variable en OpenOffice.org Basic tiene un alcance y un tiempo de vida limitado dentro
del cual puede ser leido y usado en otros fragmentos de programa. La cantidad de tiempo que
la variable es retenida, asi como la forma en que es accesada, depende de su localización
específica y del tipo.

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

Las variables locales solamente permanecen el tiempo en que se ejecuta la función o el


procedimiento, y luego son puestas de nuevo en cero. Cada vez que la función es llamada, los
valores que fueron generados anteriormente ya no están disponibles.
Para mantener los valores previos, puede definir una variable como Static:
Sub Prueba
Static 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

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

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

El valor de la variable A no es cambiado en la función Prueba, pero es incrementado en la


función Flip y decrementado en la función Flop. Ambos cambios son hechos a la variable
pública.
También puede usar la palabra clave Public en lugar del Dim para declarar variables
públicas:
Public A As Integer

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

También puede especificar el tipo de constante en la declaración:


Const B As Double = 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.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

MOD Operación de cociente (calcula el resto o sobrante de una división)

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.

OpenOffice.org Basic no soporta el operador Like de VBA

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 ... Then ... Else


La instrucción más común del control de flujo es la instrucción If, como se muestra en el
siguiente ejemplo:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

If A > 3 Then
B = 2
End If

La asignación B = 2 solamente ocurre cuando el valor de la variable A es mayor que tres.


Una variación de la instrucción If es la cláusula If/Else:
If A > 3 Then
B = 2
Else
B = 0
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

Si el valor de la variable A es igual a cero, a B le es asignado el valor 0. Si A es menor a 3


(pero no igual a cero), entonces a B es asignado el valor de 1. En todas las demás instancias
(esto es, si A es mayor a 3), a B le es asignado el valor de 2.

Select ... Case


La instrucción Select ... Case es una alternativa a la instrucción If en cascada y es
usada cuando necesita verificar un valor contra varias condiciones.
Select Case DiaSemana
Case 1:
Nombre = "Domingo"
Case 2:
Nombre = "Lunes"
Case 3:
Nombre = "Martes"
Case 4:
Nombre = "Miércoles"
Case 5:
Nombre = "Jueves"
Case 6:
Nombre = "Viernes"
Case 7:
Nombre = "Sábado"
End Select

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.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

Select Case Var


Case 1 To 5
' ...Var está entre los números 1 y cinco
Case 6, 7, 8
' ...Var es 6, 7, u 8
Case Var > 8 And Var < 11
' ...Var es mayor que 8 y menor que 11
Case Else
' Cualquier otra ocurrencia
End Select

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.

For ... Next


El ciclo For ... Next tiene un número fijo de pasos. El contador de ciclos define el
número de veces que el ciclo será ejecutado. En el siguiente ejemplo,
Dim I
For I = 1 to 10
' ... Parte central del ciclo
Next I

la variable I es el contador de ciclo, con un valor inicial de 1. El contador es incrementado en


uno al final de cada paso. Cuando la variable I sea igual a 10, el ciclo se detiene.
Si desea incrementar el contador de ciclos en otro valor distinto de 1 al final de cada paso,
use la función Step:
Dim I
For I = 1 To 10 Step 0.5
' ... Parte central del ciclo.
Next I

En el ejemplo anterior, el contador es incrementado en 0.5 al final de cada paso, y el ciclo es


ejecutado 19 veces.
También puede usar valores de pasos negativos:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

Se ejecuta el ciclo hasta que la condición no sea satisfecha.


3. Variante Do ... Loop While
Do
'Cuerpo del ciclo
Loop While A > 10

verifica la condición solamente después de que el primer ciclo se ejecutó y termina si la


condición es satisfecha.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

4. Variante Do ... Loop Until


Do
' Cuerpo el ciclo
Loop Until A > 10

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

Ejemplo de programación: Ordenando con ciclos anidados.


Hay muchas formas de usar ciclo, por ejemplo, para buscar en listas, valores de retorno, o
para ejecutar tareas matemáticas complejas. El siguiente ejemplo es un algoritmo que usa los
ciclos para ordenar una lista de nombres:
Sub Orden
Dim Entrada(1 To 10) As String
Dim Contador As Integer
Dim Contador2 As Integer
Dim Temp As String
Entrada(1) = "Patricia"
Entrada(2) = "José"
Entrada(3) = "Tomás"
Entrada(4) = "Miguel"
Entrada(5) = "David"
Entrada(6) = "Consuelo"
Entrada(7) = "Susana"
Entrada(8) = "Eduardo"
Entrada(9) = "Cristina"
Entrada(10) = "Juan"
For Contador = 1 To 10
For Contador2 = 1 To 10
If Entrada(Contador) > Entrada(Contador2) Then
Temp = Entrada(Contador)
Entrada(Contador) = Entrada(Contador2)
Entrada(Contador2) = Temp
End If
Next Contador2
Next Contador
For Contador = 1 To 10
Print Entrada(Contador)
Next Contador
End Sub

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

correcta. Por esta razón, este algoritmo es conocido como 3.

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

El valor de retorno es asignado usando una simple asignación. La asignación no


necesariamente tiene que estar ubicada al final de la función, puede ser hecha en cualquier
lugar de la función.
La función precedente puede ser llamada dentro de un programa de la siguiente manera:
Dim A
A = Prueba

El código define una variable A y le asigna el resultado de la función Prueba.


El valor de retorno puede ser sobreescrito diferentes veces dentro de la función. Como una
asignación de variable clásica, la función en este ejemplo retorna el último valor que le fue
asignado:

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.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

Function Prueba
Prueba = 12
'...
Prueba = 123
End Function

En este ejemplo, el valor de retorno es 123.


Si una asignación es detenida, la función retorna un valor cero (Número 0 para valores
numéricos y un blanco para cadenas).
El valor de retorno de una función puede ser de cualquier tipo. El tipo es declarado de la
misma manera que una variable:
Function Prueba As Integer
' ... Código de la función
End Function

Si la especificación de un valor explícito es detenida, entonces el tipo de datos de retorno es


asginado como Variant.

Terminando procedimientos y funciones prematuramente


En OpenOffice.org Basic, puede usar los comandos Exit Sub y Exit Function para
terminar un procedimiento o una función prematuramente, por ejemplo, para el manejo de
errores. Estos comandos detienen el procedimiento o la función y regresar el programa en el
punto en el cual el procedimiento o función fue llamado.
El siguiente ejemplo muestra como termina la implementación cuando la variable
OcurrioError tiene el valor de Verdadero.
Sub Prueba
Dim OcurrioError As Boolean
' ...
If OcurrioError Then
Exit Sub
End If
' ...
End Sub

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

el parámetro A es obligatorio, mientras el parámetro B es opcional.

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

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

El ejemplo primero verifica cuando el parámetro B ha sido pasado y, si es necesario, pasa el


mismo valor a la variable interna B_Local. Si el parámetro correspondiente no está presente,
entonces un valor por defecto (en este caso, el valor 0) es pasado a B_Local en lugar del
parámetro pasado.

La opción provista en VBA para definir valores por defecto para los parámetros por defecto no está
soportada en OpenOffice.org Basic.

La palabra clave ParamArray presente en VBA 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

La línea On Error Goto ManejoError define cómo OpenOffice.org Basic procede en


un evento de error. El Goto ManejoError asegura que OpenOffice.org Basic salga de la
actual línea de programación y luego ejecute el código en ManejoError:

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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 

Consultas referentes a la información de errores


En el manejo de errores, es útil tener descripción del error, cómo, cuando y por qué ocurre el
error:
• La variable Err contiene el número de errores que han ocurrido.
• La variable Error$ contiene una descripción del error.
• La variable Erl contiene la línea en la cual ocurrió el error.
La llamada
MsgBox "Error " & Err & ": " & Error$ & " (línea : " & Erl & ")"

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.

El estado de la información se mantiene válida hasta que el programa encuentre un Resume


o un comando On Error, entonces la información es reseteada o restaurada.

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.

Consejos para el manejo de errores estructurado


Tanto el comando On Error, como el comando de retorno Resume, son variantes de la

Capítulo 2 El lenguaje de OpenOffice.org Basic 


Capítulo 2 El lenguaje de OpenOffice.org Basic 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

         

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.

Conversiones de tipo implícito y explícito


La manera más fácil de cambiar una variable de un tipo a otro es mediante el uso de una
asignación
Dim A As String
Dim B As Integer
B = 101
A = B

En este ejemplo, la variable A es una cadena, y la variable B es un entero. OpenOffice.org


Basic se asegura que la variable B sea convertida a una cadena durante la asignación de la
variable A. Esta conversión es mucho más elaborada de lo que parece: El entero B
permanece en la memoria de trabajo en la forma de un byte doble de entero largo. A, en
cambio, es una cadena, y la computadora guarda como un o dos bytes de largo para cada
carácter (cada número). Por eso, antes de copiar el contenido de B en A, B tiene que ser
convertido al formato interno de A.
A diferencia de otros lenguajes de programación, Basic realiza este tipo de conversiones
automáticamente. Sin embargo, esto puede tener consecuencias fatales. Después de una
inspección detallada, la siguiente secuencia de código:
Dim A As String
Dim B As Integer
Dim C As Integer
B = 1
C = 1
A = B + C

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:

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Verificando el contenido de las variables


En algunas instancias, la fecha no puede ser convertida:
Dim A As String
Dim B As Date
A = "Test"
B = A 'Genera un mensaje de error.

En el ejemplo mostrado, la asignación de la cadena test a la variable de fecha no tiene


sentido, por eso el intérprete de Basic genera un error. Lo mismo aplica cuando se intenta
asignar una cadena a una variable boleana:
Dim A As String
Dim B As Boolean
A = "Test"
B = A 'Genera un mensaje de error.

De nuevo, el intérprete de Basic genera un error.


Estos mensajes de error pueden ser evitados al verificar el programa antes de una asignación,
para establecer cuando el contenido de una variable a ser asignada concuerda con el tipo de la
variable destino.
OpenOffice.org Basic provee las siguientes funciones de verificación para este propósito:
• IsNumeric(Valor) – verifica cuando el valor es un número.
• IsDate(Valor) – verifica cuando el valor es una fecha.
• IsArray(Valor) – verifica cuando el valor es una matriz.
Estas funciones son especialmente útiles cuando se requiera entrada del usuario. Por ejemplo,
puede verificar que el valor que se ha digitado es un número o fecha válido.
If IsNumeric(EntradaUsuario) Then
EntradaValida = EntradaUsuario
Else
EntradaValida = 0
Msgbox "Entrada no válida."
End If

En el ejemplo anterior, si la variable EntradaUsuario contiene un valor numérico válido,


entonces es asignado a la variable EntradaValida. Si EntradaUsuario no contiene
un número válido, se le asigna el valor 0 a EntradaValida y un mensaje de error es
regresado.
Mientras existen las funciones para verificar números, detalles de fechas y matrices en Basic,
no existe una función para verificar valores boleanos. Sin embargo, esta funcionalidad puede

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

ser imitada con la función IsBoolean:


Function IsBoolean(Valor As Variant) As Boolean
On Error Goto ErrorBoleano:
Dim Temporal As Boolean

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)

Por conversión, la expresión


MiCadena = Chr(13)

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Accesando partes de una cadena


OpenOffice.org Basic provee cuatro funciones que retornan cadenas parciales:
• Left(MiCadena, Largo) – retorna los primeros Largo caracteres de MiCadena.
• Right(MiCadena, Largo) – retorna los últimos Largo caracteres de MiCadena.
• Mid(MiCadena, Inicio, Largo) – retorna los primeros Largo caracteres de
MiCadena desde la posición Inicio.
• Len(MiCadena) – retorna el número de caracteres de MiCadena.
Aquí hay algunos ejemplos de llamadas a estas funciones:
Dim MiCadena As String
Dim MiResultado As String
Dim MiTamano As String
MiCadena = "Esto es una prueba"
MiResultado = Left(MiCadena, 5) ' Devuelve la cadena "Esto "
MiResultado = Right(MiCadena, 5) ' Devuelve la cadena "prueba"
Miresultado = Mid(MiCadena, 8, 5) ' Devuelve la cadena "una p"
MiLargo = Len(MiCadena) ' Devuelve el valor 18

Búsqueda y reemplazo
OpenOffice.org Basic provee la función InStr para buscar cadenas parciales dentro de otra
cadena:
CadenaResultado = InStr (CadenaBuscar, MiCadena)

El parámetro CadenaBuscar especifica la cadena que será buscada en MiCadena. La función


retorna un número que contiene la posición en la cual CadenaBuscar aparece dentro de
MiCadena. Si desea encontrar otras ocurrencias para la cadena, la función también provee la
oportunidad de especificar opcionalmente la posición inicial desde la cual OpenOffice.org
Basic empezará la búsqueda. En este caso la sintaxis de la función es:
CadenaResultado = InStr (PosicionInicial, 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:

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

Function Reemplazar(CadFuente As String, CadBuscar As String, NuevParte As


String)
Dim Resultado As String
Dim PosInicia As String
Dim PosActual As String
Resultado = ""
PosInicia = 1
PosActual = 1
If Buscar = "" Then
Resultado = CadFuente
Else
Do While PosActual <> 0 Then
PosActual = InStr(PosInicia, CadFuente, CadBuscar)
If PosActual <> 0 Then
Resultado = Resultado + Mid(CadFuente, PosInicia, _
PosActual – PosInicia)
Resultado = Resultado + NuevParte
Else
Resultado = Resultado + Len(CadBuscar)
End If ' PosActual <> 0
Loop
End If
Reemplazar = Resultado
End Function

La función busca dentro de la cadena transferida CadBuscar en un ciclo por significado


dentro del término original CadFuente. Si encuentra el término de búsqueda, toma la parte
antes de la expresión y la escribe dentro de la variable temporal Resultado. Agrega la
sección NuevParte en el punto del término de búsqueda en Busqueda. Si no se
encuentran más ocurrencias del término de búsqueda, la función establece qué parte de la
cadena permanece intacta y se agrega a la variable temporal de retorno. Retorna la cadena
producida de esta manera como el resultado del proceso de reemplazo.
Desde que el reemplazo de partes de las secuencas de caracteres es una de las funciones más
usadas, la función Mid en OpenOffice.org Basic ha sido extendida de manera que haga esta
tarea automáticamente. El siguiente ejemplo:
Dim MiCadena As String
MiCadena = "Esto era mi texto"
MiCadena = Mid(MiCadena, 6, 3, "es")

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Especicación de los detalles de fecha y hora dentro del


código del programa
Puede asignar una fecha a una variable de fecha mediante la asignación de una simple
cadena.

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

Dim MiFecha As Date


MiFecha = "1.1.2002"

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.

Extrayéndo detalles de fecha y hora.


Las siguientes funciones forman parte de la familia de las funciones DateSerial y
TimeSerial:
• Day(MiFecha) – Retorna el día del mes desde MiFecha.
• Month(MiFecha) – Retorna el mes desde MiFecha.
• Year(MiFecha) – Retorna el año desde MiFecha.
• Weekday(MiFecha) – Retorna el número del día de la semana desde MiFecha.
• Hour(MiHora) – Retorna la hora desde MiHora.
• Minute(MiHora) – Retorna los minutos desde MiHora.
• Second(MiHora) – Retorna los segundos desde MiHora.
Estas funciones extraen secciones de la fecha y hora desde una variable de fecha específica.
El ejemplo:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim MiFecha As Date


' ... inicializa MiFecha
If Year(MiFecha) = 2004 Then
' ... La fecha especificada esta dentro del año 2004
End If

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

Verifica cuando MiHora esta entre 12 y 14 horas.


La función Weekday retorna el número del día de la semana de una fecha dada:
Dim MiFecha As Date
Dim Nombre As String
' ... Inicializa el valor de MiFecha
Select Case Weekday(MiFecha)
Case 1:
Nombre = "Domingo"
Case 2:
Nombre = "Lunes"
Case 3:
Nombre = "Martes"
Case 4:
Nombre = "Miércoles"
Case 5:
Nombre = "Jueves"
Case 6:
Nombre = "Viernes"
Case 7:
Nombre = "Sábado"
End Select

Nota: El domingo es considerado el primer día de la semana.

Accesando la fecha y la hora del sistema


Las siguientes funciones están disponibles en OpenOffice.org Basic para recuperar la fecha y
la hora del sistema:
• Date – retorna la fecha actual.
• Time – retorna la hora actual.
• Now – retorna el punto presente en el tiempo (fecha y hora como un valor combinado)

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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)

While Siguiente <> ""


Archivos = Archivos & Chr(13) & Siguiente
Siguiente = Dir
Wend
Msgbox Archivos
End Sub

Cuando se consulta en OpenOffice.org Basic, a diferencia de VBA, usando el parámetro 16 en la función


Dir retornará solamente los subdirectorios. En VBA, la función también retorna los nombres de los
archivos de manera que una verificación posterior es necesaria para recuperar solamente los directorios.

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.

Creando y borrando directorios


OpenOffice.org Basic provee la función MkDir para la creación de directorios
MkDir ("C:\Subdir")

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")

crea los directorios C:\SubDir1\SubDir2 y C:\SubDir1\SubDir2\SubDir3.


La función RmDir borra directorios:
RmDir ("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.

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

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

Copiando, renombrando, borrando y verificando la existencia de


archivos
La llamada
FileCopy (Fuente, Destino)

crea una copia del archivo Fuente en el nombre de Destino.


Con la ayuda de la función
Name ViejoNombre As NuevoNombre

puede renombrar el archivo ViejoNombre con NuevoNombre. La sintaxis de palabra


clave As, y el hecho de que no es usada la coma, regresa a las raices del lenguaje Basic.
La llamada
Kill (NombreArchivo)

borra el NombreArchivo archivo. Si desea borrar un directorio (incluyéndo sus archivos)


use la función RmDir.
La función FileExist puede ser usada para verificar la existencia de un archivo:
If FileExist(NombreArchivo) Then
MsgBox "El archivo existe"
End If

Leyéndo y cambiando propiedades de archivos


Cuando se trabaja con archivos, en ocasiones es importante poder establecer las propiedades
de los archivos, la fecha y hora del último cambio y el tamaño del mismo.
La llamada
Dim Atributos As Integer
Atributos = GetAttr(NombreArchivo)

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Atributos As Integer


Dim Descripcion As String
Atributos = GetAttr("prueba.txt")
If (Atributos AND 1) > 0 Then
Descripcion = descripcion & "Archivo de solo-lectura"
End If
If (Atributos AND 16) > 0 Then
Descripcion = descripcion & " Directorio"
End If
If Descripcion = "" Then
Descripcion = " Normal"
End If
Msgbox Descripcion

determina la máscara de bits del archivo prueba.txt y verifica si es de sólo lectura o si es


un directorio. Si ninguna de estas aplica, se le asigna a Descripcion la cadena de
"Normal".

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.

La función SetAttr permite el cambio de las propiedades de un archivo. La llamada


SetAttr("prueba.txt",1)

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 fecha y la hora de la última modificación de un archivo esta provista por la función


FileDateTime. La fecha está formateada de acuerdo con las especificaciones del país
usado en su sistema.
FileDateTime("prueba.txt") 'Provee la fecha de la última modificación

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.

Escribiendo y leyéndo archivos de texto


OpenOffice.org Basic provee un amplio rango de métodos para leer y escribir en archivos de
texto. Las siguientes explicaciones están relacionadas para el trabajo con archivos de texto
(no documentos de texto).
Escribiéndo archivos de texto
Antes de que un archivo sea accesado, primero debe ser abierto. Para hacer esto, se necesita
un manejador de archivo, el cual identifica el archivo en los siguientes accesos.
La función FreeFile es usada para crear un manejador de archivo disponible. El
manejador es usado como un parámetro para la instrucción Open, la cual abre el archivo.

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

Para abrir un archivo este puede ser especificado como un archivo de texto, la llamada Open
es:
Open NombreArchivo For OutPut As #NumArchivo

NombreArchivo es una cadena conteniendo el nombre del archivo. NumArchivo es el


manejador creado con la función FreeFile.
Una vez que el archivo está abierto, la instrucción Print puede ser descrito línea por línea:
Print #NumArchivo, "Esto es una línea de prueba."

NumArchivo también es el manejador de archivo aquí. El segundo parámetro especifica el


texto que será guardado como una línea en el archivo de texto.
Una vez que el proceso de escritura ha sido completado, el archivo debe ser cerrado usando
la llamada Close
Close #NumArchivo

De nuevo, aquí debe ser especificado el manejador del archivo.


El siguiente ejemplo muestra como es abierto un archivo de texto, escrito y cerrado:
Dim NumArchivo As Integer
Dim LineaActual As String
Dim NombreArchivo As String

NombreArchivo = "c:\datos.txt" ' Define el nombre del archivo


NumArchivo = FreeFile ' Establece el manejador de archivo libre
Open NombreArchivo For OutPut As #NumArchivo 'Abre el archivo para
'escritura
Print #NumArchivo, "Es una línea de texto" ' Guarda la línea
Print #NumArchivo, "Otra línea de texto" ' Guarda la línea
Close #NumArchivo ' Cierra el archivo

Leyéndo archivos de texto


Los archivos de texto son leídos de la misma manera en que ellos son escritos. La instrucción
Open usada para abrir el archivo contiene la expresión For Input en lugar de la expresión
For Output, en lugar del comando Print para escribir datos, la instrucción Line
Input se usa para leer los datos.
Finalmente, cuando llama un archivo de texto, la instrucción
eof(NumArchivo)

es usada para verificar cuando se ha encontrado el final del archivo.


El siguiente ejemplo muestra como puede ser leido un archivo de texto:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim NumArchivo As Integer


Dim LineaActual As String
Dim Archivo As String
Dim Msg As String
' Define el nombre del archivo
NombreArchivo = "C:\datos.txt"

' Establece el manejador de archivo libre.


NumArchivo = FreeFile
' Abre el archivo (modo de lectura)
Open NombreArchivo For Input As NumArchivo
' Verifica cuando se ha alcanzado el final del archivo
Do While not eof(NumArchivo)
' Lee una línea
Line Input #NumArchivo, LineaActual
If LineaActual <> "" Then
Msg = Msg & LineaActual & Chr(13)
End If
Loop
' Cierra el archivo
Close #NumArchivo
Msgbox Msg

Las líneas individuales son recuperadas en el ciclo Do While, guardándolo en la variable


Msg, y desplegada al final en un diálogo de mensaje.
Mensajes y cuadro de diálogo de entrada
OpenOffice.org Basic provee las funciones Msgbox e Inputbox para las comunicaciones
básicas con el usuario.
Desplegando mensajes
Msgbox despliega un cuadro de información básico, el cual puede tener uno o más botones.
En su forma más simple
MsgBox "Esta es una prueba de información"

el Msgbox solamente contiene el texto y un botón de Aceptar.


La apariencia del cuadro de información puede ser cambiada usando un parámetro. El
parámetro provee una opción para agregar botones, definir los botónes pre-asignados, y
agregar un símbolo de información. Los valores para seleccionar los botón son:
• 0 – botón Aceptar.
• 1 – botones de Aceptar y Cancelar.
• 2 – botones de Cancelar y Reintentar.
• 3 – botones de Si, No y Cancelar.
• 4 – botones de Si y No.
• 5 – botones de Reintentar y Cancelar.

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

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

despliega un diálogo de información con los botones de Si – No (valor 4), en el cual el


segundo botón (No) es el botón por defecto (valor 256) y también despliega un signo de
pregunta (valor 32), 4+256+32= 292.
Si un cuadro de información contiene varios botones, un valor de retorno debe ser preguntado
para saber cual botón ha sido presionado. Los siguientes valores de retorno están disponibles
en esta instancia:
• 1 – Aceptar.
• 2 – Cancelar.
• 4 – Reintentar.
• 5 – Ignorar.
• 6 – Si.
• 7 – No.
En el ejemplo previo, puede verificar los valores de retorno de esta manera:
If Msgbox ("Desea continuar?", 292) = 6 Then
' Fue presionado el botón SI.
Else
' Fue presionado el botón NO.
End If

Adicionalmente al texto de información y el parámetro que arregla el cuadro de información,


Msgbox también permite un tercer parámetro, que define el texto para el título del cuadro:
Msgbox "Desea continuar?", 292, "Pregunta del sistema"

Si no se especifica ningún título, el valor por defecto es "soffice".

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Cuadro de entrada para obtener cadenas simples


La función Inputbox pregunta cadenas simples al usuario. Es sin embargo una alternativa
simple a configurar un diálogo. Inputbox recibe tres parámetros normales:
• Un texto de información,
• un título para el cuadro de diálogo,
• El valor por defecto que será agregado en el area de entrada.
Valor = Inputbox("Ingrese un valor: ", "Prueba", "Valor por defecto")

Como valor de retorno, Inputbox provee la cadena que ha digitado el usuario.

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)

Ruta define la ruta de el programa a ser ejecutado. Estiloventana define la ventana en


la que el programa será iniciado. Los siguientes valores son posibles:
• 0 – El programa recibe el foco y es iniciado en una ventana oculta.
• 1 – El programa recibe el foco y es iniciado en una ventana de tamaño normal.
• 2 – El programa recibe el foco y es iniciado en una ventana minimizada.
• 3 – El programa recibe el foco y es iniciado en una ventana maximizada.
• 4 – El programa es iniciado en una ventana de tamaño normal sin recibir el foco.
• 6 – El programa es iniciado en una ventana minimizada y el foco se mantiene en la
ventana actual.
• 10 – El programa es iniciado en modo de pantalla completa.
El tercer parámetro, Parametro, permite que parámetros de la línea de comando sean
transferidos al programa a ser iniciado.

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

Capítulo 3 La librería de ejecución de OpenOffice.org Basic 


Capítulo 3 La librería de ejecución de OpenOffice.org Basic 

Wait 2000

especifica una interrupción de 2 segundos (2000 milisegundos)

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")

determina la varible de ambiente para el directorio de archivos temporal es para el sistema


operativo.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

        

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.

Red de Objetos Universal (UNO)


OpenOffice.org provee una interface de programación en la forma de Red de Objetos
Universal (UNO). Esta es una interface de programación orientada a objetos la cual
OpenOffice.org sub-divide en varios objetos por medio de la cual asegura el acceso
controlado por programa al paquete de Office.
Desde que OpenOffice.org Basic es un lenguaje de programación por procedimientos,
necesitará la declaración de una variable para el objeto asociado. La declaración es hecha
usando la instrucción Dim (vea capítulo 2). El tipo Object debe ser usado para declarar la
variable de tipo objeto.
Dim Obj As Object

La llamada declara una variable del tipo objeto llamada Obj.


La variable de objeto creada debe ser inicializada de manera que pueda ser usada. Esto puede
ser hecho usando la función CreateUnoService:
Obj = createUnoService("com.sun.star.frame.Desktop")

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.

4 N.T.: por las siglas de Universal Network Objects

Capítulo 4 Introducción a la API de OpenOffice.org 


Capítulo 4Introducción a la API de OpenOffice.org 

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Módulos, servicios e interfaces


OpenOffice.org provee cientos de servicios. Para proveer un vistazo de estos servicios, estos
han sido combinados en módulos. Los módulos no tienen otra importancia funcional para los
programadores de OpenOffice.org Basic. Cuando se especifica un nombre de servicio, solo el
nombre del módulo tiene importancia porque va incluido dentro del nombre del servicio. El
nombre completo de un servicio consiste en la expresion com.sun.star, que especifica
que es un servicio en OpenOffice.org, seguido del nombre del módulo, como frame, y
finalmente el nombre actual del servicio, como Desktop. El nombre completo del ejemplo
nombrado sería:
com.sun.star.frame.Desktop
Adicionalmente a los términos de módulos y servicios, UNO introduce el término
"interface". Mientras este término es familiar para los programadores de Java, no es usado en
Basic.
Una interface combina varios métodos. En el sentido estricto de la palabra, un servicio UNO
no soporta métodos, sino mas bien interfaces, dentro de las cuales se proveen diferentes
métodos. En otras palabras, los métodos son asignados (como combinaciones) a los servicios
en interfaces. Este detalle puede ser de interes en especial para los programadores de C++ y
Java, porque en estos lenguajes, se necesita una interface para llamar a un método. En
OpenOffice.org Basic, esto es irrelevante. Aquí, los métodos son llamados directamente por
el significado del objeto relevante.
Sin embargo, para una comprensión de la API, es útil tener a mano la asignación de los
métodos a varias interfaces, porque varias interfaces son usadas en los diferentes servicios. Si
está familiarizado con una interface, entonces puede trasferir su conocimiento de un servicio
a otro.
Algunas de las interfaces centrales son usadas frecuentemente y que están mostradas al final
de este capítulo, disparadas por diferentes servicios.

Herramientas para el trabajo con UNO


La pregunta que permanece es a cuales objetos – o servicios si vamos a mantener la
terminología de UNO – soportan cuales propiedades, métodos e interfaces y cómo pueden ser
determinadas. Adicionalmente a esta guía, puede obtener más información acerca de los
objetos de las siguientes fuentes: el método supportsService, los métodos de
depuración asi como la guía del desarrollador, y la referencia API.

Capítulo 4 Introducción a la API de OpenOffice.org 


Capítulo 4Introducción a la API de OpenOffice.org 

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")

por ejemplo, determina si el objeto TextElement soporta el servicio


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

Un vistazo de algunas interfaces centrales.


Algunas interfaces de OpenOffice.org pueden ser encontradas en muchas partes de la API de
OpenOffice.org. Definen conjuntos de métodos para tareas abstractas las cuales pueden ser
aplicadas a varios problemas. Aquí encontrará un vistazo de las más comunes de estas
interfaces.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Creando objetos dependientes del contexto


La API de OpenOffice.org provee dos opciones para crear objetos. Uno puede ser encontrado
en la función mencionada al inicio de este capítulo createUnoService.
CreateUnoService crea un objeto que puede ser usado universalmente. Estos objetos
también son llamados servicios independientes del contexto.
Adicionalmente a los servicios independientes del contexto, también están los servicios
dependientes del contexto estos objetos solamente son útiles cuando son usados
conjuntamente con otro objeto. Un objeto de dibujo para un documento de hoja de cálculo,
por ejemplo, solamente puede existir conjuntamente con este documento.

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")

Acceso por nombre a objetos subordinados


Las interfaces XNameAccess y XNameContainer son usados en objetos que contienen
objetos subordinados, los cuales pueden ser direccionados usando un lenguaje natural.
Mientras que XNameAccess permite accesar objetos individuales, XNameContainer
toma la inserción, modificación y borrado de elementos.

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:

Capítulo 4 Introducción a la API de OpenOffice.org 


Capítulo 4Introducción a la API de OpenOffice.org 

Dim Sheets As Object


Dim Sheet As Object
Sheets = SpreadSheet.Sheets
Sheet = Sheets.getByName("Sheet1")

El método getElementNames provee un vistazo de los nombres de todos los elementos.


Como resultado, retorna un campo de datos conteniendo los nombres. El siguiente ejemplo
muestra como todos los nombres de los elementos de una hoja de cálculo pueden ser
determinados y desplegados en un ciclo:
Dim Sheets As Object
Dim SheetNames
Dim I As Integer
Sheets = SpreadSheet.Sheets
SheetNames = Sheets.getElementNames
For I = Lbound(SheetNames) To Ubound(SheetNames)
Msgbox SheetNames(I)
Next I

El método hasByName de la interface XNameAccess revela los objetos subordinados


existentes en un objeto básico con un nombre particular. El siguiente ejemplo despliega un
mensaje que informa al usuario cuando el objeto SpreadSheet contiene una página con el
nombre de Sheet1:
Dim Sheets As Object
Sheets = SpreadSheet.Sheets
If Sheets.HasByName("Sheet1") Then
Msgbox = "Está disponible Sheet1"
Else
Msgbox = "No está disponible Sheet1"
End If

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")

La línea insertByName agrega el estilo NewStyle bajo el nombre de el mismo nombre


en el objeto ParagraphStyles. La línea replaceByName cambia el objeto anterior a
ChangingStyle dentro de NewStyle. Finalmente, la llamada a removeByName
remueve el objeto detrás de OldStyle desde ParagraphStyles.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Acceso basado en índices a objetos subordinados


Las interfaces XIndexAccess y XIndexContainer son usadas en objetos que
contienen objetos subordinados que pueden ser direccionados usando un índice.
XIndexAccess provee los métodos para el acceso de objetos individuales.
XIndexContainer provee los métodos para insertar y remover elementos.
La interface com.sun.star.container.XIndexAccess
XIndexAccess provee los métodos getByIndex y GetCount para llamar los objetos
subordinados. GetByIndex provee un objeto con un índice particular. GetCount retorna
cuantos objetos están disponibles.
Dim Sheets As Object
Dim Sheet As Object
Dim I As Integer
Sheets = SpreadSheet.Sheets
For I = 0 To Sheets.getCount() - 1
Sheet = Sheets.getByIndex(I)
' Editar la hoja
Next I

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.

Acceso iteractivo a objetos subordinados


En algunas instancias, un objeto pueden contener una lista de objetos subordinados que no
pueden ser accesados por un nombre o por un índice. En estas situaciones, son apropiadas las
interfaces XEnumeration y XEnumerationAccess. Ellas proveen un mecanismo por
medio del cual todos los elementos subordinados de un objeto pueden ser pasados, paso a
paso, sin tener que usar un direccionamiento directo.
Las interfaces com.sun.star.container.XEnumeration y
XEnumerationAccess
El objeto básico debe proveer la interface XenumerationAccess, la cual sólo contiene el
método CreateEnumeration. Esto retorna un objeto auxiliar, el cual provee la interface
Xenumeration con los métodos hasMoreElements y NextElement. Por medio de
estos, se tendrá accesso a los objetos subordinados.

Capítulo 4 Introducción a la API de OpenOffice.org 


Capítulo 4Introducción a la API de OpenOffice.org 

El siguiente ejemplo, pasa por los párrafos de un texto:


Dim ParagraphEnumeration As Object
Dim Paragraph As Object
ParagraphEnumeration = Textdoc.Text.createEnumeration
While ParagraphEnumeration.hasMoreElements()
Paragraph = ParagraphEnumeration.nextElement()
Wend

El ejemplo primero crea el objeto auxiliar ParagraphEnumeration. Este retorna


gradualmente los párrafo individuales del texto en un ciclo. El ciclo es terminado tan pronto
como el método hasMoreElements retorna el valor Falso, señalando que el final del texto
ha sido encontrado.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

    



La API de OpenOffice.org ha sido estructurada de manera que muchas de sus partes hacen
posible que sean usadas para diferentes tareas. Esto incluye las interfaces y servicios para
crear, abrir, salvar, convertir e imprimir documentos y la administración de plantillas. Desde
que estas areas de funciones están disponibles en todos los tipos de documentos, están
explicadas de primero en este capítulo.

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.

Capítulo 5 Trabajando con documentos OpenOffice.org 


Capítulo 5Trabajando con documentos OpenOffice.org 

De la misma manera que el documento activo de Word es accesado por medio de


Application.ActiveDocument y en Excel por medio de Application.ActiveWorkBook, en
StarOffice, StarDesktop es el responsable de esta tarea. En OpenOffice.org el documento activo es
accesado por medio de la propiedad StarDesktop.CurrentComponent.

Información básica acerca de los documentos en


OpenOffice.org
Cuando se trabaja con documentos de OpenOffice.org, es útil entender los puntos básicos de
la administración de documentos en OpenOffice.org. Esto incluye la forma en que están
estructurados los nombres de archivos para los documentos de OpenOffice.org, también el
formato en que estos archivos están salvados.
Nombres de archivos en notación URL
Desde que OpenOffice.org es una aplicación independiente de las plataformas, usa la
notación URL (la cual es independiente del sistema operativo), como está definida en
Internet Standard RFC 1738 para los nombres de archivos. El estandar de nombres de
archivos en este sistema empiezan con el prefijo
file:///
seguido de la ruta local. Si el nombre del archivo contiene subdirectorios, están separados por
un slash sencillo hacia adelante, no el backslash usado normalmente bajo Windows. La
siguiente ruta hace referencia al archivo prueba.sxw en el directorio doc en la unidad C:
file:///C:/doc/prueba.sxw
Para convertir los nombres locales a una URL, OpenOffice.org provee la función
ConvertToURL. Para convertir una URL en un nombre de archivo local, OpenOffice.org
provee la función ConvertFromURL:
Msgbox ConvertToURL("C:\doc\prueba.sxw")
' devuelve file:///C:/doc/prueba.sxw

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Crear, abrir e importar documentos


Los documentos son abiertos, importados y creados usando el método
StarDesktop.LoadComponentFromURL(URL, Frame, _
SearchFlags, FileProperties)

El primer parámetro de LoadComponentFromURL especifica la URL del archivo asociado.


El segundo parámetro espera el nombre para el objeto marco de la ventana que
OpenOffice.org crea internamente para su administración. El nombre predefinido _blank es
el usado normalmente aquí, y se asegura de que OpenOffice.org cree una nueva ventana.
Alternativamente, también se puede especificar _hidden, asegura que el documento
correspondiente sea cargado, pero que no permanezca visible.
Usando estos parámetros, el usuario puede abrir un documento OpenOffice.org, y comodines
(valores tontos) pueden ser asignados a los dos últimos parámetros.
Dim Doc As Object
Dim Url As String
Dim Dummy()

Url = "file:///C:/prueba.sxw"

Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

La llamada anterior abre el archivo prueba.sxw y lo despliega en una nueva ventana.


Cualquier número de documentos puede ser abierto de esta manera en OpenOffice.org Basic
y puede ser editado con los objetos de documentos retornados.

StarDesktop.loadComponentFromURL suprime los métodos Documents.Add y Documents.Open de la


antigua StarOffice API.

Reemplazando el contenido de una ventana de documento


Los valores de los nombres _blank y _hidden para el parámetro Frame se asegura que
OpenOffice.org crea una nueva ventana para cada llamada de loadComponentFromURL.
En algunas situaciones, es útil reemplazar el contenido de una ventana existente. En este
caso, el marco del objeto para la ventana debe contener un nombre explícito. Nótese que este
nombre no empieza con rayabajo (underscore). De la misma forma, el parámetro debe ser
puesto de manera al correspondiente espacio de trabajo creado, si este aun no existe. La
constante correspondiente para SearchFlags es:
SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
com.sun.star.frame.FrameSearchFlag.ALL
El siguiente ejemplo muestra como el contenido de una ventana abierta puede ser
reemplazado con la ayuda del parámetro de marco y SearchFlags:

Capítulo 5 Trabajando con documentos OpenOffice.org 


Capítulo 5Trabajando con documentos OpenOffice.org 

Dim Doc As Object


Dim Dummy()
Dim URL As String
Dim SearchFlags As Long
SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
com.sun.star.frame.FrameSearchFlag.ALL
URL = "file:///C:/prueba.sxw"
Doc = StarDesktop.loadComponentFromURL(URL, "MyFrame", _
SearchFlags, Dummy)
Msgbox "Presione Aceptar para desplegar el segundo documento"
URL = "file:///C:/prueba2.sxw"
Doc = StarDesktop.loadComponentFromURL(URL, "MyFrame", _
SearchFlags, Dummy)

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim FileProperties(0) As New com.sun.star.beans.PropertyValues
Dim Url As String
Url = "file:///C:/csv.doc"
FileProperties(0) = "FilterName"
FileProperties(0) = "scalc: Text – txt – csv (OpenOffice.org Calc)"
doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, _
FileProperties())

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())

La llamada crea un documento OpenOffice.org Writer nuevo y vacio.

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.

Salvando y exportando documentos


Los documentos OpenOffice.org son salvados directamente por medio del objeto de
documento. El método Store de la interface com.sun.star.frame.XStorable está
disponible para este propósito:

Capítulo 5 Trabajando con documentos OpenOffice.org 


Capítulo 5Trabajando con documentos OpenOffice.org 

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())

Adicionalmente a los métodos anteriores, com.sun.star.frame.XStorable también


provee algunos métodos de ayuda que pueden ser útiles a la hora de guardar documentos.
Estos son:
• hasLocation() - especifica cuando el documento ya tiene asignada una URL.
• IsReadOnly() - especifica cuando el documento tiene la protección de sólo lectura.
• IsModified() - especifica cuando un documento ha sido cambiado desde la última vez
que fue gardado.
El código para salvar un documeto se puede extender por estas opciones de manera que el
documento sea salvado solamente si ha sido modificado y que el nombre de archivo sea
preguntado solamente cuando se requiere.
If (Doc.IsModified) Then
If (Doc.HasLocation And (Not Doc.isReadOnly)) Then
Doc.Store
Else
Doc.StoreAsURL(URL, Dummy())
End If
End If

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

\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())

Como en el caso del método loadComponentFromURL, el parámetro Dummy es un


campo de datos PropertyValue por medio del cual OpenOffice.org puede especificar
algunas opciones para la impresión.
Las opciones del método Print
El método Print espera un campo de datos PropertyValue como un parámetro, que
refleja los parámetros del cuadro de diálogo de impresión de OpenOffice.org
• CopyCount (Integer) – especifica el número de copias a imprimir.
• FileName (String) – imprime el documento en el archivo especificado.
• Collate (Boolean) – advierte a la impresora que ordene las páginas de las copias.
• Sort (Boolean) – Ordena las páginas cuando se imprimen varias copias
(CopyCount>1).

Capítulo 5 Trabajando con documentos OpenOffice.org 


Capítulo 5Trabajando con documentos OpenOffice.org 

• 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())

Selección de impresora y parámetros


La interface com.sun.star.view.XPrintable provee una propiedad Printer, la
cual selecciona la impresora. Esta propiedad recibe un campo de datos PropertyValue
con las siguientes configuraciones:
• Name (String) – especifica el nombre de la impresora.
• PaperOrientation (enum) – especifica la orientación de papel (El valor
com.sun.star.view.PaperOrientation.PORTAIT para impresión vertical, y
el valor com.sun.star.view.PaperOrientation.LANDSCAPE para el formato
horizontal)
• PaperFormat (Enum) – especifica el formato del papel (por ejemplo,
com.sun.star.view.PaperFormat.A4 para el formato A4 o
com.sun.star.view.PaperFormat.Letter para el tamaño carta)
• PaperSize (Size) – Especifica el tamaño del papel en centésimas de milímetro.
El siguiente ejemplo muestra como se puede cambiar de impresora y puesto el tamaño del
papel con la ayuda de la propiedad Printer:
Dim Doc As Object
Dim PrinterProperties(1) As New com.sun.star.beans.PropertyValue
Dim PaperSize As New com.sun.star.awt.Size

PaperSize.Width=20000 ' corresponde a 20 cm.


PaperSize.Heigth=20000 ' Corresponde a 20 cm
PrinterProperties(0).Name="Name"
PrinterProperties(0).Value="HP Deskjet 400 (Monochrome)"
PrinterProperties(1).Name="PaperSize"
PrinterProperties(1).Value=PaperSize
Doc.Printer=PrinterProperties()

El ejemplo define un objeto llamado PaperSize del tipo com.sun.star.awt.Size.


Esto es necesario para especificar el tamaño del papel. También crea dos campos de datos
para PropertyValues llamadas PrinterProperties. Este campo de datos es
inicializado con los valores que se le van a asignar a la propiedad Printer. Desde el punto
de vista de UNO, Printer no es una propiedad real sino imitada.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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:

Capítulo 5 Trabajando con documentos OpenOffice.org 


Capítulo 5Trabajando con documentos OpenOffice.org 

Dim Doc As Object


Dim Sheet As Object
Dim StyleFamilies As Object
Dim CellStyles As Object
Dim CellStyle As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
CellStyles = StyleFamilies.getByName("CellStyles")
For I = 0 To CellStyles.Count – 1
CellStyles = CellStyle(I)
Msgbox CellStyle.Name
Next I

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.

Detalles sobre varias opciones de formato


Cada tipo de plantilla provee un rango de propiedades individuales de formato. Aquí hay un
vistazo de las propiedades de formateo más importantes y los puntos en las que están
explicadas:
• Propiedades de caracteres, capítulo 6, documentos de texto
servicio com.sun.star.style.CharacterProperties
• Propiedades de párrafos, capítulo 6, documentos de texto
servicio com.sun.star.text.Paragraph
• Propiedades de celdas, capítulo 7, documentos de cálculo
servicio com.sun.star.table.CellProperties
• Propiedades de páginas, capítulo 7, documentos de cálculo
servicio com.sun.star.style.PageStyle
• Propiedades de elementos de caracteres, capítulo 7, documentos de cálculo
Varios servicios
Las propiedades de formato no significan que están restringidas a las aplicaciones en las que
están explicadas, sino que pueden ser usadas universalemente. Por ejemplo, muchas de las
propiedades de páginas están descritas en el capítulo 7, y pueden ser usadas no sólo en
OpenOffice.org Calc, sino también en OpenOffice.org Writer.
Para más información acerca de trabajar con plantillas puede ser encontrada en la sección
Valores por defecto para las propiedades de carácter y párrafo en el capítulo 6, Documentos
de Texto.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC


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.

La estructura de los documentos de texto


Un documento de texto básicamente puede contener cuatro tipos de información:
• el texto actual
• plantillas para formatear caracteres, párrafos y páginas
• elementos no-texto, como tablas gráficos y objetos de dibujo
• configuración global para el documento de texto
Esta sección se concentra especialmente en el texto y las opciones de formato asociadas.

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

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.

Párrafos y porciones de párrafos


El corazón de un documento de texto consiste en una secuancia de párrafos. Estos no están
nombrados o indexados y por eso no hay forma posible de accesar directamente párrafos
individuales. Sin embargo, los párrafos pueden ser atravesados secuancialmente con la ayuda
del objeto Enumeration descrito en el capítulo 4. Esto permite que los párrafos sean
editados.
Cuando se trabaja con el objeto Enumeration, un escenario especial puede ser, sin embargo,
notado: esto no sólo retorna párrafos, sino también tablas (estrictamente hablando, en
OpenOffice.org Writer, una tabla es una forma especial de párrafo). Antes de accesar un
objeto retornado, deberá verificar cuando el objeto retornado soporta el servicio
com.sun.star.text.Paragraph para los párrafos o el servicio
com.sun.star.text.TextTable para las tablas.
El siguiente ejemplo atraviesa el contenido de un documento de texto en un ciclo y usa un
mensaje en cada instancia para informar al usuario si el objeto en cuestión es un párrafo o
una tabla:
Dim Doc As Object
Dim Enum As Object
Dim TextElement As Object
' Crea un nuevo objeto de documento
Doc = StarDesktop.CurrentComponent
' Crea un objeto de enumeración
Enum = Doc.Text.Enumeration

' Ciclo que recorre los elementos de texto


While Enum.hasMoreElements
TextElement = Enum.NextElement

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

El ejemplo crea un objeto de documento Doc que hace referencia al documento de


OpenOffice.org actual. Con la ayuda de Doc, el ejemplo crea un objeto Enumeration que
pasa por las partes individuales del texto (párrafos y tablas) asignando el elemento actual al
objeto TextElement. El ejemplo usa el método supportsService para verificar
cuando TextElement es un párrafo o una tabla.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

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

'Ciclo por todos los párrafos


While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
'Ciclo por los sub párrafos
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
Msgbox = "'" & TextPortion.String & "'"
TextElement.String = Replace(TextPortion.String, "you", "U")
TextElement.String = Replace(TextPortion.String, "too", "2")
TextElement.String = Replace(TextPortion.String, "for", "4")
Wend
End If
Wend

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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:

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

• ParaAdjust (enum) – orientación del texto vertical (constantes en concordancia con


com.sun.star.style.ParagraphAdjust).
• ParaLineSpacing (struct) – Espaciado de las líneas (estructura en concordancia con
com.sun.star.style.LineSpacing)
• ParaBackColor (Long) – color de fondo.
• ParaLeftMargin (Long) – margen izquierdo en centésimas de milímetro.
• ParaRightMargin (Long) – margen derecho en centésimas de milímetro.
• ParaTopMargin (Long) – margen superior en centésimas de milímetro.
• ParaBottomMargin (Long) – margen inferior en centésimas de milímetro.
• ParaTabStops (Array of struct) – tipo y posición de los tabuladores (matriz con
estructura del tipo com.sun.star.style.TabStop).
• ParaStyleName (String) – nombre de la plantilla del párrafo.
Ejemplo: exportación a HTML simple
El siguiente ejemplo demuestra cómo trabajar con el formateo de la información. Va pasando
por el documento de texto y crea un archivo HTML simple. Cada párafo es grabado con su
propio elemento <P> para este propósito. Las pociones de párrafo son desplegadas en negrita
y marcadas usando el elemento HTML <B> cuando se exportan:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim FileNo As Integer, Filename As String, CurLine As String


Dim Doc As Object
Dim Enum1 As Object, Enum2 As Object
Dim TextElement As Object, TextPortion As Object
Filename = "c:\text.html"
FileNo = Freefile
Open Filename For Output As #FileNo
Print #FileNo, "<HTML><BODY>"
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
CurLine = "<P>"
' ciclo sobre las porciones de párrafos
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
If TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN
CurLine = CurLine & "<B>" & TextPortion.String & "</B>"
Else
CurLine = CurLine & TextPortion.String
End If
Wend
' Salida de la línea
CurLine = CurLine & "</P>"
Print #FileNo, CurLine
End If
Wend
' Escribe el pie del HTML
Print #FileNo, "</BODY></HTML>"
Close #FileNo

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

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

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

Editando documentos de texto


La sección previa ha sido discutida en un amplio rango de opciones para editar documentos
de texto, enfocándose en los servicios com.sun.star.text.TextPortion y
com.sun.star.text.Paragraph, los cuales garantizan el acceso a las porciones de
párrafos y también a los párrafos. Estos servicos son apropiados para las aplicaciones en las
que el contenido de un texto sea editado en un paso por medio de un ciclo. Sin embargo, esto
no es suficiente para muchos problemas. OpenOffice.org provee el servicio

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

com.sun.star.text.TextCursor para tareas más complicadas, que incluye


navegación en reversa en un documento o la navegación basada en frases y palabras en lugar
de TextPortions.

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.

Advertencia! La terminología difiere de la usada en VBA: En términos de función de búsqueda, el objeto


Range de VBA puede ser comparada con el objeto TextCursor en OpenOffice.org y no – como el nombre
posiblemente indique – con el objeto Range de OpenOffice.org.
El objeto TextCursor en OpenOffice.org, por ejemplo, provee métodos para la navegación y el cambio de
texto que están incluidos en el objeto Range de VBA (por ejemplo, MoveStart, MoveEnd, InsertBefore,
InsertAfter). La correspondientecontraparte del objeto TextCursor en OpenOffice.org están descritos en
las siguientes secciones.

Navegando dentro de un texto


El objeto TextCursor en OpenOffice.org Basic actua independientemente del cursor visible
en un documento de texto. La posición controlada por programa sobre el objeto
TextCursor no tiene impacto sobre donde esté el cursor visible. Algunos objetos
TextCursor pueden ser abiertos individualmente en el mismo documento en varias
posiciones, las cuales son independientes unas de otras.
Un objeto TextCursor puede ser creado usando la llamada createTextCursor:
Dim Doc As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = TextDocument.Text.createTextCursor()

El objeto Cursor creado de esta manera soporta el servicio


com.sun.star.text.TextCursor, el cual retorna y provee un amplio rango de
métodos para navegar dentro del documento de texto. El siguiente ejemplo primero mueve el
TextCursor diez caracteres a la izquierda y tres a la derecha:
Cursor.goLeft(10, False)
Cursor.goRight(3, False)

Un TextCursor puede resaltar un área completa. Esto es comparable con el resaltado en


un punto del texto usando el mouse. El parámetro False en la función previa especifica
cuando el area en el que está pasando el movimiento del cursor, será resaltada. Por ejemplo,
el TextCursor en el siguiente ejemplo:
Cursor.goLeft(10, False)
Cursor.goRight(3, True)

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

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

carácter en el texto y termina en el décimo carácter.


Aquí están los principales métodos del servicio com.sun.star.text.TextCursor
provistos para la navegación:
• goLeft (Count, Expand) – salta el número de caracteres a la izquierda.
• goRight (Count, Expand) – salta el número de caracteres a la derecha
• gotoStart (Expand) – salta al inicio del documento
• gotoEnd (Expand) – salta al final del documento
• gotoRange (TextRange, Expand) – salta al objeto especificado en TextRange
• gotoStartOfWord (Expand) – salta al inicio de la palabra actual
• gotoEndOfWord (Expand) – salta al final de la palabra actual
• gotoNextWord (Expand) – salta al inicio de la siguiente palabra
• gotoPreviousWord (Expand) – salta al inicio de la palabra anterior
• isStarOfWord () - retorna verdadero si el TextCursor está al inicio de una palabra
• isEndOfWord () - retorna verdadero si el TextCursor está al final de una palabra
• gotoStartOfParagraph (Expand) – salta al inicio del párrafo actual
• gotoEndOfParagraph (Expand) – salta al final del párrafo actual
• gotoNextParagraph (Expand) – salta al inicio del siguiente párrafo
• gotoPreviousParagraph (Expand) – salta al inicio del párrafo anterior
• isStarOfParagraph () - retorna verdadero si el TextCursor está al inicio de un
párrafo
• isEndOfParagraph () - retorna verdadero si el TextCursor está al final de un párrafo
El texto está dividido en sentecias en la base de los símbolos de las sentecias. Los puntos son,
por ejemplo, interpretados como símbolos que marcan el final de una sentencia.
El parámetro Expand es un valor booleano que especifica cuando el área por la que se pasa
durante la nevegación va a ser resaltada. Todos los métodos de navegación retornan un
parámetro el cual especifica cuando la navegación ha sido satisfactoria o cuando la acción ha
sido terminada por falta de texto.
La siguiente es una lista de algunos métodos para editar áreas resaltadas usando
TextCursor y las cuales soportan el servicio com.sun.star.text.TextCursor.
• CollapseToStart () - resetea el resaltado y posición del TextCursor al inicio del
área resaltada anterior.
• CollapseToEnd () - resetea el resaltado y posición del TextCursor al final del área
resaltada anterior.
• IsCollapsed () - retorna verdadero cuando el TextCursor no cubre ninguna área
resaltada actualmente.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Formateando texto con TextCursor


El servicio com.sun.star.text.TextCursor soporta todos los caracteres y
propiedades de párrafos que están presentes al inicio de este capítulo.
El siguiente ejemplo muestra cómo estos pueden ser usados conjuntamente con TextCursor.
Pasa por el documento completo y formatea la primera palabra de cada sentencia con negrita.
Dim Doc As Object
Dim Cursor As Object
Dim Proceed As Boolean
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
Proceed = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
Loop While Proceed

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:

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

Dim Doc As Object


Dim Cursor As Object
Dim Proceed As Boolean
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
Cursor.String = "Ups"
Proceed = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
Loop While Proceed

Si TextCursor contiene un area resaltada, una asignación a la propiedad String


reemplaza esta con un texto nuevo. Si no hay área resaltada, el texto es insertado en la
posición actual de TextCursor.
Insertando códigos de control
En algunas situaciones, no es necesario cambiar el texto, pero si la estructura del documento
lo que se necesita modificar. OpenOffice.org provee códigos de control para estos propósitos.
Estos son insertados e influyen en la estructura. Los códigos de control están definidos en el
grupo de constantes com.sun.star.text.ControlCharacter. Los siguientes
códigos de control están disponibles en OpenOffice.org:
• PARAGRAPH_BREAK – salto de párrafo.
• LINE_BREAK – salto de línea.
• SOFT_HYPEN – posible punto de sílaba.
• HARD_HYPEN – punto de sílaba obligatorio.
• HARD_SPACE – protege el espacio para que no sea ampliado o comprimido en la
justificación del texto.
Para insertar los códigos de control, neceritará no sólo el cursor, sino tambíen los objetos de
texto asociados. El siguiente ejemplo inserta y párrafo después del vigésimo carácter de un
texto.
Dim Doc As Object
Dim Cursor As Object
Dim Proceed as Boolean
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.CreateTextCursor
Cursor.goRight(20,False)
Doc.text.insertControlCharacter( Cursor, _
com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)

El parámetro False en la llamada al método insertControlCharacter asegura que


el área actualmente seleccionada por el TextCursor permanezca después de la operación
de inserción. Si el parámetro True es pasado aquí, entonces el
insertControlCharacter reemplaza el área actual.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Búscando porciones de texto


En muchas circunstancias, el caso es que un texto es buscado para un término particular y en
el punto correspondiente debe ser editado. Todos los documentos de OpenOffice.org proveen
una interface especial para este propósito, y esta interface funciona en concordancia con el
mismo principio: antes del proceso de búsqueda, que es comúnmente referido como un
SearchDescriptor que debe ser primeramente creado. Esto define que OpenOffice.org
debe buscar en un documento. Un SearchDescriptor es un objeto que soporta el
servicio com.sun.star.util.SearchDescriptor y es creado por significado del
método createSearchDescriptor de un documento:
Dim SearchDesc As Object
SearchDesc = Doc.createSearchDescriptor

Una vez que el SearchDescriptor ha sido creado, recibe el texto que debe ser buscado:
SearchDesc.searchString = "Cualquier texto"

En términos de su función, el SearchDescriptor es comparable con el diálogo de


búsqueda de OpenOffice.org. De la misma manera que en la ventana de búsqueda, los
parámetros necesita una búsqueda que pueda ser asignada en el objeto
SearchDescriptor.
Las propiedades están provistas por el servicio
com.sun.star.util.SearchDescriptor:
• SearchBackwards (boolean) – busca por el texto hacia atrás, en lugar de hacia
adelante.
• SearchCaseSensitive (boolean) – toma en consideración las mayúsculas y las
minúsculas durante la búsqueda.
• SearchRegularExpression (boolean) – trata la expresión de búsqueda como una
expresión regular.
• SearchStyles (boolean) – busca por el texto por una plantilla de párrafo especifica.
• SearchWords (boolean) – busca solamente palabras completas.
La función de OpenOffice.org SearchSimilarity (o "concordancia difusa") también
está disponible en OpenOffice.org Basic. Con esta función, OpenOffice.org busca una
expresión que pueda ser similar pero no exactamente igual a la expresión de búsqueda. El
número de caracteres adicionales, borrados o modificados por esta expresión pueden ser
definidas individualmente. Aquí están las propiedades asociadas del servicio
com.sun.star.util.SearchDescriptor:
• SearchSimilarity (boolean) – realiza una búsqueda por similaridad.
• SearchSimilarityAdd (short) – número de caracteres que pueden ser agregados para
una búsqueda por similaridad.
• SearchSimilarityExchange (short) – número de caracteres que pueden ser
reemplazados como parte de una búsqueda por similaridad.
• SearchSimilarityRemove (short) – número de caracteres que pueden ser removidos

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

como parte de una búsqueda por similaridad.


• SearchSimilarityRelax (boolean) – toma todas las reglas de desviación en
consideración al mismo tiempo para la expresión de búsqueda.
Una vez que el SearchDescriptor ha sido preparado según los requerimientos, puede
ser aplicado al documento de texto. El documento OpenOffice.org provee los métodos
findFirst y findNext para este propósito:
Found = Doc.findFirst (SearchDesc)
Do While Found
' Suchergebnis bearbeiten
Found = Doc.findNext( Found.End, Search)
Loop

El ejemplo encuentra todas las concordancias en un ciclo y retorna un objeto TextRange, el


cual hace referencia al pasaje de texto encontrado.
Ejemplo: búsqueda por similaridad
Este ejemplo muestra como un texto puede ser buscado por la palabra "turnover" y los
resultados formateados en negrita. Si una búsqueda por similaridad es usada no sólo se
encuentra la palabra "turnover", sino también son encontradas el plural "turnovers" y las
declinaciones "turnover's". Las expresiones encontradas difieren por más de dos letras de la
expresión buscada:
Dim SearchDesc As Object
Dim Doc As Object
Doc = StarDesktop.CurrentComponent
SearchDesc = Doc.createSearchDescriptor
SearchDesc.SearchString="turnover"
SearchDesc.SearchSimilarity = True
SearchDesc.SearchSimilarityAdd = 2
SearchDesc.SearchSimilarityExchange = 2
SearchDesc.SearchSimilarityRemove = 2
SearchDesc.SearchSimilarityRelax = False
Found = Doc.findFirst (SearchDesc)
Do While Found
Found.CharWeight = com.sun.star.awt.FontWeight.BOLD
Found = Doc.findNext( Found.End, Search)
Loop

La idea básica de búsqueda y reemplazo en OpenOffice.org es comparable a la usada en VBA. Ambas


interfaces están provistas por medio de un objeto, por medio del cual las propiedades de búsqueda y
reemplazo pueden ser definidos. Este objeto entonces es aplicado al texto requerido para realizar la
acción. De esta manera el objeto auxiliar responsable en VBA puede ser accesado mediante la propiedad
Find del objeto Range, en OpenOffice.org Basic es creado por la llamada a createSearchDescriptor o
createReplaceDescriptor del objeto de documento. Asi las propiedades y métodos disponible pueden
cambiar.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Reemplazando porciones de texto


De la misma forma que la función de búsqueda, la función de reemplazo de OpenOffice.org
también está disponible en OpenOffice.org Basic. Las dos funciones son manejadas de
manera idéntica. Un objeto especial que graba los parámetros para el proceso también es
necesario para el proceso de reemplazo. Es llamado ReplaceDescriptor y soporta el
servicio com.sun.star.util.ReplaceDescriptor. Por ejemplo, durante el
proceso de reemplazo, las mayúsculas y minúsculas puede ser activado y desactivado, y
búsquedas por similaridad pueden ser realizadas.
El siguiente ejemplo demuestra el uso de ReplaceDescriptor para una búsqueda dentro
de un documento OpenOffice.org:
Dim I As Long
Dim Doc As Object
Dim Replace As Object
Dim BritishWords(5) As String
Dim USWords(5) As String
BritishWords() = Array("colour", "neighbour", "centre", "behaviour", _
"metre", "through")
USWords() = Array("color", "neighbor", "center", "behavior", _
"meter", "thru")
Doc = StarDesktop.CurrentComponent
Replace = Doc.createReplaceDescriptor
For O = 0 To 5
Replace.SearchString = BritishWords(I)
Replace.ReplaceString = USWords(I)
Doc.replaceAll(Replace)
Next n

La expresión para búsqueda y reemplazo es puesta usando las propiedades SearchString


y ReplaceString del ReplaceDescriptors. El proceso actual de reemplazo es
finalmente implementado usando el método replaceAll del objeto de documento, el cual
reemplaza todas los casos de la expresión buscada.
Ejemplo: búsqueda y reemplazo de texto con expresiones regulares
La función de reemplazo de OpenOffice.org es particularmente efectiva si se usa en conjunto
con expresiones regulares. Esto provee la opción de definir expresiones de búsqueda
variables con comodines y caracteres especiales en lugar de valores fijos.
Las expresiones regulares soportadas por OpenOffice.org están desccritas con detalle en la
sección de ayuda en línea para OpenOffice.org. Aquí hay unos cuantos ejemplos:
• Un punto dentro de una expresión de búsqueda reemplaza cualquier carácter. La expresión
de búsqueda sh.rt entonces puede encontrar shirt y short.

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

• 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)

Documentos de texto: más que sólo texto


Más adelante, este capítulo fue solamente con párrafos de texto y sus porciones. Pero los
documentos de texto también pueden contener otros objetos. Esto incluye tablas, dibujos,
campos de texto y directorios. Todos estos objetos pueden ser anclados en cualquier punto
dentro de un texto.
Gracias a estas características comunes, todos estos objetos en OpenOffice.org soportan un
servicio básico llamado com.sun.star.text.TextContent. Esto provee las
siguientes propiedades:
• AnchorType (Enum) – detemina el tipo de ancla de un objeto TextContent (los valores
por defecto de acuerdo con la enumeración
com.sun.star.text.TextContentAnchorType)
• AnchorTypes (Enum) – Enumeración de todas las AnchorTypes que soportan un
objeto especial TextContent.
• TextWrap (Enum) – determina el tipo de ajuste de texto alrededor de un objeto
TextContent (los valores por defecto de acuerdo con la enumeración
com.sun.star.text.WrapTextMode)
El objeto TextContent también comparten algunos métodos – en particular, aquellos para
la creación, inserción y borrado de objetos.
• Un objeto TextContent nuevo es creado usando el método CreateInstance de un
objeto de documento.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• Un objeto es insertado usando el métod InsertTextContent de un objeto de texto.


• Los objetos TextContent son borrados usando el método removeTextContent.
Encontrará un rango de ejemplos de estos métodos en las siguientes secciones.

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

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Aquí están los métodos principales de la interface


com.sun.star.table.XtableRows:
• getByIndex (Integer) – retorna el objeto fila para el índice especificado.
• GetCount () - retorna el número de objetos de fila.
• InsertByIndex (Index, Count) – inserta las filas especificadas en Count en la
posición Index.
• RemoveByIndex (Index, Count) – borras las filas especificadas en Count en la
posición Index.
Mientras los métodos getByIndex y getCount están disponibles en todas las tablas, los
métodos insertByIndex y removeByIndex solamente pueden ser usados en tablas
que no contengan celdas combinadas.
El servicio com.sun.star.text.textTableRow provee las siguientes propiedades:
• BackColor (long) – color de fondo de la fila.
• Height (Long) – alto de la linea en centésimas de milímetro.
• IsAutoHeight (boolean) – el alto de la fila es adaptado dinámicamente al contenido.
• VertOrient (const) – orientación vertical del marco de texto – los detalles sobre la
orientación vertical del texto en una tabla. (valores de acuerdo con
com.sun.star.text.VertOrientation)
Columnas
Las columnas son accesadas de la misma forma que las filas, usando los métodos
getByIndex, getCount, insertByIndex y removeByIndex en el objeto Column,
el cual es accesado por medio de getColumns. Sin embargo, estos pueden ser usados en
tablas que no contengan celdas combinadas. Las celdas no pueden ser formateadas por
columna en OpenOffice.org Basic. Para hacer eso, debe usarse el método de formateo de
celdas individuales.
Celdas
Cada celda en un documento OpenOffice.org tiene un nombre único. Si el cursor de
OpenOffice.org está en una celda, entonces el nombre de la celda puede verse en la barra de
estado. La celda superior izquierda es llamada A1, y la fila inferior derecha es normalmente
llamada Xn, donde X es la letra de la columna y n el número de la última fila. Los objetos
celdas están disponibles por medio del método getCellByName() del objeto de tabla. El
siguiente ejemplo muestra como un ciclo pasa por todas las celdas de una tabla e introduce el
número correspondiente de celda y columna dentro de la celda:

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

Dim Doc As Object


Dim Table As Object
Dim Cursor As Object
Dim Rows As Object
Dim RowIndex As Integer
Dim Cols As Object
Dim ColIndex As Integer
Dim CellName As String
Dim Cell 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)
Rows = Table.getRows
Cols = Table.getColumns
For RowIndex = 1 To Rows.getCount()
For ColIndex = 1 To Cols.getCount()
CellName = Chr(64 + ColIndex) & RowIndex
Cell = Table.getCellByName(CellName)
Cell.String = "Fila: " & CStr(RowIndex) + ", columna: " & _
Cstr(ColIndex)
Next
Next

Una celda de una tabla es comparable con el texto standard. Soporta la interface
TextCursor para crear un objeto TextCursor asociado.
CellCursor = Cell.createTextCursor()

Todas las opciones de formato para caracteres individuales y párrafos quedan


automáticamente disponibles.
El siguiente ejemplo busca por todas las tablas de texto y aplica el formato de alineación
derecha a todas las celdas con valores numéricos mediante significado de la propiedad de
párrafo correspondiente.
Dim Doc As Object
Dim TextTables As Object
Dim Table As Object
Dim CellNames
Dim Cell As Object
Dim CellCursor As Object
Dim I As Integer
Dim J As Integer
Doc = StarDesktop.CurrentComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count – 1
Table = TextTables(I)
CellNames = Table.getCellNames()
For J = 0 to Ubound(CellNames)
Cell = Table.getCellByName(CellNames(J))
If IsNumeric(Cell.String) Then
CellCursor = Cell.createTextCursor()
CellCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
End If
Next
Next

El ejemplo crea una lista TextTables conteniendo todas las tablas del texto que se está

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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)

El marco de texto es creado usando el método createInstance del objeto de documento.


El marco de texto creado de esta manera puede ser insertado en el documento usando el
método insertTextContent de el objeto Text. Para hacerlo, el nombre propio del
servicio com.sun.star.text.textFrame debe ser especificado.
El punto de inserción del marco de texto está determinado por el objeto Cursor, el cual
también es ejecutado cuando se inserta.

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.

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

• Width (Long) – ancho del marco de texto en centécimas de milímetro.


• HoriOrient (const) – orientación horizontal del marco de texto (de acuerdo con
com.sun.star.text.HoriOrientation)
• VertOrient (const) orientación vertical del marco de texto (de acuerdo con
com.sun.star.text.VertOrientation)
El siguiente ejemplo crea un marco de texto usando las propiedades descritas anteriormente:
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 3000
Frame.Height = 3000
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
Frame.topMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
Doc.Text.insertTextContent(Cursor, Frame, False)

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Dim FrameCursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 3000
Frame.Height = 1000
Doc.Text.insertTextContent(Cursor, Frame, False)
FrameCursor = Frame.createTextCursor()
FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
FrameCursor.String = "Esto es una pequeña prueba!"

El ejemplo crea un marco de texto, lo inserta en el documento de texto actual y abre el


TextCursor para el marco de texto. El TextCursor es usado para cambiar la fuente del
marco en negrita y para activar la orientación del párrafo en centrado. Al marco de texto
finalmente es asiganda la cadena “Esto es una prueba!”.

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.

Mientras que el tipo de un campo en VBA es especificado por parámetros en el método


Document.Fields.Add, el nombre del servicio es responsable del tipo de campo definido en OpenOffice.org
Basic.
En el pasado, los campos de texto fueron accesados usando un amplio rango de métodos que
OpenOffice.org tenía disponible en el antiguo objeto Selection (Por ejemplo, InsertField, DeleteUserField,
Set CurField).

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

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

com.sun.star.text.TextField.PageNumber. Las siguientes propiedades


pueden ser especificadas:
• NumberingType (const) – formato de número (en concordancia con las constantes de
com.sun.star.style.NumberingType)
• Offset (short) – formato agregado al número de página (especificaciones negativas
también son posibles)
El siguiente ejemplo muestra como el número de páginas puede ser insertado en el pie de un
documento:
Dim Doc As Object
Dim DateTimeField As Object
Dim PageStyles As Object
Dim StdPage As Object
Dim FooterCursor As Object
Dim PageNumber As Object
Doc = StarDesktop.CurrentComponent
PageNumber = Doc.createInstance("com.sun.star.text.TextField.PageNumber")
PageNumber.NumberingType = com.sun.star.style.NumberingType.ARABIC
PageStyles = Doc.StyleFamilies.getByName("PageStyles")
StdPage = PageStyles("Default")
StdPage.FooterIsOn = True
FooterCursor = StdPage.FooterTextLeft.Text.createTextCursor()
StdPage.FooterTextLeft.Text.insertTextContent(FooterCursor, PageNumber, False)

El ejemplo primero crea un campo de texto que soporta el servicio


com.sun.star.TextField.PageNumber. Mientras las líneas de encabezado y pie
son definidas como parte de la plantilla de la página de OpenOffice.org , esto inicialmente es
establecido usando la lista de todos los PageStyles.
Para asegurarse que la línea de pie de página es visible, la propiedad FooterIsOn es
puesta al valor de True. El campo de texto es entonces insertado en el documento usando el
objeto de texto asociado a la izquierda de la línea del pie de página.
Anotaciones
Los campos de anotación (com.sun.star.text.TextField.Annotation) pueden
ser vistos mediante un pequeño símbolo amarillo en el texto. Haciéndo click en este símbolo
se abre un campo de texto, en el cual puede ser guardado un comentario en el punto actual de
texto. Un campo de anotación tiene las siguientes propiedades:
• Author (string) – nombre del autor.
• Content (string) – texto del comentario.
• Date (date) – fecha en la cual fue escrito el comentario.
Fecha/hora
Un campo de fecha/hora (com.sun.star.text.TextField.DateTime) representa
la fecha actual o la hora actual. Soporta las siguientes propiedades:

Capítulo 6 Documentos de texto 


Capítulo 6Documentos de texto 

• IsFixed (boolean) – si es verdadero, los detalles de tiempo de la inserción permanencen


sin cambios, si es falso, este campo es actualizado cada vez que el documento es abierto.
• IsDate (boolean) – Si es verdadero, el campo de texto despliega la fecha actual, de lo
contrario despliega la hora actual.
• DateTimeValue (struct) – contenido actual del campo (con la estructura de
com.sun.star.util.DateTime)
• NumberFormat (const) – formato en el que la hora o la fecha es mostrada.
Nombre/número del capítulo
El nombre del capítulo actual está disponible mediante el campo de texto del tipo
com.sun.star.text.TextField.Chapter. La forma puede ser definida usando dos
propiedades:
• ChapterFormat (const) – determina cómo el nombre del capítulo o el número es mostrado
(en concordancia con com.sun.star.text.ChapterFormat)
• Level (Integer) – determina el nivel en el cual el nombre o el número del capítulo está
siendo desplegado. El valor 0 determina el nivel más alto posible.

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.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Bookmark As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Bookmark = Doc.Bookmarks.getByName("Mi marcador")
Cursor = Doc.Text.CreateTextCursorByRange(Bookmark.Anchor)
Cursor.String = "aquí hay un marcador"

En el ejemplo, el método GetByName es usado para encontrar el marcador requerido por el


significado de su nombre. La llamada a createTextCursorByRange crea el Cursor,
el cual es puesto en la posición del anclaje del marcador. El cursor inserta el texto requerido
en esa posición.

Capítulo 6 Documentos de texto 


 OpenOffice.org Guía del programador BASIC


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

La estructura de documentos basados en tablas


(Hojas de cálculo)
El objeto de documento de una hoja de cálculo está basado en el servicio
com.sun.star.sheet.SpreadsheetDocument. Cada uno de estos documentos
puede contener varias hojas de cálculo. En esta guía, un documento basado en tablas o un
documento de hojas de cálculo es el documento entero, mientras que hoja de cálculo (hoja
para resumir) es una hoja en el documento.

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)

Ejemplo 2: Accesar por significado del nombre

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Hoja 1")

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

Los métodos getByName y insertByName son de la interface


com.sun.star.container.XnameContainer descrita en el capítulo 4.

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Sheet As Object
Dim FirstCol As Object
Dim FirstRow As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
FirstCol = Sheet.Columns(0)
FirstRow = Sheet.Rows(0)

Los objetos de columna soportan el servicio com.sun.star.table.TableColumns y


tiene las siguientes propiedades:
• Width (long) – ancho de una columna en milésimas de milímetro.
• OptimalWidth (Boolean) – pone una columna con el ancho óptimo.
• IsVisible (Boolean) – Despliega una columna.
• IsStartOfNewPage (boolean) – Cuando se imprime, crea un salto de página antes de
la columna.
El ancho de una columna solamente es optimizado cuando la propiedad OptimalWidth es
puesta en Verdadero. Si el ancho de una celda individual es cambiado, el ancho de la
columna que contiene esa celda no es cambiado. En términos de funcionalidad,
OptimalWidth es más un método que una propiedad.
Los objetos de filas están basados en el servicio com.sun.star.table.TableRows y
tiene las siguientes propiedades:
• Height (Long) – alto de la fila en milésimas de milímetro.
• OptimalHeight (Boolean) – pone la fila al alto óptimo.
• IsVisible (Boolean) – despliega la fila.
• IsStartOfNewPage (boolean) – cuando se imprime crea un salto de página antes de la
fila.
Si la propiedad OptimalHeight de una fila es puesta en verdadero, el alto de la fila
cambia automáticamente cuando el alto de una celda es cambiado. La optimización
automática continua hasta que a la fila le sea asignado un valor absoluto por medio de la
propiedad Height.
El siguiente ejemplo activa la optimización automática de las primeras cinco filas en la hoja y
hace la segunda columa invisible.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Dim Row As Object
Dim Col As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
For I = 0 to 4
Row = Sheets.Rows(I)
Row.OptimalHeight = True
Next
Col = Sheet.Columns(1)
Col.IsVisible = False

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.

Insertando y borrando filas y columnas


Los objetos Rows y Columns pueden accesar las filas y columnas existentes, y también
insertar y borrar.
Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Sheet.Columns.insertByIndex(3, 1)
Sheet.Columns.removeByIndex(5, 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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Sheet As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0, 0)
Cell.String = “Prueba”

Adicionalmente a la coordenadas numéricas, cada celda tiene su nombre, por ejemplo, la


celda superior izquierda (0,0) de una hoja de cálculo es llamada A1. La letra A representa la
columna y el número 1 es la fila. Es importante que no confunda el nombre y la posición de
la celda porque la fila que contiene el nombre inicia en 1 mientras que el conteo para las
posiciones inicia en 0.
En OpenOffice.org, una celda de una tabla pueden estar vacía o contener texto, números o
fórmulas. El tipo de la celda no es determinado hasta que el contenido sea guardado en la
celda, pero es difierente en las propiedades del objeto que debe ser usado para cada una de
sus entradas. Los números pueden ser insertados llamando la propiedad Value, el texto con
la propiedad String, y las fórmulas con la propiedad Formula.
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.GetCellByPosition(0, 0)
Cell.Value = 100
Cell = Sheet.GetCellByPosition(0, 1)
Cell.String = “Test”
Cell = Sheet.GetCellByPosition(0, 2)
Cell.Formula = “=A1”

El ejemplo inserta un número, un texto, y una fórmula en las celdas A1 a la A3.

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.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = 1000
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = “=A1+A2”
MsgBox Cell.Value

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

La propiedad Cell.Type retorna un valor de la enumeración


com.sun.star.table.CellContentType que identifica el contenido de una celda.
Los posibles valores son:
• EMPTY – que no tiene ningún valor.
• VALUE – es un número.
• TEXT – Cadenas.
• FORMULA – contiene una fórmula.
Insertando, borrando, copiando y moviendo celdas
Adicionalmente a la modificación directa de las celdas, OpenOffice.org Calc provee una
interface que le permite insertar, borrar, copiar o combinar celdas. La interface
(com.sun.star.sheet.XRangeMovement) está disponible por medio del objeto hoja
de cálculo y provee cuatro métodos para modificar el contenido de las celas.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

El método InsertCell es usado para insertar celdas dentro de una hoja.


Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

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.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

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)

Adicionalmente a la estructura CellRangeAddress, el método moveRange espera una


estructura com.sun.star.table.CellAddress para definir el origen a mover de la
región destino. El método CellAddress provee los siguientes valores:
• Sheet (short) – el número de la hoja de cálculo (la numeración inicia en 0).
• Column (short) – el número de la columna direccionada (la numeración inicia en 0).
• Row (short) – el número de la fila direccionada (la numeración inicia en 0).
El contenido de las celdas en el rango de destino será siempre sobreescrito por el método
moveRange. A diferencia del método InsertCells, el parámetro para realizar

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

movimientos automáticos no está provisto por el método removeRange.


El método copyRange funciona de la misma manera que el método moveRange, excepto
que copyRange inserta una copia del rango de celdas, en lugar de moverlas.

En términos de su funcionalidad, los métodos de OpenOffice.org Basic insertCell, removeRange y


CopyRange son comparables con los métodos de VBA Range.Insert, Range.Delete y Range.Copy.
Mientras en VBA, los métodos son aplicados al objeto Range correspondiente, en OpenOffice.org Basic
ellos son aplicados al objeto Sheet asociado.

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.

Color de fondo y sombras


El servicio com.sun.star.table.CellProperties provee las siguientes
propiedades para definir el color de fondo y sombras.
• CellBackColor (long) – color de fondo de la celda.
• IsCellBackgroundTransparent (boolean) – configura el color de fondo a
transparente.
• ShadowFormat (struct) – especifica las sombras de las celdas (estructura de acuerdo
con com.sun.star.table.ShadowFormat)
La estructura com.sun.star.table.ShadowFormat y el detalle de las
especificaciones para las sombras de las celdas tienen la siguiente estructura:
• Location (enum) – posición de la sombra. (los valores provienen de la estructura
com.sun.star.table.ShadowLocation)
• ShadowWidth (short) – tamaño en centésimas de milímetro.
• IsTransparent (boolean) – configura la sombra a transparente.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

• Color (long) – color de la sombra.


El siguiente ejemplo escribe el número 1000 a la celda B2, cambia el color de fondo a rojo
usando la propiedad CellBackColor, y luego crea una sombra gris tenue para la celda
que es movida 1 mm a la izquierda y hacia abajo.
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim ShadowFormat As New com.sun.star.table.ShadowFormat
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
Cell.Value = 1000
Cell.BackColor = RGB(255,0,0)
ShadowFormat.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT
ShadowFormat.ShadowWidth = 100
ShadowFormat.Color = (160,160,160)
cell.ShadowFormat = ShadowFormat

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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
Cell.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT
Cell.VertJustify = com.sun.star.table.CellVertJustify.TOP
Cell.Orientation = com.sun.star.table.CellOrientation.STACKED

Formato de números, fecha y texto


OpenOffice.org Provee un amplio rango de formatos predefinidos para hora y fecha. Cada
uno de estos formatos tiene un número interno que es asignado al formato de la celda
mediante la propiedad NumberFormat.
OpenOffice.org Provee los métodos queryKey y AddNew de manera que pueda accesar los
números de formatos existentes y también crear sus propios formatos. Los métodos son
accesados mediante la llamada al siguiente objeto:
NumberFormat = Doc.NumberFormats

Un formato especificado usando un formato de cadena está estructurado de manera similar


que las funciones de formato de OpenOffice.org Basic. Sin embargo, hay una gran
diferencia: mientras que el comando de formato espera las abreviaciones en inglés y puntos
decimales o caracteres de separadores de miles, las abreviaciones especificas del país pueden
ser usadas para la estructura de un comando de formato para el objeto NumberFormat.
El siguiente ejemplo formatea la celda B2 de manera que los números son desplegados con
tres posiciones decimales y usa comas como separador de miles.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Dim Cell As Object
Dim NumberFormats As Object
Dim NumberFormatString As String
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale

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

El diálogo  en OpenOffice.org Calc provee un vistazo de los diferentes


opciones de formatos para las celdas.
Propiedades de páginas
Las propiedades de páginas son opciones de configuran la posición del contenido del
documento en una página y también los elementos visuales que serán repetidos página a
página. Estos incluyen:
• Formatos de página.
• Márgenes de páginas.
• Encabezados y pies de página.
El procedimiento para definir los formatos de las páginas difieren de las otras formas de
formateado. Mientras los elementos de celdas, párrafos, y caracteres pueden ser directamente,
los formatos de páginas también pueden ser definidas y aplicadas indirectamente usando los
estilos de páginas. Por ejemplo, los encabezados o pies de página pueden ser agregados al
estilo de página.
Las siguientes secciones describen las opciones de formato principales para las páginas de las
hojas de cálculo. Muchos de los estilos que están descritos también están disponibles para los
documentos de texto. Las propiedadades que son válidos para ambos tipos de documentos
están definidos en el servicio com.sun.star.style.PageProperties. Las
propiedades de páginas que solo se aplican a los documentos de hoja de cálculo están
definidos en el servicio com.sun.star.sheet.TablePageStyle.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

Márgen de la página, bordes y sombras


El servicio com.sun.star.style.PageProperties provee las siguientes
propiedades para ajustar los márgenes de las páginas y también los bordes y sombras:
• LeftMargin (long) – ancho del márgen izquierdo en centécimas de milímetro.
• RightMargin (long) – ancho del márgen derecho en centécimas de milímetro.
• TopMargin (long) – ancho del márgen superior en centécimas de milímetro.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

• BottomMargin (long) – ancho del márgen inferior en centécimas de milímetro.


• LeftBorder (struct) – especificaciones de la línea del borde izquierdo (estructura
com.sun.star.table.BorderLine)
• RightBorder (struct) – espeficicaciones de la línea del borde derecho (estructura
com.sun.star.table.BorderLine)
• TopBorder (struct) – especificaciones de la línea del borde superior (estructura
com.sun.star.table.BorderLine)
• BottomBorder (struct) – especificaciones de la línea del borde inferior (estructura
com.sun.star.table.BorderLine)
• LeftBorderDistance (long) – distancia entre el borde izquierdo y el contenido de la
página en centécimas de milímetro.
• RightBorderDistance (long) – distancia entre el borde derecho y el contenido de la
página en centécimas de milímetro.
• TopBorderDistance (long) – distancia entre el borde superior y el contenido de la
página en centécimas de milímetro.
• BottomBorderDistance (long) – distancia entre el borde inferior y el contenido de la
página en centécimas de milímetro.
• ShadowFormat (struct) – especificaciones de la sombra en el área de contenido de la
página (estructura de com.sun.star.table.ShadowFormat)
El siguiente ejemplo configura los bordes derecho e izquierdo del estilo de página "default" a
un centímetro:
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.LeftMargin = 1000
DefPage.RightMargin = 1000

Encabezados y pies de páginas


Los encabezados y pies de página de un documento forman parte de las propiedades de la
página y están definidas usando el servicio com.sun.star.style.PageProperties.
Las propiedades para el formateo de de los encabezados son:
• HeaderOn (boolean) – Encabezado activado.
• HeaderLeftMargin (long) – distancia entre el encabezado y el márgen izquierdo de la
página en centécimas de milímetro.
• HeaderRightMargin (long) – distancia entre el encabezado y el márgen derecho de la
página en centécimas de milímetro.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• HeaderBodyDistance (long) – distancia entre el encabezado y el cuerpo principal del


documento en centécimas de milímetro.
• HeaderHeight (long) – altura del encabezado en centécimas de milímetro.
• HeaderIsDynamicHeight (boolean) – la altura del encabezado es automáticamente
ajustada al contenido.
• HeaderLeftBorder (struct) – detalles del borde izquierdo del marco alrededor del
encabezado (estructura com.sun.star.table.BorderLine)
• HeaderRightBorder (struct) – detalles del borde derecho del marco alrededor del
encabezado (estructura com.sun.star.table.BorderLine)
• HeaderTopBorder (struct) – detalles del borde superior del marco alrededor del
encabezado (estructura com.sun.star.table.BorderLine)
• HeaderBottomBorder (struct) – detalles del borde inferior del marco alrededor del
encabezado (estructura com.sun.star.table.BorderLine)
• HeaderLeftBorderDistance (long) – distancia entre el borde izquierdo y el
contenido del encabezado en centécimas de milímetro.
• HeaderRightBorderDistance (long) – distancia entre el borde derecho y el
contenido del encabezado en centécimas de milímetro.
• HeaderTopBorderDistance (long) – distancia entre el borde superior y el contenido
del encabezado en centécimas de milímetro.
• HeaderBottomBorderDistance (long) – distancia entre el borde inferior y el
contenido del encabezado en centécimas de milímetro.
• HeaderIsShared (boolean) – el encabezado en esta o en todas las páginas tienen el
mismo contenido (referencia a HeaderText, HeaderTextLeft,
HeaderTextRight)
• HeaderBackColor (long) – color de fondo del encabezado.
• HeaderBackGraphicURL (long) – URL del gráfico de fondo que desea usar.
• HeaderBackGraphicFilter (long) – nombre del filtro para interpretar el gráfico de
fondo para el encabezado.
• HeaderBackGraphicLocation (enum) – posición del gráfico de fondo para el
encabezado (valores de acuerdo a la enumeración
com.sun.star.style.GraphicLocation)
• HeaderBackTransparent (boolean) – muestra el fondo del encabezado como
transparente.
• HeaderShadowFormat (struct) – detalles de la sombra del encabezado (estructura
com.sun.star.table.ShadowFormat)
Las propiedades de formato para el pie de página son:
• FooterIsOn (boolean) – el pie de página está activado.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

• FooterLeftMargin (long) – distancia entre el pie de página y el márgen izquierdo de


la página en centésimas de milímetro.
• FooterRightMargin (long) – distancia entre el pie de página y el márgen derecho de
la página en centésimas de milímetro.
• FooterBodyDistance (long) – distancia entre el pie de página y el cuerpo de la
página en centésimas de milímetro.
• FooterHeight (long) – alto del pie de página en centésimas de milímetro.
• FooterIsDynamicHeight (long) – el alto del pie de página es adaptado
automáticamente al contenido.
• FooterLeftBorder (struct) – detalles de la línea del borde izquierdo alrededor del pie
de página (structura de com.sun.star.table.BorderLine)
• FooterRightBorder (struct) – detalles de la línea del borde derecho alrededor del pie
de página (structura de com.sun.star.table.BorderLine)
• FooterTopBorder (struct) – detalles de la línea del borde superior alrededor del pie de
página (structura de com.sun.star.table.BorderLine)
• FooterBottomBorder (struct) – detalles de la línea del borde inferior alrededor del
pie de página (structura de com.sun.star.table.BorderLine)
• FooterLeftBorderDistance (long) – distancia entre el borde izquierdo y el
contenido del pie de página en centécimas de milímetro.
• FooterRightBorderDistance (long) – distancia entre el borde derecho y el
contenido del pie de página en centécimas de milímetro.
• FooterTopBorderDistance (long) – distancia entre el borde superior y el contenido
del pie de página en centécimas de milímetro.
• FooterBottomBorderDistance (long) – distancia entre el borde inferior y el
contenido del pie de página en centécimas de milímetro.
• FooterIsShared (boolean) – los pies de página tienen los mismos contenidos para
todas y cada una de las páginas. (referencia a FooterText, FooterTextLeft y
FooterTextRight)
• FooterBackColor (long) – color de fondo del pie de página.
• FooterBackGraphicURL (string) – URL para el gráfico de fondo que desea usar.
• FooterBackGraphicFilter (string) – nombre del filtro para interpretar el gráfico
de fondo del pie de página.
• FooterBackGraphicLocation (enum) – posición del gráfico de fondo del pie de
página. (valores de la enumeración de acuerdo con
com.sun.star.style.GraphicLocation)
• FooterBackTransparent (boolean) – muestra el fondo del pie de página como
transparente.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• FooterShadowFormat (struct) – detalles sobre la sombra del pie de página.


(estructura de com.sun.star.table.ShadowFormat)
Cambiando el texto de encabezados y pies de página
El contenido de los encabezados y pies de página, puede ser accesado por medio de las
siguientes propiedades:
• LeftPageHeaderContent (Object) – contenido de los encabezados para las páginas
impares. (servicio com.sun.star.sheet.HeaderFooterContent)
• RightPageHeaderContent (Object) – contenido de los encabezados para las
páginas pares. (servicio com.sun.star.sheet.HeaderFooterContent)
• LeftPageFooterContent (Object) – contenido del pie para las páginas impares.
(servicio com.sun.star.sheet.HeaderFooterContent)
• RightPageFooterContent (Object) – contenido del pie para las páginas pares.
(servicio com.sun.star.sheet.HeaderFooterContent)
Si no necesita distinguir entre los encabezados de las páginas pares e impares (la propiedad
FooterIsShared esta puesta en False), entonces ponga las propiedades para los
encabezados y pies de las páginas pares.
Todos los objetos nombrados soportan el servicio
com.sun.star.sheet.HeaderFooterContent. Por significado de las propiedades
(no genuinas) LeftText, CenterText y RightText, este servicio provee tres
elementos de texto para los encabezados y pies de OpenOffice.org Calc.
El siguiente ejemplo escribe el valor "solo un ejemplo" en el campo de texto izquierdo del
encabezado de la plantilla "Default".
Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim Htext As Object
Dim Hcontent As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.HeaderIsOn = True
Hcontent = DefPage.RightPageHeaderContent
Htext = Hcontent.LeftText
Htext.String = "solo un ejemplo"
DefPage.RightPageHeaderContent = Hcontent

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:

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

• HeaderText (Object) – objeto de texto con el contenido del encabezado. (servicio


com.sun.star.text.Xtext)
• HeaderTextLeft (Object) – objeto de texto con el contenido del encabezado para las
páginas izquierdas. (servicio com.sun.star.text.Xtext)
• HeaderTextRight (Object) – objeto de texto con el contenido del encabezado para las
páginas derechas. (servicio com.sun.star.text.Xtext)
• FooterText (Object) – objeto de texto con el contenido del pie de página. (servicio
com.sun.star.text.Xtext)
• FooterTextLeft (Object) – objeto de texto con el contenido del pie para las páginas
izquierdas. (servicio com.sun.star.text.Xtext)
• FooterTextRight (Object) - objeto de texto con el contenido del pie para las páginas
derechas. (servicio com.sun.star.text.Xtext)
El siguiente ejemplo crea un encabezado en el estilo de página "default" para un documento
de texto y agrega el valor "solo un ejemplo" en el encabezado.
Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim Htext As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")
DefPage.HeaderIsOn = True
Htext = DefPage.HeaderText
Htext.String = "solo un ejemplo"

En esta instancia, el accceso está provisto directamente por medio de la propiedad


HeaderText del estilo de página en lugar del objeto HeaderFooterContent.
Centrado (sólo hojas de cálculo)
El servicio com.sun.star.sheet.TablePageStyle es usado solamente en los
estilos de OpenOffice.org Calc y permite rangos de celdas en los que usted desea que sean
impresos en el centro de la página. Este servicio provee las siguientes propiedades:
• CenterHorizontally (boolean) – el contenido de la tabla es centrado
horizontalmente.
• CenterVertically (boolean) – el contenido de la tabla es centrado verticalmente.
Definición de elementos a ser impresos (sólo hojas de cálculo)
Cuando se formatean las hojas de cálculo, se pueden definir cuales elementos de la página
son visibles. Para este propósito el servicio com.sun.star.sheet.TablePageStyle
provee las siguientes propiedades:
• PrintAnnotations (boolean) – Imprime los comentarios de las celdas.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• PrintGrid (boolean) – Imprime las líneas de la rejilla de las celdas.


• PrintHeaders (boolean) – Imprime los encabezados de filas y columnas.
• PrintCharts (boolean) – Imprime los gráficos que contenga la hoja.
• PrintObjects (boolean) – Imprime los objetos incrustados.
• PrintDrawing (boolean) – Imprime los objetos de dibujo.
• PrintDownFirst (boolean) – Si el contenido de una hoja de cálculo se extiende por
varias páginas, estas son impresas primeramente en orden verticalmente descendente, y
luego hacia abajo al lado derecho.
• PrintFormulas (boolean) – Imprime las fórmulas en lugar de los valores calculados.
• PrintZeroValues (boolean) – Imprime los valores en cero.

Editando las hojas de cálculo de manera


eficiente
Mientras la sección anterior describe la estructura principal de los documentos de hoja de
cálculo, esta sección describe los servicios que permite el acceso fácil a celdas individuales y
rangos de celdas.

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.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc as Object


Dim Sheet As Object
Dim CellRange As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("B2:D4")
Cell = CellRange.GetCellByPosition(1,1)

Formateando rangos de celdas


Como las celdas individuales, se pueden aplicar formatos a rangos de celdas usando el
servicio com.sun.star.table.CellProperties. Para más información y ejemplos
de este servicio, vea la sección formateado.
Calculando con rangos de celdas
Puede usar el método ComputeFunction para realizar operaciones matemáticas en rangos
de celdas. ComputeFunction espera una constante como los parámetros que describen la
función matemática que desea usar. Las constantes asociadas están definidas en la
enumeración com.sun.star.sheet.GeneralFunction. Los siguientes valores están
disponibles:
• SUM – suma de todos los valores numéricos.
• COUNT – número total de valores (incluyéndo los no-numéricos)
• COUNTNUMS – número total de los valores numéricos.
• AVERAGE – el Average de los valores numéricos.
• MAX – el valor numérico más grande.
• MIN – el menor valor numérico.
• PRODUCT – el producto de los valores numéricos.
• STDEV – La desviación estándar.
• VAR – La varianza.
• STDEVP – la desviación estándar con base en el total de la población.
• VARP – la varianza basada en el total de la población.
El siguiente ejemplo calcula el valor del average del rango A1:C3 e imprime el resultado en
un cuadro de mensaje.
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("A1:C3")
MsgBox CellRange.ComputeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)

Borrando contenidos de las celdas

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

El método clearContents simplifica el proceso de borrar los contenidos de las celdas y


rangos de celdas borrando un tipo especifico de contenidos en el rango de celdas.
El siguiente ejemplo borra todas las cadenas y la información de formateado directo del
rango B2:C3
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Dim Flags As Long
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheet(0)
CellRange = Sheet.getCellRangeByName("B2:C3")
Flags = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.HARDATTR
CellRange.clearContents(Flags)

Las banderas específicas en ClearContents vienen de la lista de constantes en


com.sun.star.sheet.CellFlags. Esta lista provee los siguientes elementos:
• VALUE – valores numéricos que no están formateados como fecha u hora.
• DATETIME – valores numéricos que están formateados como fecha u hora.
• STRING – cadenas.
• ANNOTATION – comentarios que están ligados a las celdas.
• FORMULA – fórmulas.
• HARDATTR – formateado directo de las celdas.
• STYLES – formateado indirecto.
• OBJECTS - objetos de dibujo que están conectados a celdas.
• EDITATTR – formateado de caracteres que solamente se aplican a partes de las celdas.
También pueden agregar constantes juntas para borrar diferentes partes de información
usando la llamada a ClearContents.

Buscando y reemplazando contenidos de las celdas


Los documentos de hojas de cálculo, como los documentos de texto, proveen una función
de buscar y reemplazar.
Los descriptores del objeto de búsqueda y reemplazo en el documento de hoja de cálculo no
está creado directamente por medio del objeto de documento, sino por medio de la lista
sheet. El siguiente es un ejemplo del proceso de búsqueda y reemplazo.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Sheet As Object
Dim ReplaceDescriptor As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
sheet = Doc.Sheets(0)
ReplaceDescriptor = Sheet.CreateReplaceDescriptor()
ReplaceDescriptor.SearchString = "is"
ReplaceDescriptor.ReplaceString = "was"
For I = 1 to Doc.Sheets.Count – 1
Sheet = Doc. Sheets(I)
Sheet.ReaplaceAll(ReplaceDescriptor)
Next I

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.

La estructura de los dibujos


OpenOffice.org No limita el número de páginas en un documento de dibujo. Puede diseñar
cada página separadamente. También no hay límite en el número de elementos de dibujo que
puede agregar que puede agregar en una página.
Esta imágen es un poco más complicada con la presencia de capas. Por defecto, cada
documento de dibujo contiene capas de formato, controles, y líneas de dimensión y los
elementos de dibujo son agregados a la capa de formato. También tiene la opción de agregar
más capas. Vea la Guía del desarrollador de StarOffice para más información acerca de las
capas de dibujo.

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Page As Object
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Ejemplo 2
Dim Doc As Object
Dim Page As Object
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages.getByName("Slide 1")

En el ejemplo 1, el nombre es direccionado por su número (el conteo inicia en 0). En el


segundo ejemplo la página es accesada por su nombre con el método getByName.
Dim sUrl As String, sFilter As String
Dim sOptions As String
Dim oSheets As Object, oSheet As Object
oSheets = oDocument.Sheets
If oSheets.hasByName("Link") Then
oSheet = oSheets.getByName("Link")
Else
oSheet = oDocument.createInstance("com.sun.star.sheet.Spreadsheet"
oSheets.insertByName("Link", oSheet)
oSheet.IsVisible = False
End If

La llamada anterior retorna un objeto de página que soporta el servicio


com.sun.star.drawing.DrawPage. El servicio reconoce las siguientes propiedades:
• BorderLeft (Long) – borde izquierdo en centécimas de milímetro.
• BorderRight (Long) – borde derecho en centécimas de milímetro.
• BorderTop (Long) – borde superior en centécimas de milímetro.
• BorderBottom (Long) – borde inferior en centécimas de milímetro.
• Width (Long) – ancho de la página en centécimas de milímetro.
• Height (Long) – alto de la página en centécimas de milímetro.
• Number (Short) – Número de páginas (numeración inicia en 1), sólo lectura.
• Orientation (Enum) – orientación de la página (de acuerdo con la enumeración de
com.sun.star.view.PaperOrientation)
Si estos parámetros son ajustados, entonces todas las páginas del documento serán afectadas.
El siguiente ejemplo ajusta el tamaño del papel de un documento de dibujo que ha sido recién
abierto a 20 x 20 centímetros con un márgen de 0.5 centímetros.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Page As Object
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
Page.BorderLeft = 500
Page.BorderRight = 500
Page.BorderTop = 500
Page.BorderBottom = 500
Page.Width = 20000
Page.Height = 20000

Propiedades elementales de los objetos de dibujo


Los objetos de dibujo incluyen figuras (rectángulos, círculos y demás), línea y objetos de
texto. Todas estas comparten un número de cracterísticas comunes y soportan el servicio
com.sun.star.drawing.Shape. Este servicio define las propiedades Size y
Position del objeto de dibujo.
El siguiente ejemplo crea e inserta un rectángulo en un objeto de dibujo:
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
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
Page.add(RectangleShape)

Este ejemplo usa la llamada a StarDesktop.CurrentComponent para determinar


cual documento está abierto. El objeto de documento determinado de esta forma retorna la
primera página del objeto de documento por medio de la llamada a drawPages(0).
Las estructuras Point y Size con el punto de origen (esquina izquierda) y el tamaño del
objeto de documento son inicializados. Los anchos son especificados en centécimas de
milímetro. El código del programa usa la llamada Doc.CreateInstance para crear el
objeto de dibujo rectángulo como se especifica en el servicio
com.sun.star.drawing.RectangleShape. Al final, el objeto de dibujo es asignado
a una página usando la llamada Page.add.
Propiedades de relleno
Las propiedades principales de relleno de color simple son:
• FillColor (Long) – color de relleno del área.
Usa el modo de relleno, se debe ajustar la propiedad FillStyle al modo de relleno
SOLID.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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:

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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
Dim Gradient As New com.sun.star.awt.Gradient
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
Gradient.Style = com.sun.star.awt.GradientStyle.LINEAR
Gradient.StartColor = RGB(255,0,0)
Gradient.EndColor = RGB(0,255,0)
Gradient.StartIntensity = 150
Gradient.EndIntensity = 150
Gradient.Angle = 450
Gradient.StepCount = 100
RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
RectangleShape.FillGradient = Gradient
Page.add(RectangleShape)

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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
Dim Hatch As New com.sun.star.drawing.Hatch
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.HATCH
Hatch.Style = com.sun.star.drawing.HatchStyle.SINGLE
Hatch.Color = RGB(64,64,64)
Hatch.Distance = 20
Hatch.Angle = 450
RectangleShape.FillHatch = Hatch
Page.add(RectangleShape)

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.

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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.BITMAP
RectangleShape.FillBitmapName = "Sky"
RectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT
Page.add(RectangleShape)

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)

Para hacer el relleno transparente, ajuste la propiedad de transparencia al 100.


Adicionalmente a la propiedad FillTransparence, el servicio
com.sun.star.Drawing.FillProperties también provee la propiedad
FillTransparenceGradient. Esta es usada para definir la gradiente que especifica la
transparencia del area de relleno.
Propiedades de la líneas
Todos los objetos de dibujo que pueden tener un borde soportan el servicio
com.sun.star.drawing.LineStyle. Algunas de las propiedades que este servicio

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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)

Adicionalmente a las propiedades listadas, el servicio


com.sun.star.drawing.LineStyle provee opciones de dibujo de líneas punteadas
y rayadas. Para más información, vea la referencia de API de StarOffice.
Propiedades de texto (Objetos de dibujo)
Los servicios com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties pueden formatear texto en los
objetos de dibujo.
Estos servicios están relacionados a caracteres individuales y párrafos según está descrito en
detalle en el capítulo 6 (Documentos de texto, pág 67).
El siguiente ejemplo inserta un texto en un rectángulo y formatea la fuente con el servicio
com.sun.star.style.CharacterPropierties:

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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
Page.add(RectangleShape)
RectangleShape.String = "Das ist ein Test"
RectangleShape.CharWeight = com.sun.star.awt.FontWeight.BOLD
RectangleShape.CharFontName = "Arial"

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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
Page.add(RectangleShape)
RectangleShape.String = "This is a test" ' May only take place after Page.add!
RectangleShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
RectangleShape.TextHorizontalAdjust = _
com.sun.star.drawing.TextHorizontalAdjust.LEFT
RectangleShape.TextLeftDistance = 300
RectangleShape.TextRightDistance = 300
RectangleShape.TextUpperDistance = 300
RectangleShape.TextLowerDistance = 300

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-

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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.Shadow = True
RectangleShape.ShadowColor = RGB(192,192,192)
RectangleShape.ShadowTransparence = 50
RectangleShape.ShadowXDistance = 200
RectangleShape.ShadowYDistance = 200
Page.add(RectangleShape)

Un vistazo a varios objetos de dibujo


Formas rectangulares
Los objetos rectangulares (com.sun.star.drawing.RectangleShape) soportan los
siguientes servicios para el formateado de objetos:
• 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
• CornerRadius (Long) radio del redondeo de las esquinas en centécimas de milímetro.
Círculos y elipses
El servicio com.sun.star.drawing.EllipseShape es el responsable de los círculos
y elipses y soporta los siguientes servicios:
• 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
Adicionalmente a estos servicios, los círculos y elipses también proveen las siguientes
propiedades:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• CircleKind (Enum) – tipo de círculo o elipse (valores de acuerdo con


com.sun.star.drawing.CircleKind)
• CircleStartAngle (Long) – ángulo inicial en décimas de grado. (sólo para
segmentos de círculo o elipse)
• CircleEndAngle (Long) – ángulo final en décimas de grado (sólo para segmentos de
círculo o elipse)
La propiedad CircleKind determina si un objeto es un cículo completo, una tajada de círculo,
o una sección de un círculo. Los siguientes valores están disponibles:
• com.sun.star.drawing.CircleKind.FULL círculo o elipse completa.
• com.sun.star.drawing.CircleKind.CUT sección de un círculo (círculo parcial
cuyas interfaces están ligadas directamente con otra)
• com.sun.star.drawing.CircleKind.SECTION tajada de un círculo
• com.sun.star.drawing.CircleKind.ARC ángulo (no incluye la línea del
círculo)
El siguiente ejemplo crea una tajada circular con un ángulo de 70 grados (producido por la
diferencia entre el grado inicial de 20 grados y el grado final de 90 grados)
Dim Doc As Object
Dim Page As Object
Dim EllipseShape 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)
EllipseShape = Doc.createInstance("com.sun.star.drawing.EllipseShape")
EllipseShape.Size = Size
EllipseShape.Position = Point
EllipseShape.CircleStartAngle = 2000
EllipseShape.CircleEndAngle = 9000
EllipseShape.CircleKind = com.sun.star.drawing.CircleKind.SECTION
Page.add(EllipseShape)

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)

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

• Propiedades de sombras com.sun.star.drawing.ShadowProperties


El siguiente ejemplo crea y formatea una línea con la ayuda de las propiedades nombradas.
El origen de las líneas es especificado en el propiedad Location, mientras que las
coordenadas listadas en la propiedad Size especifican el punto final de la línea

Dim Doc As Object


Dim Page As Object
Dim LineShape 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)
LineShape = Doc.createInstance("com.sun.star.drawing.LineShape")
LineShape.Size = Size
LineShape.Position = Point
Page.add(LineShape)

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Coordinates(2) As New com.sun.star.awt.Point
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
' Page.add must take place before the coordinates are set
Page.add(PolyPolygonShape)
Coordinates(0).x = 1000
Coordinates(1).x = 7500
Coordinates(2).x = 10000
Coordinates(0).y = 1000
Coordinates(1).y = 7500
Coordinates(2).y = 5000
PolyPolygonShape.PolyPolygon = Array(Coordinates())

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:

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

Dim Doc As Object


Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Square1(3) As New com.sun.star.awt.Point
Dim Square2(3) As New com.sun.star.awt.Point
Dim Square3(3) As New com.sun.star.awt.Point
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
' Page.add must take place before the coordinates are set
Page.add(PolyPolygonShape)
Square1(0).x = 5000
Square1(1).x = 10000
Square1(2).x = 10000
Square1(3).x = 5000
Square1(0).y = 5000
Square1(1).y = 5000
Square1(2).y = 10000
Square1(3).y = 10000
Square2(0).x = 6500
Square2(1).x = 8500
Square2(2).x = 8500
Square2(3).x = 6500
Square2(0).y = 6500
Square2(1).y = 6500
Square2(2).y = 8500
Square2(3).y = 8500
Square3(0).x = 6500
Square3(1).x = 8500
Square3(2).x = 8500
Square3(3).x = 6500
Square3(0).y = 9000
Square3(1).y = 9000
Square3(2).y = 9500
Square3(3).y = 9500
PolyPolygonShape.PolyPolygon = Array(Square1(), Square2(), Square3())

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• GraphicURL (String) - URL del gráfico


• AdjustLuminance (Short) – iluminación de los colores, como porcentaje (también son
permitidos valores negativos)
• AdjustContrast (Short) – contraste como porcentaje (valores negativos también son
permitidos)
• AdjustRed (Short) – valor del rojo como porcentaje (valores negativos también son
permitidos)
• AdjustGreen (Short) – valor del rojo como porcentaje (valores negativos también son
permitidos)
• AdjustBlue (Short) – valor del azul como porcentaje (valores negativos también son
permitidos)
• Gamma (Short) – valor del gama del gráfico
• Transparency (Short) – transparencia del gráfico como porcentaje
• GraphicColorMode (enum) – modo del color, por ejemplo, standard, estadios de gris,
blanco y negro (valores por defecto de acuerdo con
com.sun.star.drawing.ColorMode)
El siguiente ejemplo muestra como insertar una página dentro de un objeto gráfico:
Dim Doc As Object
Dim Page As Object
Dim GraphicObjectShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
' specifications, insignificant because latter coordinates are binding
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
GraphicObjectShape = Doc.createInstanc("com.sun.star.drawing.GraphicObjectShape")
GraphicObjectShape.Size = Size
GraphicObjectShape.Position = Point
GraphicObjectShape.GraphicURL = "file:///c:/test.jpg"
GraphicObjectShape.AdjustBlue = -50
GraphicObjectShape.AdjustGreen = 5
GraphicObjectShape.AdjustBlue = 10
GraphicObjectShape.AdjustContrast = 20
GraphicObjectShape.AdjustLuminance = 50
GraphicObjectShape.Transparency = 40
GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
Page.add(GraphicObjectShape)

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).

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

al grupo. No puede modificar los objetos una vez que están en el grupo.

Rotando y recorte de objetos de dibujo


Todos los objetos de dibujo que están descritos en las secciones previas pueden ser rotados y
recortados usando el servicio com.sun.star.drawing.RotationDescriptor.
El servicio provee las siguientes propiedades:
• RotateAngle (Long) ángulo de rotación en centécimas de grado
• ShearAngle (Long) ángulo de recorte en centécimas de grado
El siguiente ejemplo crea un rectángulo y lo rota a 30 grados usando la propiedad
RotateAngle:
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.RotateAngle = 3000
Page.add(RectangleShape)

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,

Capítulo 7 Documentos de libros de cálculo 


Capítulo 7Documentos de libros de cálculo 

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.

Trabajando con presentaciones


Adicionalmente a las funciones de dibujos provistas por la propiedad Presentation, el
documento de presentación tiene el objeto de presentación que provee acceso a propiedades
principales y mecanismos de contro para las presentaciones. Por ejemplo, este objeto provee
el método start que puede ser usado para iniciar la presentación.
Dim Doc As Object
Dim Presentation As Object
Doc = StarDesktop.CurrentComponent
Presentation = Doc.Presentation
Presentation.start()

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.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• start – Inicia la presentación


• end – finaliza la presentación
• rehearseTimings – inicia la presentación desde el inicio y establece su tiempo de
ejecución
Las siguientes propiedades también están disponibles:
• AllowAnimations (Boolean) ejecuta las animaciones en la presentación
• CustomShow (String) permite especificar el nombre de las presentaciones de manera
que pueda referenciar el nombre de la presentación.
• FirstPage (String) nombre de la filmina con la que desea iniciar la presentación
• IsAlwaysOnTop (Boolean) siemple despliega la ventana de la presentación como la
primera ventana en la pantalla.
• IsAutomatic (Boolean) automáticamente ejecuta toda la presentación
• IsEndless (Boolean) reinicia la presentación desde el inicio cuando esta termina.
• IsFullScreen (Boolean) automáticamente inicia la presentación en modo de pantalla
completa.
• IsMouseVisible (Boolean) despliega el puntero del mouse durante la presentación
• Pause (long) la cantidad de tiempo en que una pantalla blanca es desplegada al final de
la presentación
• StartWithNavigator (Boolean) despliega la ventana del navegador cuando inicia la
presentación
• UsePn (Boolean) despliega el puntero durante la presentación

Capítulo 7 Documentos de libros de cálculo 


 OpenOffice.org Guía del programador BASIC


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.

Usando diagramas en hojas de cálculo.


Los diagramas no son tratados como documentos independientes en OpenOffice.org, sino
como objetos incrustados en un documento existente.
Mientras los diagramas permanecen en los documentos aislados del contenido de los
documentos, cuando se usan hojas de cálculo, se provee un mecanismo que permite que se
establesca un vínculo entre el documento de datos y el diagrama insertado. El siguiente
ejemplo explica la interacción entre la hoja de cálculo y el 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
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)

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.

Capítulo 8 Diagramas (gráficos) 


Capítulo 8Diagramas (gráficos) 

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")

La primera línea define el objeto de diagrama correspondiente. La segunda línea reemplaza el


diagrama actual con uno nuevo. En este ejemplo, un diagrama de líneas.
En Excel, es hecha una distinción entre los diagramas que han sido insertados como una hoja
separada en un documento Excel y los gráficos que han sido vínculados en una tabla de
página. Correspondiente, dos métodos diferentes están definidos para estos gráficos. Esta
distinción no es hecha en OpenOffice.org Basic, porque los gráficos en OpenOffice.org Calc
son siempre objetos vínculados en la tabla de la página. Los gráficos son siempre accesados
usando la lista del objeto de hoja de cálculo asociado.

La estructura de los diagramas


La estructura de un diagrama – y las listas de servicios e interfaces soportados por el –
dependen de su tipo. Los métodos y propiedades de un Z-eje, son, por ejemplo, solamente
disponibles para diagramas 3D, pero no para diagramas 2D. En los diagramas de pastel, no
hay interfaces para trabajar con ejes.

Los elementos individuales de un diagrama


Título, sub-títulos, y llaves.
Un título, un sub-título, y una llave forman parte de los elementos básicos de cada diagrama.
Los diagramas proveen sus propios objetos para cada uno de estos elementos. El objeto
diagrama provee las siguientes propiedades para administrar estos elementos:
• HasMainTitle (Boolean) Activa el título.
• Title (Object) objeto con información detallada acerca del título del diagrama(soporta
el servicio com.sun.star.chart.ChartTitle).
• HasSubTitle(Boolean) activa el sub-título.
• Subtitle (Object) objeto q}con la información detallada acerca del sub-título del
diagrama (soporta el servicio com.sun.star.chart.ChartTitle).
• HasLegend (Boolean) activa la llave.
• Legend (Object) objeto con información detallada acerca de la llave del diagrama
(soporta el servicio com.sun.star.chart.ChartLegendPosition).
En mucohs aspectos, los elementos especificados corresponden a elementos de dibujo. Esto

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

es debido a que de hecho ambos usan el servicio com.sun.star.chart.ChartTitle


y el com.sun.star.chart.ChartLegendPosition soportados por el servicio
support the com.sun.star.drawing.Shape, el cual forma las bases de programación
técnica de los elementos de dibujo.
Los usuarios entonces tienen la oportunidad de determinar la posición y tamaño de los
elementos usando las propiedades Size y Position.
Las otras propiedades de relleno y líneas (los servicios
com.sun.star.drawing.FillProperties y com.sun.star.drawing.LineStyle) asi
como las propiedades de los caracteres (Servicio
com.sun.star.style.CharacterProperties) son provistos por los elementos de
formateo com.sun.star.chart.ChartTitle los que contienen no solamente las propiedades de
formato nombradas, sino también estas otras dos propiedades:
• TextRotation (Long) ángulo de rotación del texto en centécimas de grado.
• String (String) el texto que es desplegado como el título o sub-título.
La llave del diagrama (el servicio com.sun.star.chart.ChartLegend) contiene la
siguientes propiedad adicional:
• Alignment (Enum) posición en la cual debe aparecer la llave (valores por defecto de
acuerdo con com.sun.star.chart.ChartLegendPosition).
El siguiente ejemplo crea un diagrama y le asigna el titulo "Test", el sub-título "Test 2" y una
llave. La llave tiene un color de fondo gris, es colocado en la parte de abajo del diagrama, y
tiene un tamaño de letra de 7 puntos.

Capítulo 8 Diagramas (gráficos) 


Capítulo 8Diagramas (gráficos) 

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.HasMainTitle = True
Chart.Title.String = "Test"
Chart.HasSubTitle = True
Chart.Subtitle.String = "Test 2"
Chart.HasLegend = True
Chart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
Chart.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID
Chart.Legend.FillColor = RGB(210, 210, 210)
Chart.Legend.CharHeight = 7

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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).

Capítulo 8 Diagramas (gráficos) 


Capítulo 8Diagramas (gráficos) 

• HasXAxisDescription (Boolean) activa la descripción para el eje de las X.


• HasXAxisGrid (Boolean) activa la rejilla principal para el eje de las X.
• XMainGrid (Object) objeto con información detallada acerca de la rejilla principal para
el eje de las X (soporta el servicio com.sun.star.chart.ChartGrid).
• HasXAxisHelpGrid (Boolean) activa la rejilla auxiliar para el eje de las X.
• XHelpGrid (Object) objeto con información detallada acerca de la rejilla auxiliar para
el eje de las X. (soporta el servicio com.sun.star.chart.ChartGrid).
• HasXAxisTitle (Boolean) activa el título para el eje de las X.
• XAxisTitle (Object) objeto con información detallada acerca del título del eje de las
X.(soporta el servicio com.sun.star.chart.ChartTitle).
Segundo eje de las X y las Y
Las siguientes propiedades están disponibles para el segundo eje de las X y las Y
(propiedades tomando como ejemplo el segundo eje de las X):
• HasSecondaryXAxis (Boolean) activa el segundo eje de las X.
• SecondaryXAxis (Object) objeto con información detallada acerca del segundo eje de
las X. (soporta el servicio com.sun.star.chart.ChartAxis).
• HasSecondaryXAxisDescription (Boolean) activa la descripción para el eje de
las X.
Propiedades de los ejes
Los objetos de los ejes de un diagrama OpenOffice.org soportan el servicio
com.sun.star.chart.ChartAxis.
Adicionalmente a las propiedades para los caracteres (servicio
com.sun.star.style.CharacterProperties, refierase al capítulo 6, pág 71) y
las líneas (servicio com.sun.star.drawing.LineStyle, refierase al capítulo 7, pág
122), provee las siguientes propiedades:
• Max (Double) – el valor máximo del eje.
• Min (Double) – el valor mínimo del eje.
• Origin (Double) – punto de intersección para el cruce de los ejes.
• StepMain (Double) – distancia entre las dos líneas primarias de los ejes.
• StepHelp (Double) – distancia entre las dos líneas secundarias de los ejes.
• AutoMax (Boolean) – automáticamente determina el valor máximo para los ejes.
• AutoMin (Boolean) – automáticamente determina el valor mínimo para los ejes.
• AutoOrigin (Boolean) – automáticamente determina el punto de intersección para el
cruce de los ejes.
• AutoStepMain (Boolean) – automáticamente determina la distancia entre las líneas

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

Capítulo 8 Diagramas (gráficos) 


Capítulo 8Diagramas (gráficos) 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

Capítulo 8 Diagramas (gráficos) 


Capítulo 8Diagramas (gráficos) 

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.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC


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.

SQL: un lenguaje de consultas


El lenguaje SQL se provee como un lenguaje de consultas para los usuarios de SDBC. Para
comparar las diferencias entre los distintos dialectos de SQL, los componentes de el SDBC
de OpenOffice.org tienen su propio analizador SQL.
Este usa la ventana de consultas para verificar los comandos SQL digitados y corrige los
errores de sintaxis más simples, como aquellos asociados a carateres en minúscula o
mayúscula.
Si un controlador permite el acceso a una fuente de datos que no soporta SQL, entonces los
comandos SQL pueden ser convertido independientemente a las necesidades nativas.
La implementación del SQL para SDBC está orientada a SQL-ANSI-Standard. Extensiones
especificas de Microsoft, como el constructor INNER JOIN no están soportadas . Estas
pueden ser reemplazadas con los comandos estandard (INNER JOIN, por ejemplo, puede ser

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")

Capítulo 9 Acceso a bases de datos 


Capítulo 9Acceso a bases de datos 

reemplazado por la clausula WHERE correspondiente).

Tipos de acceso a bases de datos


Las interfaces de bases de datos de OpenOffice.org están disponibles en las aplicaciones
OpenOffice.org Writer y OpenOffice.org Calc , y también en los formularios de bases de
datos.
En OpenOffice.org Writer, cartas standard pueden ser creadas con la asistencia de las fuentes
de datos SDBC y pueden ser impresas. También hay una opción de mover datos desde la
ventana de bases de datos usando la función de arrastrar y soltar (drag-and-drop).
Si el usuario mueve una tabla de una base de datos dentro de una hoja de cálculo,
OpenOffice.org crea un area de tabla la cual puede ser actualizada con el click del mouse si
los datos originales han sido modificados. Y al revés, los datos de la hoja de cálculo pueden
ser movidos a la tabla de la base de datos y se realiza una importación.
Finalmente, OpenOffice.org provee un mecanismo de formularios basados en bases de datos.
Para hacer esto, el usuario primero crea un formulario standard OpenOffice.org Writer o
OpenOffice.org Calc y luego lo vincula a los campos de la base de datos.
Todas las funciones especificadas aquí están basadas en interfaces de usuario de
OpenOffice.org. No es necesario conocimiento de programación para usar las funciones
correspondientes.
Este capítulo, sin embargo, provee un poco de información acerca de las funciones
especificadas, pero se concentra en la interface de programación de SDBC, la cual permite
consultas automáticas a las bases de datos y esto permite que un rango mucho mayor de
aplicaciones sean usadas.
Un conocimiento básico de la forma en que funcionan las bases de datos y del lenguaje de
consultas SQL es necesario para una completa compresión de las secciones siguientes.

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim DatabaseContext As Object


Dim Names
Dim I As Integer
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Names = DatabaseContext.getElementNames()
For I = 0 To Ubound(Names())
MsgBox Names(I)
Next I

Las fuentes de datos individuales están basadas en el servicio


com.sun.star.sdb.DataSource y puede determinarse desde que contexto de base de
datos está siendo usado usando el método getByName:
Dim DatabaseContext As Object
Dim DataSource As Object
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")

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

Capítulo 9 Acceso a bases de datos 


Capítulo 9Acceso a bases de datos 

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

Adicionalmente a la propiedad Name usada en el ejemplo, com.sun.star.sdb.QueryDefinition


provee un amplio rango de otras propiedades. Estas son:
• Name (String) nombre de la consulta.
• Command (String) Comando SQL (normalmente un comando SELECT).
• UpdateTableName (String) para consultas que no están basadas en varias tablas:
nombre de la tabla en la cual es posible la modificación de valores.
• UpdateCatalogName (String) nombre de los catálogos para la actualización de tablas.
• UpdateSchemaName (String) nombre de los diagramas para la actualización de tablas.
El siguiente ejemplo muestra como un objeto de consulta puede ser creado de una forma
controlada por programación y puede ser asignado a una fuente de datos.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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()
QueryDefinition = createUnoService("com.sun.star.sdb.QueryDefinition")
QueryDefinition.Command = "SELECT * FROM Customer"
QueryDefinitions.insertByName("NewQuery", QueryDefinition)

El objeto consulta primero es creado usando la llamada createUnoService, luego


inicializado, y luego insertado dentro del objeto QueryDefinitions por medio de
significado del insertByName.

Vínculos y formularios de bases de datos


Para simplificar el trabajo con las fuentes de datos, OpenOffice.org provee una opción de
vinculas las fuentes de datos con formularios de bases de datos. Los vínculos están
disponibles mediante el método getBookmarks(). Este retorna un contenedor con
nombre (com.sun.star.sdb.DefinitionContainer) el cual contiene todos los
vínculos a las fuentes de datos. Los marcadores pueden ser accesados bien sea por nombre
(Name) o por índice (Index).
El siguiente ejemplo determina la URL del marcador "MyBookmark".
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Bookmarks As Object
Dim URL As String
Dim I As Integer
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
Bookmarks = DataSource.Bookmarks()
URL = Bookmarks.getByName("MyBookmark")
MsgBox URL

Acceso a bases de datos


Una conexión a una base de datos es necesario para accesarla. Este es el canal de
transferencia que permite la comunicación directa con la base de datos. A diferencia de las
fuentes de datos presentadas en la sección previa, la conexión a base de datos puede ser
restablecida cada vez que el programa es reiniciado.
OpenOffice.org Provee varias formas de estableces conexiones a bases de datos. Aquí hay
una explicación para el método basado en una fuente de datos existente.

Capítulo 9 Acceso a bases de datos 


Capítulo 9Acceso a bases de datos 

Dim DatabaseContext As Object


Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection("","")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

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.

Interacción de las tablas


Una tabla es normalmente accesada en OpenOffice.org por medio del objeto ResultSet.
ResultSet es un tipo de constructor que indica un conjunto actual de datos dentro de un
volumen de resultados obtenido usando el comando SELECT.
El ejemplo muestra como un ResultSet puede ser usado para consultar valores de una
tabla en la base de datos.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim DatabaseContext As Object


Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection("","")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT CustomerNumber FROM Customer")
If Not IsNull(ResultSet) Then
While ResultSet.next
MsgBox ResultSet.getString(1)
Wend
End If

Mientras la conexión a la base de datos ha sido establecida, el código usado en el ejemplo


primero usa la llamada Connection.createObject para crear un objeto Statement.
Este objeto Statement luego usa la llamada executeQuery para retornar el
ResultSet actual. El programa ahora verifica que ResultSet exista y recorre los
registros de datos mediante un ciclo. Los valores requeridos (en el ejemplo, aquellos del
campo "CustomerNumber") retorna el ResultSet usando el método getString,
mientras que el parámetro 1 determina que la llamada es relativa a la primera columna.
El objeto ResultSet de SDBC es comparable con el objeto Recordset de DAO y ADO, puesto
que también provee acceso iteractivo a la base de datos.
La base de datos es actualmente accesada en OpenOffice.org por medio del objeto
ResultSet. Este refleja el contenido de la tabla o el resultado de un comando SQL-
SELECT. En el pasado, el objeto ResultSet proveyó métodos residentes en el objeto
Application para la nevegación dentro de los datos (e.j: DataNextRecord).

Métodos específicos-al-tipo para obtener datos


Como se observó en el ejemplo de la sección anterior, OpenOffice.org provee un método
getString para accesar los contenidos de las tablas. El método provee el resultado en la
forma de una cadena. Los siguientes métodos de acceso están disponibles:
• getByte() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getShort() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getInt() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getLong() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getFloat() soporta los tipos de datos SQL para números, caracteres y cadenas.
• getDouble() soporta los tipos de datos SQL para números, caracteres y cadenas.

Capítulo 9 Acceso a bases de datos 


Capítulo 9Acceso a bases 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.

Las variantes a ResultSet


La velocidad del acceso a la base de datos es a menudo una materia crítica. OpenOffice.org
por eso ofrece varias maneras de optimizar ResultSets y la forma en que se controla la
velocidad de acceso. Muchas funciones que provee ResultSet, entre más conpleja sea su
implementación normalmente son por lo tanto funciones más lentas.
Un ResultSet simple, como es que fue presentado en la sección "interacción de las
tablas", provee el mínimo de funciones de búsqueda disponibles. Sólo permite interacción
para ser aplicada hacia adelante, y cuales valores van a ser preguntados. Opciones de
navegación más extensos, como la posibilidad de modificar valores, por eso no están
incluidos.
El objeto Statement usado para crear el ResultSet provee algunas propiedades que
permiten definir las funciones que influencian el ResultSet:
• ResultSetConcurrency (const) Especificaciones sobre cómo losdatos pueden ser
modificados (especificaciones de acuerdo con
com.sun.star.sdbc.ResultSetConcurrency).
• ResultSetType (const) especificaciones acerca del tipo del ResultSets
(especificaciones de acuerdo con com.sun.star.sdbc.ResultSetType).
Los valores definidos en com.sun.star.sdbc.ResultSetConcurrency son:
• UPDATABLE - ResultSet permite que los valores sean modificados.
• READ_ONLY ResultSet no permite modificaciones.
El grupo de constantes com.sun.star.sdbc.ResultSetConcurrency proveen las
siguientes especificaciones:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• FORWARD_ONLY ResultSet solamente permite la navegación hacia adelante.


• SCROLL_INSENSITIVE ResultSet permite cualquier tipo de navegación, sin
embargo no se refrescan los cambios en los datos originales.
• SCROLL_SENSITIVE ResultSet permite cualquier tipo de navegación, los cambios
en los datos originales tienen impacto sobre ResultSet.
Un ResultSet conteniento las propiedades READ_ONLY y SCROLL_INSENSITIVE
corresponden al tipo Snapshot en ADO y DAO.
Cuando usa las propiedades del ResultSet UPDATEABLE y SCROLL_SENSITIVE, la
función de vistas del ResultSet es comparable con en tipo Dynaset Recordset de
ADO y DAO.

Métodos de navegación en ResultSets


Si un ResultSet es un tipo SCROLL_INSENSITIVE o SCROLL_SENSITIVE, soporta
un amplio rango de métodos de navegación en el almacén de datos. Los métodos principales
son:
• next() navega al siguiente registro de datos.
• previous() navega al anterior registro de datos.
• first() navega al primer registro de datos.
• last() navega al último registro de datos.
• beforeFirst() navega al registro de datos anterior al primero .
• afterLast() navega al siguiente registro de datos del último registro.
Todos los métodos retornan un parámetro booleano que especifica si la nevagación tuvo
éxito.
Para determinar la posición actual del cursor, están provistos los siguientes métodos de
prueba y todos retornan un valor booleano:
• isBeforeFirst() ResultSet está antes del primer registro de datos.
• isAfterLast() ResultSet está después del último registro de datos.
• isFirst() ResultSet está en el primer registro de datos.
• isLast() ResultSet está en el último registro de datos.

Modificando registro de datos


Si un ResultSet ha sido creado con el valor ResultSetConcurrency =
UPDATEABLE, entonces su contenido puede ser editado. Esto solamente aplica para aquellos
comandos SQL que permitan la reescritura de datos a la base de datos (dependen de su
principio). Esto no es, por ejemplo, posible para comandos SQL complejos con columnas
vinculadas o valores acumulativos.

Capítulo 9 Acceso a bases de datos 


Capítulo 9Acceso a bases de datos 

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().

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC


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.

Tabajando con diálogos


Los diálogos de OpenOffice.org Basic consisten en una ventana de diálogos que puede
contener campos de texto, cajas de listas, botones de radio y otros elementos de control.

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()

CreateUnoDialog crea un objeto llamado "Dlg" que está referenciado al diálogo


asociado. Antes debe crear el diálogo, debe asegurarse que librería que está usando (en este
ejemplo, la librería Standard) esté cargada. Si no, el método LoadLibrary realiza esta
tarea.
Una vez que el objeto de diálogo ha sido inicializado, puede usar el método Execute para
desplegar el diálogo. Los diálogos como este están definidos como modales porque no
permiten ninguna otra acción del programa hasta que sean cerrados. Cuando un diálogo es
abierto, el programa permanece en la llamada a Execute.
El método dispose al final del código libera los recursos usados por el diálogo mientras
finaliza el programa.

Cerrando diálogos
Cerrando con Aceptar o cancelar

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

Si un diálogo contiene un botón Aceptar o Cancelar, el diálogo automáticamente es cerrado


cuando se presiona uno de estos botones. Más información acerca de cómo trabajan estos
botones está mencionada en la sección "Elementos de control de los diálogos" de este
capítulo.
Si cierra un diálogo haciendo click en el botón Aceptar, el método Execute retorna un
valor de 1, de otra forma es retornado un valor de 0.
Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog)
Select Case Dlg.Execute()
Case 1
MsgBox "Ok pressed"
Case 0
MsgBox "Cancel pressed"
End Select

Cerrando con el botón de cerrar en la barra de título


Si lo desea, puede cerrar un diálogo haciendo click en el botón cerrar en la barra de título. En
este caso, el método Execute del diálogo retorna un valor de 0, de la misma forma que
cuando se presiona el botón cancelar.
Cerrando con una llamada explícita del programa
También puede cerrar un diálogo abierto con el método endExecute:
Dlg.endExecute()

Accesando elementos de control individuales


Un diálogo puede contener cualquier número de elementos de control. Puede accesar estos
elementos por medio del método getControl que retorna el nombre del elemento de
control.
Dim Ctl As Object
Ctl = Dlg.getControl("MyButton")
Ctl.Label = "New Label"

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.

Trabajando con el modelo de diálgos y los controles de


elementos
La división entre los elementos visibles del programa (Vista) y los datos o documentos detrás

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

de ellos (Modelo) ocurre en muchos lugares de la API de OpenOffice.org. Adicionalmente a


los métodos y propiedades de los elementos de control, ambos diálogos y elementos de
control tienen un objeto Modelo subordinado. Este objeto permite que pueda accesar
directamente el contenido del diálogo o el elemento de control.
En los diálogos, la distinción entre los datos y el desplegado no siempre es clara como en
otras areas de la API de OpenOffice.org. Los elementos de la API están disponibles por
medio de la Vista y el Modelo.
La propiedad Model provee un acceso controlado por programa al modelo del diálogo y a los
objetos de elementos de control
Dim cmdNext As Object
cmdNext = Dlg.getControl("cmdNext")
cmdNext.Model.Enabled = False

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

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

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.

Foco y secuencia del tabulador


Puede navegar por los elementos de control en cualquier diálogo presionando la tecla "Tab".
Las siguientes propiedades están disponibles en este contexto en el modelo de control de
elementos:
• Model.Enabled (Boolean) activa el elemento de control
• Model.Tabstop (Boolean) permite al elemento de control que sea accesado por medio
de la tecla Tab.
• Model.TabIndex (Long) posición del elemento de control en el orden de activación
Finalmente, el elemento de control provee un método getFocus que asegura que el elemento
de control subyacente reciba el foco:
• getFocus elemento de control que recibe el foco (solamente para diálogos)

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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:

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

Página 1:

Página 2:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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).

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

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:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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

Si este procedimiento fuera creado en OpenOffice.org Basic, puede asignarlo en un evento


requerido usando la ventana de propiedades del editor de diálogos.

La asignación de todas las listas de diálogos de los procedimientos de OpenOffice.org Basic.


Para asignar un procedimiento a un evento, seleccione el procedimiento, y luego haga click
en Asignar.

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:

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

Sub ProcessEvent(Event As Object)


End Sub

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.

Eventos del Mouse


OpenOffice.org Basic reconoce los siguientes eventos de mouse:
• Mouse moved El usuario mueve el mouse
• Mouse moved while key pressed el usuario arrastra el mouse, mientras sostiene un botón.
• Mouse button pressed el usuario presiona un botón del mouse
• Mouse button released el usuario libera un botón del mouse
• Mouse outside el usuario mueve el mouse fuera de la ventana actual
La estructura de los objetos de eventos asociados están definidos en la estructura
com.sun.star.awt.MouseEvent la cual provee la siguiente información:
• Buttons (short) Botón presionado (uno o más constantes de acuerdo con
com.sun.star.awt.MouseButton).
• X (long) Coordenada Xdel mouse, medida en pixels desde la esquina superior izquierda
del elemento de control
• Y (long) Coordenada Y del mouse, medida en pixels desde la esquina superior izquierda
del elemento de control
• ClickCount (long) número de clicks asociados a un evento del mouse (Si
OpenOffice.org puede responder lo suficientemente rápido, ClickCount es también 1 para
el doble-click porque solamente es inicializado un evento individual).
Las constantes definidas en com.sun.star.awt.MouseButton para los botones del mouse son:
• LEFT botón izquierdo del mouse
• RIGHT botón derecho del mouse
• MIDDLE botón del centro del mouse
El siguiente ejemplo muestra la posición del mouse y también cual botón del mouse ha sido
presionado:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Sub MouseUp(Event As Object)


Dim Msg As String
Msg = "Keys: "
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
Msg = Msg & "LEFT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
Msg = Msg & "RIGHT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
Msg = Msg & "MIDDLE "
End If
Msg = Msg & Chr(13) & "Position: "
Msg = Msg & Event.X & "/" & Event.Y
MsgBox Msg
End Sub

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.

Eventos del teclado


Los siguientes eventos del teclado están disponibles en OpenOffice.org Basic:
• Key pressed el usuario presiona una tecla
• Key released el usuario libera una tecla
Ambos eventos están relacionados a las acciones lógicas de las teclas, no a acciones físicas.
Si el usuario presiona varias teclas para un carácter individual (por ejemplo, para agregar un
acento a un caracter), entonces OpenOffice.org Basic solamente crea un evento.
Una acción simple de una modificación de una tecla, como la tecla Shift o la letra Alt no crea
un evento independiente.
La información sobre las teclas presionadas está provistas por el objeto de evento que
OpenOffice.org suple para el manejo de eventos. Este contiene las siguientes propiedades:
• KeyCode (short) código de la tecla presionada (los valores por defecto de acuerdo con
com.sun.star.awt.Key)
• KeyChar (String) el carácter que ha sido ingresado (tomando en cuenta las teclas de
modificación)
El siguiente ejemplo usa la propiedad KeyCode para establecer si ha sido presionada la tecla
"Enter", la tecla "Tab", o alguna otra de las teclas de control. Si una de estas teclas ha sido
presionada, retorna el nombre de la tecla, de otra forma el carácter de la tecla es retornado:

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

Sub KeyPressed(Event As Object)


Dim Msg As String
Select Case Event.KeyCode
Case com.sun.star.awt.Key.RETURN
Msg = "Return pressed"
Case com.sun.star.awt.Key.TAB
Msg = "Tab pressed"
Case com.sun.star.awt.Key.DELETE
Msg = "Delete pressed"
Case com.sun.star.awt.Key.ESCAPE
Msg = "Escape pressed"
Case com.sun.star.awt.Key.DOWN
Msg = "Down pressed"
Case com.sun.star.awt.Key.UP
Msg = "Up pressed"
Case com.sun.star.awt.Key.LEFT
Msg = "Left pressed"
Case com.sun.star.awt.Key.RIGHT
Msg = "Right pressed"
Case Else
Msg = "Character " & Event.KeyChar & " entered"
End Select
MsgBox Msg
End Sub

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.

Eventos específicos de los elementos de control


Adicionalmente a los eventos anteriores, los cuales están soportados por todos los elementos
de control, hay algunos eventos de elementos de control específicos están definidos
solamente para ciertos elementos de control. Los eventos más importantes son:
• When Item Changed el valor de un elemento de control cambia
• Item Status Changed el estado de un elemento de control cambia

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• Text modified el texto de un elemento de control cambia


• When initiating una acción que puede ser realizada cuando un elemento de control es
disparado (por ejemplo, se presiona un botón)
Cuando trabaje con eventos, note que ciertos de ellos, como el "When initiating", puede ser
inicializado cada vez que haga un click en el mouse o en algunos de los elementos de control
(por ejemplo, los botones de radio). No se realizan acciones para verificar si el estado del
elemento de control actualmente ha cambiado. Para evitar estos "elementos ciegos", guarde el
valor viejo del elemento de control en una variable global, y luego verifíquelo para ver si el
valor ha cambiado cuando se ejecuta un evento.
Las propiedades para el evento "Item Status Changed" son:
• Selected (long) actualmente está seleccionada la entrada
• Highlighted (long) actualmente está marcada la entrada
• ItemId (long) ID de la entrada

Elementos de control de los diálogos en detalle


OpenOffice.org Basic reconoce un rango de elementos de control que puede ser dividido en
los siguientes grupos:
Campos de entradas:
• Campos de texto
• Campos de fechas
• Campos de hora
• Campos numéricos
• Campos de moneda
Campos que adoptan cualquier formato
Botones:
• Botones estándar
• cajas de chequeo (Checkboxes)
• Botones de radio
Listas de selección
• cajas de listas
• cajas de combo
Otros elementos de control:
Barras de desplazamiento (horizontal y vertical)

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

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)

Botones de opciones (Option button)


Estos botones generalmente son usados en grupos y permiten que seleccione una de varias
opciones.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

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.

A diferencia de VBA, no puede insertar botones de opción en un grupo de elementos de control en


OpenOffice.org Basic. La agrupación de los elementos de control en OpenOffice.org Basic solamente es
usada para asegurar la división visual mediante el dibujo de un marco alrrededor de los elementos de
control.

Cajas de verficación (Checkboxes6)


Las cajas de verificación es usado para grabar un valor de Si o No y dependiendo del modo,
puede adoptar dos o tres estados. Adicional al estado de Si o No, la caja de chequeo puede
tener un estado intermedio si el estado Si o No tiene más de un significado o no es claro.
Las cajas de chequeo proveen las siguientes propiedades:
• State (Short) estado de la caja de chequeo (0: no, 1: si, 2: estado intermedio)
• Label (String) etiqueta del elemento de control
• enableTriState (Boolean) adicionalmente al estado activado o desactivado, también

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.

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

puede usar el estado intermedio


El objeto model provee las siguientes propiedades:
• Model.FontDescriptor (struct) estructura que detalla la fuente usada (de acuerdo
con la estructura com.sun.star.awt.FontDescriptor)
• Model.Label (String) etiqueta para el elemento de control
• Model.Printable (Boolean) el elemento de control puede ser impreso
• Model.State (Short) estado de la caja de chequeo (0: no, 1: si, 2: estado intermedio)
• Model.Tabstop (Boolean) el elemento de control puede ser accesado con 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

Campos de texto (text fields)


Los campos de texto permiten a los usuarios ingresar número y texto. El servicio
com.sun.star.awt.UnoControlEdit. tiene las bases para los campos de texto.
Un campo de texto puede contener una o más líneas que pueden ser editadas o bloqueadas
para las entradas de usuarios. Los campos de texto también pueden ser usados como campos
especiales de moneda o numéricos y también como campos de pantalla para tareas
especiales.
Como estos elementos de control están basados en el servicio UnoControlEdit Uno, su
manejo controlado por programa es similar.
Los campos de texto proveen las siguientes propiedades:
• Text (String) texto actual
• SelectedText (String) texto resaltado actual
• Selection (Struct) resaltado de detalles de solo lectura (estructura de acuerdo con
com.sun.star.awt.Selection, con las propiedades Min y Max para especificar
el inicio y el final del resaltado actual)
• MaxTextLen (short) número máximo de caracteres que puede especificar en el campo
• Editable (Boolean) verdadero activa la opción de ingresado de texto, falso bloquea la
opción de entrada (la propiedad no puede ser llamada directamente, sino por medio de
IsEditable)
• IsEditable (Boolean) el contenido del elemento de control puede ser cambiado o
sólo-lectura.
También, las siguientes propiedades son provistas por el objeto model asociado:

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• Model.Align (short) orientación del texto(0: alineado a la izquierda, 1: centrado, 2:


alineado a la derecha)
• Model.BackgroundColor (long) color del fondo del elemento de control
• Model.Border (short) tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple)
• Model.EchoChar (String) carácter de relleno para campos de clave
• Model.FontDescriptor (struct) estructura con detalles de la fuente usada (de
acuerdo con la estructura com.sun.star.awt.FontDescriptor)
• Model.HardLineBreaks (Boolean) saltos de línea automáticos son insertados de
manera permanente en el texto del elemento de control.
• Model.HScroll (Boolean) el campo de texto tiene una barra horizontal
• Model.MaxTextLen (Short) tamaño máximo del texto, donde 0 corresponde a que no
tiene límite
• Model.MultiLine (Boolean) permite la entrada de varias líneas
• Model.Printable (Boolean) el elemento de contro 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.Text (String) texto asociado con el elemento de control
• Model.TextColor (Long) texto del elemento de control
• Model.VScroll (Boolean) el campo de texto tiene una barra vertical
• 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

Cajas de listas (List Boxes)


Las cajas de listas (servicio com.sun.star.awt.UnoControlListBox) soportan las
siguientes propiedades:
• ItemCount (Short) número de elementos, sólo lectura
• SelectedItem (String) texto de la entrada resaltada, sólo lectura
• SelectedItems (Array Of Strings) campo de datos con las entradas resaltadas, sólo
lectura
• SelectedItemPos (Short) número de entradas resaltadas actuales, sólo lectura
• SelectedItemsPos (Array of Short) campo de datos con el número de entradas
resaltadas (para listas que soportan selecciones múltiples), sólo lectura
• MultipleMode (Boolean) Verdadero activa la opción para entradas de selección

Capítulo 10 Diálogos 


Capítulo 10Diálogos 

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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC


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.

Trabajar con formularios


Los formularios de OpenOffice.org pueden contener campos de texto, cajas de listas, botones
de radio y un rango de otros elementos de control, los cuales son insertados directamente en
los documentos de texto y hojas de cálculo. La barra de herramientas de las funciones de los
formularios se usa para editar formularios.
Un formulario OpenOffice.org puede adoptar uno o dos modos: el modo de borrador y el
modo de desplegado. En el modo de borrador, la posición de los elementos de control pueden
cambiar y sus propiedades pueden ser editadas usando la ventana de propiedades.
La barra de herramientas de las funciones de formularios también es usada para cambiar
entre los modos.

Determinando los objetos de formularios


Las posiciones de los elementos de control de OpenOffice.org de un formulario son del nivel
de objetos de dibujo. El objeto de formulario actual puede ser accesado por medio de la lista
de formularios en el nivel de dibujo. Los objetos son accesados como sigue en los
documentos de texto:

Capítulo 11 Formularios 


Capítulo 11Formularios 

Dim Doc As Object


Dim DrawPage As Object
Dim Form As Object
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

El método GetByIndex retorna el formulario con el número de índice 0.


Cuando trabaja con hojas de cálculo, in estado intermedio se necesita en la lista de hojas,
porque los niveles de dibujo no están localizados directamente en el documento sino en las
hojas individuales:
Dim Doc As Object
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

Y como se sugiere en el nombre del método GetByIndex, un documento puede contener


varios formularios. Es útil, por ejemplo, si el contenido de diferentes bases de datos están
desplegados dentro de un documento, o si una relación 1:n7 es desplegada dentro de un
formulario. La opción de crear sub-formularios también está provista para este propósito.

Tres aspectos de los elementos de control de un formulario


Los elementos de control de un formulario tienen tres aspectos:
Primero, hay un Model de los elementos de control. Este es el objeto clave del programador
de OpenOffice.org Basic cuando se trabaja con elementos de control de formularios.
La contraparte a esto es la Vista de los elementos de control, que administra el despliege de
la información.
Desde que los elementos de control de los formularios dentro de los documentos son
administrados como elementos de dibujo especiales, también hay un objeto "Shape" que
refleja elementos de propiedades de dibujo específicos del elemento de control (en particular
su posición y tamaño).

Accesando el Modelo de los elementos de contro de los


formularios
Los modelos de los elementos de control de un formulario están disponibles por medio del
método GetByName en el objeto formulario:

7 N.T. También se puede traducir en "relación de uno a muchos".

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Dim Doc As Object


Dim Form As Object
Dim Ctl As Object
Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("MyListBox")

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.

Accesando la vista de los elementos de control de los


formularios
Para accesar la vista de un formulario de elementos de control, primero se necesita el objeto
model asociado. La vista del elemento de control puedeser determinada con una instancia del
model usando el controlador del documento.

Capítulo 11 Formularios 


Capítulo 11Formularios 

Dim Doc As Object


Dim DocCrl As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim CtlView As Object
Dim I as Integer
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Forms = Doc.Drawpage.Forms
For I = 0 To Forms.Count – 1
Form = Forms.GetbyIndex(I)
If Form.HasByName("MyListBox") Then
Ctl = Form.GetbyName("MyListBox")
CtlView = DocCrl.GetControl(Ctl)
Exit Function
End If
Next I

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.

Accesando el objeto formas de los formularios de elementos


de control
El método para accesar los objetos de formas de un elemento de control también usa el nivel
de dobujo del documento. Para determinar un elemento de control especial, todos los
elementos de dibujo del nivel de dibujo debe ser buscados.
Dim Doc As Object
Dim Shape as Object
Dim I as integer
Doc = StarDesktop.CurrentComponent
For i = 0 to Doc.DrawPage.Count – 1
Shape = Doc.DrawPage(i)
If HasUnoInterfaces(Shape, _
"com.sun.star.drawing.XControlShape") Then
If Shape.Control.Name = "MyListBox" Then
Exit Function
End If
End If
Next

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

Como se mencionó, la posición y el tamaño de los elementos de control puede ser


determinada usando el objeto "forma" (shape) asociado. La forma del elemento de control,
como cualquier otro objeto forma, provee las propiedades Size y Position para este
propósito:
• Size (struct) tamaño del elemento de control (estructura de datos
com.sun.star.awt.Size).
• Position (struct) posición del elemento de control (estructura de datos
com.sun.star.awt.Point).
El siguiente ejemplo muestra como la posición y el tamaño de un elmento de control puede
ser usada con el objeto forma asociado:
Dim Shape As Object
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Shape.Size = Size
Shape.Position = Point

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.

Elementos de control de formularios en detalle


Los elementos de control disponibles en los formularios son similares a los que aparecen en
los diálogos. Va desde rangos de selección de simples campos de texto pasando por listas y
cajas de combos hasta varios botones.
Abajo, encontrará una lista de las propiedades más importantes de los elementos de control
de los formularios. Todas las propiedades forman parte de los objetos modelo asociado.
Adicionalmente a los elementos de control normales, un elemento de control "table" también
está disponible para los formularios, el cual establece una incorporación completa a las tablas
de las bases de datos. Este está descrito en la sección de Formularios de bases de datos en el
capítulo 11 (pág 184).

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

Capítulo 11 Formularios 


Capítulo 11Formularios 

• 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 el acceso controlado por programa.
• TargetURL (String) URL destino para los botones del tipo URL
• TargetFrame (String) nombre de la ventana (o marco) en la cual TargetURL debe
ser abierto cuando se activa el botón (para los botones de tipo URL)
• Label (String) etiqueta del botón
• TextColor (Long) color de texto del elemento de control
• HelpText (String) texto de ayuda que se despliega automáticamente cuando el cursor
del mouse está sobre el elemento de control
• HelpURL (String) URL de la ayuda en línea del elemento de control correspondiente
• ButtonType (Enum) acción que está vinculada con el botón (valores por defecto de
com.sun.star.form.FormButtonType).
Por medio de la propiedad ButtonType, tiene la oportunidad de definir una acción que es
automaticamente realizada cuando el botón se presionado. El grupo de constantes
com.sun.star.form.FormButtonType asociado, provee los siguientes valores:
• PUSH botón normal
• SUBMIT termina la entrada del formulario (particularmente importante para formularios
HTML)
• RESET restaura todos los valores originales dentro de formulario
• URL llama la URL definida en TargetURL (es abierta dentro de la ventana que ha sido
definida por medio de TargetFrame).
Los tipos de botón Aceptar y Cancelar provistos en los diálogos no están soportados en los
formularios

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

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

botón para acceso controlado por programación.


• Label (String) inscripción 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 salvar información adicional (por ejemplo, para
administrar Id de los registros de datos).
• TextColor (Long) color del texto del elemento de control.
• HelpText (String) texto automáticamente desplegado, 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.
El mecanismo de agrupamiento de los botones de opción distingue entre los elementos de
control para diálogos y formularios. Mientras los elementos de control que aparecen uno
después del otro son automáticamente combinados, el agrupamiento en los formularios está
basado en los nombres. Para hacer esto, todos los botones de opción deben contener el mismo
nombre. OpenOffice.org combina los elementos de control agrupados dentro de una matriz
de manera que los botones individuales de un programa OpenOffice.org Basic puede ser
accesado en de la misma forma que la descrita anteriormente.
El siguiente ejemplo muestra como el modelo de un grupo de elementos de control puede ser
determinada.
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("MyOptions") Then
Ctl = Form. GetGroupbyName("MyOptions")
Exit Function
End If
Next I

El código correspondiente al ejemplo previo es para determinar simplemente el modelo del


elemento de control. Busca por todos los formularios en el documento de texto actual en un
ciclo y usa el métod HasByName para verificar cual formulario contiene un elemento con el
nombre de "MyOptiones" buscado. Si este es el caso, la matriz del modelo es accesada
usando el método GetGroupByName (en lugar del método GetByName para determinar
los modelos simples).

Cajas de chequeo (Checkboxes)


The model object of a checkbox form provides the following properties:
• Enabled (Boolean) el elemento de control puede ser activado.

Capítulo 11 Formularios 


Capítulo 11Formularios 

• 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.

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

• 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 tip de fuente.
• FontHeight (Single) alto del carácter en puntos (pt).
• Text (String) texto del elemento de control.
• TextColor (Long) color de texto del elemento de control.
• VScroll (Boolean) el texto tiene barra de desplazamiento vertical.
• HelpText (String) texto de ayuda desplegado automáticamente, cuando el cursor del
muse está sobre el elemento de control.
• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.

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.

Capítulo 11 Formularios 


Capítulo 11Formularios 

• TextColor (Long) color del texto del elemento de control.


• HelpText (String) texto de ayuda automáticamente desplegado 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.

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.

Adicionalmente, los siguientes métodos están provistos en el objeto de vista (view) de la


caja de listas:
• addItem (Item, Pos) inserta la cadena especificada en "Item" en la posición "Pos" de la
lista.
• addItems (ItemArray, Pos) inserta las entradas listadas en la cadena de datos
"ItemArray" en la lista en la posición "Pos".
• removeItems (Pos, Count) remueve las entradas "Count" desde la posición "Pos".
• selectItem (Item, SelectMode) activa o desactiva el resaltado para los elementos
especificados en la cadena "Item" dependiendo de la variable "SelectMode".
• makeVisible (Pos) búsca por el campo de lista de forma que la entrada especificada
en "Pos" sea visible.

Formularios de bases de datos


Los formularios de OpenOffice.org pueden ser vinculados directamente a una base de datos.
Los formularios creados de esta forma proveen todas las funciones para un completo "front-
end" de la base de datos sin trabajo de programación independiente.
El usuario tiene la opción de localizar y buscar por las tablas y consultas seleccionadas, y
también cambiar registros de datos e insertar nuevos registros. OpenOffice.org
Automáticamente se asegura que los datos más importantes sean obtenidos de la base de
datos, y que cualquier cambio hecho sea escrito de nuevo a la base de datos.
Un formulario de base de datos básicamente corresponde a un formulario OpenOffice.org
normal. Adicionalmente a las propiedades normales, las siguientes propiedades especificas a
la base de datos pueden ser ajustadas en el formulario:
• DataSourceName (String) nombre de la fuente de datos (refiérase al capítulo 9,
Acceso a Bases de Datos, fuentes de datos (pág 148); la fuente de datos debe ser creada
globalmente en OpenOffice.org).
• Command (String) nombre de la tabla, consulta o coamndo Select SQL al cual el vínculo
es hecho.
• CommandType (Const) – especifica cual comando es hecho a una tabla, conuslta o
comando SQL (valores de acuerdo a la enumeración
com.sun.star.sdb.CommandType).

 OpenOffice.orgOpenOffice.org Guía del programador BASIC


 OpenOffice.org Guía del programador BASIC

La enumeración com.sun.star.sdb.CommandType cubre los siguientes valores:


• TABLE Tabla
• QUERY - Consulta
• COMMAND Comando SQL
Los campos de las base de datos son asignados a los elementos de control individuales por
medio de la siguiente propiedad:
• DataField (String) nombre del campo de la base de datos vinculado.

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.

Capítulo 11 Formularios 



^ 19 AutoMin 142
_blank 59 AutoOrigin 142
_hidden 59 AutoStepHelp 143
- 19 AutoStepMain 142
* 19 AVERAGE 114
/ 19
\ 19

BackColor 84 s., 87, 107
+ 19
BackGraphicFilter 107
< 20
BackGraphicLocation 107
<= 20
BackGraphicURL 107
<> 20
BackgroundColor 179, 182 s.
= 20
Beep 47
> 20
beforeFirst() 155
>= 20
BITMAP 121
compatibilidad entre OpenOffice.org Basic y
boleanas 13
VBA 2
Border 182 s.
 BorderBottom 117
addItem 174, 184 BorderLeft 117
addItems 174, 184 BorderRight 117
AdjustBlue 131 BorderTop 117
AdjustContrast 131 BottomBorder 108
AdjustGreen 131 BottomBorderDistance 108
AdjustLuminance 131 BottomMargin 84, 87, 108
AdjustRed 131 Bubble sort 25
afterLast() 155 Buttons 166
Align 182 ButtonType 180
Alignment 139
AllowAnimations 135

Cadenas 8
Ambiente de desarrollo integrado 2
Cambios dinámicos en las dimensiones de los
AnchorType 82
campos de datos 16
AnchorTypes 82
Campos de datos 14
AND 20
cancelRowUpdates() 156
Angle 119 s.
CBool(Var) 32
ANNOTATION 115
CDate(Var) 32
Anotaciones 91
CDbl(Var) 32
ANSI 9
Cell.Type 100
API de 49
CellAddress 102
Application 57
CellBackColor 103
Area 140
CellInsertMode 101
ArrangeOrder 143
CellRangeAddress 101 s.
AS_CHARACTER 88
CenterHorizontally 112
Asc 34
CenterVertically 112
ASCII 9
cero 36
AsTemplate (Boolean) 60
CharacterSet (string) 62
Author 91
CharacterSet (String) 60
AutoMax 142

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

You might also like