Sie sind auf Seite 1von 204

OpenOffice.

org
Gua bsica del programador

Traduccin Arturo Garro de


Basic Programmer's Guide del StarOffice 6.0
Revisin 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 proprit intellectuels relatants la technologie incorpore dans ce produit. En particulier, et sans
la limitation, ces droits de proprit intellectuels
peuvent inclure un ou plus des brevets amricains numrs http://www.sun.com/patents et un ou les brevets plus supplmentaires ou
les applications de brevet en attente dans les Etats Unis et les autres pays.
Ce produit ou document est protg par un copyright et distribu avec des licences qui en restreignent l'utilisation, la copie, la
distribution, et la dcompilation. Aucune partie de ce produit
ou document ne peut tre reproduite sous aucune forme, par quelque moyen que ce soit, sans l'autorisation pralable et crite de Sun et
de ses bailleurs de licence, s'il y ena.
Le logiciel dtenu par des tiers, et qui comprend la technologie relative aux polices de caractres, est protg par un copyright et
licenci par des fournisseurs de Sun.
Ce produit repose en partie sur le travail de lIndependent JPEG Group et de The FreeType Project.
Portions Copyright 2000 SuSE, Inc. Word for Word Copyright 1996 Inso Corp. Systme de correction orthographique International
CorrectSpell Copyright 1995 de Lernout & Hauspie
Speech Products N.V. Tous droits rservs.
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 dposes de Sun
Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
UNIX est une marque dpose aux Etats-Unis et dans d'autres pays et licencie exlusivement par X/Open Company, Ltd.
Les Screen Beans et les objets graphiques prdessins Screen Beans sont des marques dposes de A Bit Better Corporation.
Acquisitions fdrales : logiciel commercial ; les utilisateurs gouvernementaux sont soumis aux conditions gnrales standard de la
licence.
LA DOCUMENTATION est fournie TELLE QUELLE et TOUTES LES CONDITIONS, REPRSENTATIONS 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 REJETES, EXCEPT
DANS LE CAS O L'EXCLUSION OU LA LIMITATION DE TELLES GARANTIES NE SERAIT PAS AUTORISE PAR LA
LGISLATION EN VIGUEUR.
Traduccin Arturo Garro. Realizado especialmente para la comunidad en espaol de OpenOffce.org. e-mail: arturog@costarricense.cr
Dedico esta traduccin 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.

Acerca de OpenOffice.org Basic 1


Posibles usos de OpenOffice.org Basic 2
Uso de OpenOffice.org Basic 2
Estructura de esta gua 2
Ms informacin 3

Un vistazo de la programacin en OpenOffice.org Basic. 5


Lneas de programacin
Comentarios 6
Marcadores 6

Trabajado con variables 7


Declaracin implicita de variables 7
Declaracin explcita de variables 7
Cadenas (string) 8
De un conjunto de caracteres ASCII a Unicode 9
Variables de cadenas 9
Especificacin de cadenas especfica. 10
Nmeros 10
Variables de enteros 10
Variables de entero largo 11
Variables sencillas 11
Variables dobles 11
Variables de moneda 11
Especificacin explcita de nmeros 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 dinmicos en las dimensiones de los campos de datos
Alcance y tiempo de vida de las variables 17
Variables locales 17
Variables pblicas 17
Variables globales 18
Variables privadas 18
Constantes 19
Operadores 19
Operadores matemticas 19
Operadores lgicos 20
ii

16

Operadores de comparacin 20
Control de flujo 20
If ... Then ... Else 20
Select ... Case 21
Ciclos 22
For ... Next 22
Do ... Loop 23
Ejemplo de programacin: Ordenando con ciclos anidados. 24
Procedimientos y funciones 25
Procedimientos 25
Funciones 25
Terminando procedimientos y funciones prematuramente 26
Pasando parmetros 26
Parmetros opcionales 27
Manejo de errores 28
La Instruccin On Error 28
El comando Resume 28
Consultas referentes a la informacin de errores 29
Consejos para el manejo de errores estructurado 29

Funciones de conversin 31
Conversiones de tipo implcito y explcito 31
Verificando el contenido de las variables 33
Cadenas 34
Trabajando con conjuntos de caracteres 34
Accesando partes de una cadena 35
Bsqueda y reemplazo 35
Formateando cadenas 36
Fecha y hora 37
Especicacin de los detalles de fecha y hora dentro del cdigo del programa
Extrayndo detalles de fecha y hora. 38
Accesando la fecha y la hora del sistema 39
Archivos y directorios 40
Administrando archivos 40
Escribiendo y leyndo archivos de texto 43
Otras funciones 47
Beep 47
Shell 47
Wait 47
Environ 48

Red de Objetos Universal (UNO) 49


Propiedades y mtodos 50
Propiedades 50
Mtodos 50
iii

37

Mdulos, servicios e interfaces 51


Herramientas para el trabajo con UNO 51
El mtodo supportsService
Propiedades de depuracin
Referencia API 52

52
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
Acceso iteractivo a objetos subordinados 55

55

El StarDesktop 57
Informacin bsica acerca de los documentos en OpenOffice.org
Crear, abrir e importar documentos 59
Objetos de documentos 61
Pantillas 65
Detalles sobre varias opciones de formato 66

58

La estructura de los documentos de texto 67


Prrafos y porciones de prrafos 68
Editando documentos de texto 74
El TextCursor 75
Bscando porciones de texto 79
Reemplazando porciones de texto 81

Documentos de texto: ms que slo texto 82


Tablas 83
Marcos de texto 87
Campos de texto 89
Marcadores 92

La estructura de documentos basados en tablas (Hojas de clculo) 95


Hojas de clculo 95
Filas y columnas 96
Celdas 98
Formateado 103

Editando las hojas de clculo de manera eficiente 113


Rangos de celdas 113
Buscando y reemplazando contenidos de las celdas 115
La estructura de los dibujos 116
Pginas 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


Bsqueda y reemplazo 133
Presentaciones 134
Trabajando con presentaciones 134

133

Usando diagramas en hojas de clculo. 137


La estructura de los diagramas 138
Los elementos individuales de un diagrama
Ejemplo 144
Tipos de diagramas 145
Diagramas de lneas 145
Diagramas de rea 145
Diagramas de barras 145
Diagramas de pastel 146

138

SQL: un lenguaje de consultas 147


Tipos de acceso a bases de datos 148
Fuentes de datos 148
Consultas 150
Vnculos y formularios de bases de datos 151
Acceso a bases de datos 151
Interaccin de las tablas 152
Mtodos especficos-al-tipo para obtener datos
Las variantes a ResultSet 154
Mtodos de navegacin en ResultSets 155
Modificando registro de datos 155

153

Tabajando con dilogos 157


Creando dilogos 157
Cerrando dilogos 157
Accesando elementos de control individuales 158
Trabajando con el modelo de dilgos y los controles de elementos
Propiedades 159
Nombre y ttulo 159
Posicin y tamao 159
Foco y secuencia del tabulador 160
Dilogos de multi-pgina 160
Eventos 163
Parmetros 165
Eventos del Mouse 166
Eventos del teclado 167
Eventos de foco 168
Eventos especficos de los elementos de control 168
v

158

Elementos de control de los dilogos en detalle 169


Botones (buttom) 170
Botones de opciones (Option button) 170
Cajas de verficacin (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 opcin 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 Gua del programador BASIC

Esta gua provee una introduccin a la programacin 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, debera estar familiarizado con otros lenguajes de programacin.
Varios ejemplos son provistos para ayudarle a desarrollar sus propios programas en
StarBasic.
Un nmero de consejos de migracin para los programadores de Microsoft Visual Basic o para aquellos
que han trabajado con versiones menores de StarOffice, son provistos atraves de esta gua. Estn
indicados por un pequeo smbolo en el borde de la pgina. El apndice de esta gua contiene un ndice de
consejos de migracin de manera que pueda navegar fcilmente al consejo que desea leer.

Acerca de OpenOffice.org Basic


El lenguaje de programacin 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 programacin 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 fcilmente a OpenOffice.org Basic.
Grandes secciones de las construcciones bsicas de OpenOffice.org Basic son compatibles
con Visual Basic.
El lenguaje de programacin OpenOffice.org Basic puede ser dividido en cuatro secciones:

: Define las construcciones lingisticas elementales,


or ejemplo, declaraciones de variables, ciclos, y funciones.

: Provee funciones estandares que no tienen referencia


con OpenOffice.org, por ejemplo, funciones para edicin de nmeros, 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 dilogo presonalizadas y provee un entorno para


agregar elementos de control y manejadores de eventos.

Captulo 1 Introduccin

Captulo 1 Introduccin
La compatibilidad entre OpenOffice.org Basic y VBA est relacionada con el lenguaje del OpenOffice.org
Basic y con las libreras en tiempo de ejecucin. La API de OpenOffice.org y el editor de dilogos no son
compatibles con VBA (estandarizar estas interfaces hara 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, vnculos a otros programas por ejemplo, servidores de bases de datos y actividades
ms complejas pueden ser realizadas el presionar un botn 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 dilogo 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 instalacin standar, OpenOffice.org Basic tiene los componentes necesarios para crear
sus propias macros de Basic, incluyndo:

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 gua


Los primeros tres captulos introducen al lector al OpenOffice.org Basic:

Captulo 2: El lenguaje de OpenOffice.org Basic.

Captulo 3: La librera de tiempo de ejecucin de OpenOffice.org Basic.

Captulo 4: Introduccin a la API de OpenOffice.org.

Estos tres captulos ofrecen un vistaso del OpenOffice.org Basic y puede ser ledo por
cualquiera que intente escribir programas en OpenOffice.org Basic.
Los captulos restantes describen componentes individuales de la API de OpenOffice.org con
ms detalle y pueden ser ledos selectivamente segn lo requiera.

Captulo 5: Trabajando con documentos de OpenOffice.org

Captulo 6: Documentos de texto.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Captulo 7: Documentos de hoja de clculo.

Captulo 7: Dibujos y Presentaciones.

Captulo 8: Diagramas (Grficos)

Captulo 9: Acceso a base de datos.

Captulo 10: Dilogos.

Captulo 11: Formularios.

Ms informacin
Los componentes de OpenOffice.org API que estn discutidos en esta gua fueron
seleccionados basados en el beneficio prctico para el programador de OpenOffice.org Basic.
En general, slo las partes referentes a las interfaces son discutidas. Para ms 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 Gua del Desarrollador describe las API de OpenOffice.org con ms detalle que esta gua,
pero est principalmente orientada a los programadores de Java o C++. Cualquiera que est
realmente familiarizado con la programacin en OpenOffice.org Basic puede encontrar
informacin adicional en la Gua del Desarrollador en OpenOffice.org Basic y programacin
de OpenOffice.org. Puede descargar la Gua 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 Gua del Desarrollador de OpenOffice.org en lugar
de esta gua. La programacin de OpenOffice.org con Java o C++ es considerablemente ms
compleja que la programacin con OpenOffice.org Basic.

Captulo 1 Introduccin

OpenOffice.org Gua del programador BASIC

El OpenOffice.org Basic pertenece a la familia de lenguajes de Basic. Muchas partes son


idnticas a Microsoft Visual Basic para Aplicaciones y a Microsoft Visual Basic. Cualquiera
que haya trabajado con estos lenguajes puede rpidamente acostumbrarse a OpenOffice.org
Basic.
Programadores de otros lenguajes como Java, C++, o Delphi pueden encontrar fcil
familiarizarse por s mismos con OpenOffice.org Basic. OpenOffice.org Basic es un lenguaje
de programacin totalmente desarrollado a procedimientos y no usa estructuras de control
rudimentarias como GoTo y GoSub.
Tambin 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 estn descritas con
ms detalle en los siguientes captulos de este documento.
Este captulo provee un vistazo en los elementos primarios y constructores del lenguaje
OpenOffice.org Basic, tambin el ambiente en el que estas aplicaciones y libreras estn
orientadas al OpenOffice.org Basic.

Un vistazo de la
OpenOffice.org Basic.

programacin

en

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 automticamente. En cambio, puede ejecutar un programa en OpenOffice.org
Basic al presional un botn. El cdigo es primero verificado de errores obvios y ejecutado
lnea por lnea.

Lneas de programacin
El Interprete de Basic est orientado a la ejecucin de lneas y esto es una diferencia primaria
entre Basic y otros lenguajes de programacin. Mientras la posicin de puntos de
interrupcin en el cdigo fuente de Java, C++ o Delphi es irrelevante, cada lnea de cdigo en
un programa Basic es una unidad auto-contenida. Las llamadas a funciones, expresiones
matemticas, u otros elementos lingisticos, como las funciones y encabezados de ciclos,
pueden ser completados en la misma lnea en la que empezaron.
Si no hay suficiente espacio, o resulta en lneas muy largas, entonces varias lneas pueden ser
unidas al agregar rayabajos _ (underscore). El siguiente ejemplo muestra cmo cuatro lneas
de una expresin matemtica pueden ser unidas:

Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


LongExpressin =
(expresion3
(expresion5
(expresion6

(expresion1 + expresion2 ) + _
+ expresion4 ) + _
+ expresion5 ) + _
+ expresion7 )

La rayabajo debe ser siempre el ltimo carcter de la lnea unida y no debe ir seguida de un
espacio o tabulacin, de lo contrario el cdigo generar un error.
Adicionalmente a unir lneas individuales, OpenOffice.org Basic, puede usar dos puntos (:)
para dividir una lnea en cada seccin si hay espacio suficiente para cada expresin. 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 cdigo del programa que puede ser ejecutado, la programacin en
OpenOffice.org Basic puede contener comentarios que expliquen partes individuales del
programa y proveer ms informacin que puede ser de ayuda para puntos posteriores.
OpenOffice.org Basic provee dos mtodos para insertar comentarios en el cdigo del
programa:

Todas las letras que sigan a un apstrofe (') 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
lnea. OpenOffice.org Basic interpreta la siguiente lnea como una instruccin normal de
nuevo. Si un comentario cubre varias lneas, cada lnea debe ser identificada como un
comentario:
Dim B
' Este comentario para la variable B es algo
' largo y comprende varias lneas. El
' carcter de comentario deber ser repetido
' en cada lnea.

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 dems.
Cuando seleccione un nombre para un marcador, se aplicarn las siguientes reglas:

Los marcadores slo pueden contener letras latinas, nmeros y rayabajo (_).

La primera letra del marcador puede ser una letra latina o una rayabajo.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Los marcadores no pueden contener caracteres especiales como , , .

El tamao mximo de un marcador es de 255 caracteres.

No hay distincin entre maysculas y minsculas. El marcador OneTestVariable, por


ejemplo, define la misma variable para onetestvariable y ONETESTVARIABLE.
Sin embargo hay una excepcin a esta regla: hay una disticin hecha entre maysculas y
minsculas para las constantes UNO-API. Ms informacin acerca de UNO es presentada
en el captulo 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 nmero 5 no es el primer carcter
Primer Nombre ' Incorrecto. Se permiten espacios.
DjVu
' Incorrecto. Letras como , no estn permitidas.
5Surname ' Incorrecto. El primer carcter no puede ser un nmero.
Primer,Nombre ' Incorrecto. Las comas no estn permitidas.

Trabajado con variables


Declaracin implicita de variables
Los lenguajes Basic estn diseados para que sean fciles de usar. Como resultado,
OpenOffice.org Basic permite la creacin de variables por medio del simple uso sin una
declaracin explcita. En otras palabras, una variable empieza a exisitir desde que es incluida
en su cdigo. Dependiendo de las variables que estn presentes, el siguiente ejemplo declara
tres nuevas variables:
a = b + c

Declarar variables implcitamente no es una buena prctica de programacin porque puede


resultar en la introduccin de una nueva variable como resultado de un error tipogrfico. En
lugar de generar un error, el intrprete inicializa el error tipogrfico como una nueva variable
con un valor de 0. Puede ser bastante dificil encontrar errores de esta naturaleza en su cdigo.

Declaracin explcita de variables


Para prevenir errores causadas por la declaracin implcita de variables, OpenOffice.org
Basic provee una instruccin llamada:
Option Explicit

Esto debe ser la primera lnea de programa de cada mdulo y asegura que un mensaje de
error ser desplegado si una de las variables usadas no est declarada. La instruccin
Option Explicit debe ser incluida en todos los mdulos de Basic.
En su forma ms simple, el comando para una declaracin explcita de una variable es:
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 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,
incluyndo cadenas (string), nmeros, figuras de punto flotante, y valores boleanos
(boolean). Aqu hay algunos ejemplos de variables Variant:
' Asigna una cadena.
MiVar = 1
' Asigna un nmero.
MiVar = 1.0 ' Asigna un nmero de punto flotante.
MiVar = True ' Asigna un valor boleano.
MiVar = "Hola Mundo!"

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 declaracin de una variable de un tipo
especfico:
Dim MiVar As Integer ' Declara una variable del tipo entero.

La variable es declarada como un entero y no puede registrar cualquier tipo de nmeros.


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

La instruccin 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 declaracin 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 estn disponibles en OpenOffice.org
Basic y describe como pueden ser usadas y declaradas.

Cadenas (string)
Cadenas, junto con los nmeros, forma uno de los tipos ms importantes y bsicos de
OpenOffice.org Basic. Una cadena consiste en una secuencia consecutiva de caracteres
individuales. La computadora salva internamente como una secuencia de nmeros donde
cada nmero representa un carcter especifico.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

De un conjunto de caracteres ASCII a Unicode


Los conjuntos de caracteres en una cadena concuerdan con el cdigo correspondiente
(nmeros 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 nmeros,
caracteres, y smbolos especiales en un byte. Los cdigos ASCII 0 a 127 corresponden al
alfabeto y los smbolos comunes (como puntos, parntesis y comas), tambin y algunos
cdigos especiales de pantalla e impresora. El conjunto de caracteres ASCII es el ms
comnmente 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 Cirlico.

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.

Cdigos de pgina
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 (Cdigos de pgina) de esta manera ms lenguajes
pueden ser correctamente desplegados. Sin embargo, como un resultado, el mismo valor del
carcter puede representar diferentes caracteres en diferentes lenguajes.

Unicode
Unicode incrementa el tamao de un carcter a cuatro bytes y combina diferentes conjuntos
de caracteres para crear un standar que se ajuste al mayor nmero de lenguajes del mundo. La
versin 2.0 de Unicode est soportada por muchos programas incluyndo 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 ms de 65535 caracteres. Internamente, OpenOffice.org Basic salva
el valor Unicode asociado a cada carcter. La memoria de trabajo necesaria para cada
variable de cadena depende del tamao de la cadena.
Ejemplo de una declaracin de variable de cadena:
Dim Variable As String

Tambin puede ser escrita la declaracin de esta forma:

1 N.T: Por las siglas en ingls de American National Standars Institute.

Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


Dim Variable$

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

Especificacin de cadenas especfica.


Para asignar una cadena especfica 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 lneas, agregue un signo de ms al final de la primera lnea:
Dim MiCadena As String
MiCadena = "Esta cadena es tan larga que " + _
"que se dividi en dos lneas."

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

Nmeros
OpenOffice.org Basic soporta cinco tipos bsicos para procesar nmeros.

Enteros (Integer)

Entero Largo (Long Integer)

Flotante (Float)

Doble (Double)

Moneda (Currency)

Variables de enteros
Las variables de enteros pueden guardar cualquier nmero entre -32768 y 32768. Una
variable de entero puede tomar dos bytes de memoria. El smbolo de tipo de declaracin es
%. Los clculos para usar las variables de enteros son muy rpidas y son particularmente
tiles para contadores de ciclos. Si asigna un nmero de punto flotante a una variable de
entero, el nmero ser redondeado hacia arriba o hacia abajo al entero ms cercano.
Ejemplo de declaracin para variables de enteros:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim MiVar As Integer
Dim MiVar%

Variables de entero largo


Las variables de entero largo pueden guardar cualquier nmero entre -2147483648 y
2147483648. Una variable de entero largo puede tomar cuatro bytes de memoria. El smbolo
del tipo de declaracin es &. Los clculos con variables de enteros largos son muy rpidos y
son particularmente tiles para contadores de ciclos. Si asigna un nmero de punto flotante a
una variable de entero largo, el nmero es redondeado hacia arriba o hacia abajo al entero
ms cercano.
Ejemplos de declaraciones de enteros largos
Dim Variable As Long
Dim Variable&

Variables sencillas
Las variables sencillas pueden guardar cualquier nmero 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 smbolo del tipo de declaracin es !.
Originalmente, las variables sencillas fueron usadas para reducir el tiempo para calcular
nmeros ms 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 nmero 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 clculos ms precisos. El
smbolo para el tipo de declaracin es #.
Ejemplos de declaraciones de variables dobles:
Dim Variable As Double
Dim Variable#

Variables de moneda
Las variables de moneda difieren de las dems por la forma en que maneja los valores. El
punto decimal es fijo y est limitado a cuatro posiciones decimales. La variable puede
contener ms de 15 nmeros despus del punto decimal. Puede guardar cualquier valor entre
922337203685477.5808 y +922337203685477.5807 tomando ocho bytes de memoria. El
smbolo para el tipo de declaracin es @.
Las variables de moneda son ms usadas para clculos de negocios que evitan redondeos no
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


deseados por el uso de nmeros de punto flotante.
Ejemplo de declaraciones de variables de moneda:
Dim Variable As Currency
Dim Variable@

Especificacin explcita de nmeros


Los nmeros pueden ser representados de muchas maneras, por ejemplo, en formato decimal
o en notacin cientfica, o en cualquier base diferente al sistema decimal. Las siguientes
reglas aplican a los caracteres numricos en OpenOffice.org Basic:

Nmeros enteros
El mtodo ms simple es trabajar con cualquier nmero 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 nmeros 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

Nmeros decimales
Cuando use un nmero decimal, use el punto (.) como separador de punto decimal. Esta regla
asegura que los textos fuentes pueden ser transferidos de un pas a otro sin necesidad de
conversin.
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

Tambin puede usar los signos positivos (+) o negativo (-) antes de los nmeros decimales.
(de nuevo, con o sin espacios).
Si un nmero decimal es asignado a una variable entera, OpenOffice.org Basic redondea el
nmero hacia arriba o hacia abajo.

Estilo de escritura exponencial


OpenOffice.org Basic permite que los nmeros sean escritos en el estilo de escritura
exponencial, por ejemplo, puede escribir 1.5e-10 para el nmero 1.5 10-10 (0.00000000015).
La letra e puede ser en maysculas o en minsculas con o sin el signo positivo (+) como
prefijo.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Aqu hay unos cuantos ejemplos correctos o incorrectos del formato exponencial:
Dim A As Double
A
A
A
A

=
=
=
=

1.43E2' Correcto
+ 1.43E2
' Correcto (espacio entre el positivo y el nmero)
- 1.43E2
' Correcto (especio entre el negativo y el nmero)
1.43E-2
' Correcto (exponente negativo)

A = 1.43E -2
A = 1,43E-2
A = 1.43E2.2

'Incorrecto (No se permiten espacios en el nmero)


'Incorrecto (La coma no es separador decimal)
'Incorrecto (Exponente debe ser un nmero simple)

Ntese que los ejemplos incorrectos primero y tercero no generarn mensaje de error, sino
que las variables tendrn valores incorrectos. La expresin
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 expresin


como:
A = 1.43E2

Valores hexadecimales
En el sistema hexadecimal (sistema base 16), un nmero de dos dgitos corresponde
precisamente a un byte. Esto permite que los nmeros sean manejados de una manera que
refleja de una forma ms cercana la arquitectura de la computadora. En el sistema
hexadecimal, los nmeros del 0 al 9 y las letras de la A a la F son usadas como nmeros. Una
A es el standard para el nmero decimal 10, mientras la F representa el nmero decimal 15.
OpenOffice.org Basic le permite usar los valores hexadecimales, si estn precedidos por &H.
Dim A As Long
A = $HFF
A = $H10

' Valor hexadecimal para el nmero decimal 255


' Valor hexadecimal para el nmero decimal 16

Valores octales
OpenOffice.orgOpenOffice.org Basic tambin entiende el sistema octal (sistema base 8), el
cual usa los nmeros del 0 al 7. Puede representar estos nmeros son el prefijo &O.
Dim A As Long
A = &O77
A = &O10

' Valor octal para el nmero decimal 63


' valor octal para el nmero decimal 8

Falso y verdadero
Variables boleanas
Las variables boleanas slo pueden contener dos valores: Verdadero o Falso. Son tiles
para especificaciones binarias que solamente pueden adoptar dos estados. Un valor boleano
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 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 declaracin para las
variables boleanas. La declaracin puede realizarse simplemente usando As Boolean.
Ejemplo de una declaracin 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
matemticas en los valores de hora y fecha. No hay smbolo de declaracin para las variables
de fecha. La declaracin puede realizarse usando el suplemento As Date.
Ejemplo de una declaracin de variable de fecha:
Dim Variable As Date

Campos de datos
Adicionalmente a las variables simples (scalars), OpenOffice.org Basic soporta tambin
campos de datos (arrays2). Un campo de datos contiene varias variables, las cuales pueden
ser direccionadas atraves de un ndice.

Matrices simples
La declaracin de una matriz es similar a la declaracin de una variable simple. Sin embargo,
a diferencia de la declaracin de la variable, el nombre de la matriz est seguido de parntesis
que contiene la especificacin del nmero de elementos. La expresin:
Dim MiMatriz(3)

declara una matriz con cuatro variables del tipo Variant, llamadas MiMatriz(0),
MiMatriz(1), MiMatriz(2), MiMatriz(3).
Tambin se pueden declarar variables de un tipo especfico para una matriz. Por ejemplo, la
siguiente lnea 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 validacin con valores de inicio y final pueden ser
especificados en la declaracin 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 trmino en espaol es arreglos o matrices. Arreglos es una traduccin ms literal y matrices es una
traduccin que corresponde ms al concepto matemtico. Usaremos matrices de ahora en adelante.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim MiMatriz(5 to 10)

Los ndices no necesitan ser valores positivos. El siguiente ejemplo tambin muestra una
forma correcta de declaracin, pero con lmites 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 lmites que debe observar cuando defina los ndices de los campos de datos:

El ndice ms pequeo posible es -32768.

El ndice ms grande posible es 32767.

El nmero mximo de elementos (dentro de una dimensin de campo de datos) es 16368.

Otros valores de limites aplican para los ndices de datos en VBA. Lo mismo aplica al mximo nmero de
elementos posibles por dimensin. Los valores vlidos pueden ser encontrados en la documentacin
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 mdulo si desea que se aplique en


todas las declaraciones de matrices en el mdulo. Sin embargo, esto no afecta las secuencias
UNO que estn definidas por medio del API de OpenOffice.org, cuyos ndices siempre
inician con 0. Para no afectar la claridad, debera evitar el uso del Option Base 1.
El nmero de elementos en una matriz no es afectado si usa Option Base 1, solamente el
ndice inicial cambia. La declaracin:
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 expresin Option Base 1 no afecta el nmero 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
declaracin MiMatriz(3) crea tres valores enteros en VBA con los ndices del 1 al 3, la misma declaracin
en OpenOffice.org Basic crea cuatro valores enteros con los ndices del 1 al 4.

Campos de datos multi-dimensionales


Adems de los campos de datos de una sola dimensin, OpenOffice.org Basic tambin
soporta trabajar con campos de datos multi-dimensionales. Las dimensiones correspondientes
estn separadas unas de otras por medio de comas. El ejemplo:
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 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 nmero de dimensiones que puede
tener.

Cambios dinmicos en las dimensiones de los campos de


datos
Los ejemplos previos estn basados en los campos de datos de una dimensin especfica.
Tambin se pueden definir matrices en las cuales las dimensiones del campo de datos puede
cambiar dinmicamente. Por ejemplo, puede definir una matriz que para contener todas las
palabras que inician con la letra A. Como el nmero de palabras inicialmente es desconocido,
necesitar poder cambiar consecuentemente los lmites de la matriz. Para hacer esto en
OpenOffice.org Basic, use la siguiente instruccin:
ReDim MiMatriz(10)

A diferencia de VBA, donde puede solo dimensionar matrices dinmicas por el uso de Dim MiMatriz(),
OpenOffice.org Basic le permite cambiar matrices dinmicas y estticas 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

'Declaracin 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 dimensin inicial

' ...
ReDim Preserve MiMatriz(20) As Integer ' Incrementa el campo
' de datos reteniendo
' los valores iniciales

Cuando usa Preserve, asegrese que el nmero de dimensiones y el tipo de la variable se


mantenga igual.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


A diferencia de VBA, donde solamente el lmite superior de la ltima dimensin puede ser cambiado por
medio de Preserve, OpenOffice.org Basic le permite cambiar las otras dimensiones tambin.

Si usa Redim con Preserve, debe usar el mismo tipo de datos que el especificado en la declaracin 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 localizacin
especfica y del tipo.

Variables locales
Las variables que son declaradas en una funcin 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 funcin o el


procedimiento, y luego son puestas de nuevo en cero. Cada vez que la funcin es llamada, los
valores que fueron generados anteriormente ya no estn 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
simultneamente como global y privada en el encabezado del mdulo. Cuando porte aplicaciones VBA a
OpenOffice.org Basic, debe cambiar los nombres de variables duplicados.

Variables pblicas
Las variables pblicas son definidas en la seccin del encabezado de un mdulo con la
palabra clave Dim. Estas variables estn disponibles para todos los mdulos de su librera.
Mdulo A

Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


Dim A As Integer
Sub Prueba
Flip
Flop
En Sub
Sub Flip
A = A + 1
En Sub

Mdulo B
Sub Flop
A = A 1
End Sub

El valor de la variable A no es cambiado en la funcin Prueba, pero es incrementado en la


funcin Flip y decrementado en la funcin Flop. Ambos cambios son hechos a la variable
pblica.
Tambin puede usar la palabra clave Public en lugar del Dim para declarar variables
pblicas:
Public A As Integer

Las variables pblicas solamente estn disponibles a la macro que estn asociadas durante su
ejecucin y luego la variable es restaurada.

Variables globales
En cuanto a su funcin, las variables globales son similares a las variables pblicas, excepto
que sus valores son retenidos an despus de que la macro ha sido ejecutada. Las variables
globales son definidas en el encabezado del mdulo usando la palabra clave Global:
Global A As Integer

Variables privadas
Las variables privadas estn solo disponibles en el mdulo en el cual est definida. Use la
palabra clave Private para definir la variable:
Private MiEntero As Integer

Si varios mdulos contienen variables privadas con el mismo nombre, OpenOffice.org Basic
crea una variable diferente para cada ocurrencia del nombre. En el siguiente ejemplo, ambos
mdulos A y B tienen una variable privada llamada C. La funcin Prueba define una
variable privada en el mdulo A y una privada en el mdulo B.
Mdulo A:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Private C As Integer
Sub Prueba
AsigModuloA ' Asigna la variable C del mdulo A
AsigModuloB ' Asigna la variable C del mdulo B
MuestraVarA ' Muestra la variable C del mdulo A
MuestraVarB ' Muestra la variable C del mdulo B
End Sub
Sub AsigModuloA
C = 10
End Sub
Sub MuestraVarA
Msgbox C
End Sub

Mdulo 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

Tambin puede especificar el tipo de constante en la declaracin:


Const B As Double = 10

Operadores
OpenOffice.org Basic comprende los operadores matemticos, lgicos, y de comparacin.

Operadores matemticas
Los operadoras matemticos pueden ser aplicados a todos los tipos numricos, sin embargo,
el operador + puede ser tambin usado para concatenar cadenas.
+ Suma de nmeros y valores de fecha, concatenar cadenas.
- Resta de nmeros y valores de fecha.
* Multiplicacin de nmeros.
/ Divisin de nmeros.
\ Divisin de nmeros con nmeros enteros (redondeo)
^ Elevacin a exponente.
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


MOD Operacin de cociente (calcula el resto o sobrante de una divisin)

Operadores lgicos
Los operadores lgicos permiten concatenar elementos de acuerdo al lbegra boleana. Si los
operadores son aplicados sobre valores boleanos, el vnculo provee el resultado ruquerido
directamente. Si lo usa en conjunto con valores enteros y entero largo, el vnculo ser hecho a
nivel de bits.
AND vnculo AND
OR vnculo OR
XOR Vnculo OR exclusivo.
NOT Negacin
EQV prueba equivalente (ambas partes Verdadero o Falso)
IMP Implicacin (Si la primera parte es verdadera, entonces la segunda parte tambin debe
ser verdadera)

Operadores de comparacin
Los operadores de comparacin pueden ser aplicados a todos los tipos de variables
elementales (nmeros, fecha, cadenas, y valores boleanos)
= Igualdad entre fechas, nmeros y cadenas.
<> Diferencia entre fechas, nmeros y cadenas.
> Mayor que para nmeros, fechas y cadenas.
>= Mayor que o igual para nmeros, fechas y cadenas.
< Menor que para nmeros, fechas y cadenas.
<= Menor que o igual para nmeros, fechas y cadenas.
OpenOffice.org Basic no soporta el operador Like de VBA

Control de flujo
Las instrucciones de control de flujo restringen la ejecucin de bloques de cdigo mientras
una condicin particular sea satisfecha.

If ... Then ... Else


La instruccin ms comn del control de flujo es la instruccin If, como se muestra en el
siguiente ejemplo:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


If A > 3 Then
B = 2
End If

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


Una variacin de la instruccin If es la clusula 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 ms complejas, puede hacer cascadas de la instruccin If, por ejemplo:
If A =
B
ElseIf
B
Else
B
End If

0
=
A
=

Then
0
< 3 Then
1

= 2

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 dems instancias
(esto es, si A es mayor a 3), a B le es asignado el valor de 2.

Select ... Case


La instruccin Select ... Case es una alternativa a la instruccin If en cascada y es
usada cuando necesita verificar un valor contra varias condiciones.
Select Case
Case 1:
Nombre
Case 2:
Nombre
Case 3:
Nombre
Case 4:
Nombre
Case 5:
Nombre
Case 6:
Nombre
Case 7:
Nombre
End Select

DiaSemana
= "Domingo"
= "Lunes"
= "Martes"
= "Mircoles"
= "Jueves"
= "Viernes"
= "Sbado"

En este ejemplo, el nombre del da de la semana corresponde a un nmero, 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 Tambin puede
especificar operadores de comparacin o listas de expresiones en el control de flujo Case. El
siguiente ejemplo muestra las variaciones de sintaxis ms importantes.

Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


Select Case Var
Case 1 To 5
' ...Var est entre los nmeros 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 cdigo el nmero de pasos que sea especificado. Tambin
pueden definirse ciclos con un nmero indeterminado de pasos.

For ... Next


El ciclo For ... Next tiene un nmero fijo de pasos. El contador de ciclos define el
nmero 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 funcin 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.
Tambin puede usar valores de pasos negativos:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 instruccin 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 nmero determinado de pasos. En cambio, el
Do ... Loop es ejecutado hasta que cierta condicin sea cumplida. Hay cuatro variantes
del Do ... Loop (en el siguiente ejemplo, A > 10 representa cualquier condicin):
1. Variante Do ... Loop
Do While A > 10
' Cuerpo del ciclo
Loop

verifica que la condicin sea satisfecha antes de cada paso y slo despus se ejecuta el
ciclo.
2. Variante Do Until ... Loop
Do Until A > 10
'Cuerpo del ciclo
Loop

Se ejecuta el ciclo hasta que la condicin no sea satisfecha.


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

verifica la condicin solamente despus de que el primer ciclo se ejecut y termina si la


condicin es satisfecha.
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


4. Variante Do ... Loop Until
Do
' Cuerpo el ciclo
Loop Until A > 10

Tambin verifica su condicin despues del primer paso, pero trabaja el ciclo hasta que la
condicin no sea satisfecha.
Como en los ciclo For ... Next, el Do ... Loop tambin est provisto de una
instruccin de terminacin.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 programacin: Ordenando con ciclos anidados.


Hay muchas formas de usar ciclo, por ejemplo, para buscar en listas, valores de retorno, o
para ejecutar tareas matemticas 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) = "Toms"
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 posicin

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


correcta. Por esta razn, 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 accin prctica sin proveer un valor explcito. Su sintaxis es:
Sub Prueba
' aqu coloca el cdigo del procedimiento
End Sub

El ejemplo define un procedimiento llamado Prueba y contiene el cdigo que puede ser
accesado desde cualquier punto del programa. La llamada es hecha al ingresar el nombre del
procedimiento en cierto punto del programa:
' ... cdigo del programa
Prueba
' ... cdigo del programa

Funciones
Una funcin, como un procedimiento, combina un bloque de programas para que sean
ejecutados como una unidad lgica. Sin embargo, a diferencia del procedimiento, una
funcin retorna un valor.
Function Prueba
' ... aqu va el cdigo de esta funcin
Prueba = 123
End Function

El valor de retorno es asignado usando una simple asignacin. La asignacin no


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

El cdigo define una variable A y le asigna el resultado de la funcin Prueba.


El valor de retorno puede ser sobreescrito diferentes veces dentro de la funcin. Como una
asignacin de variable clsica, la funcin en este ejemplo retorna el ltimo valor que le fue
asignado:

3 N.T. Deje la expresin en ingls, porque muchos libros de informtica conocen este algoritmo con este nombre,
aun las traducciones al espaol. La traduccin sera ordenamiento de burbuja.

Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 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 asignacin es detenida, la funcin retorna un valor cero (Nmero 0 para valores
numricos y un blanco para cadenas).
El valor de retorno de una funcin puede ser de cualquier tipo. El tipo es declarado de la
misma manera que una variable:
Function Prueba As Integer
' ... Cdigo de la funcin
End Function

Si la especificacin de un valor explcito 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 funcin prematuramente, por ejemplo, para el manejo de
errores. Estos comandos detienen el procedimiento o la funcin y regresar el programa en el
punto en el cual el procedimiento o funcin fue llamado.
El siguiente ejemplo muestra como termina la implementacin 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 parmetros
Las funciones y procedimientos pueden recibir uno o ms parmetros. Los parmetros deben
ser encerrados entre parntesis despus del nombre de la funcin 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 parmetros.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Normalmente los parmetros en OpenOffice.org Basic son pasados por . Los
cambios hechos a las variables son retenidos cuando la funcin o el procedimiento ha
terminado.
Sub Prueba
Dim A As Integer
A = 10
CambiaValor(A)
' El parmetro 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 funcin Prueba, es pasado como un
parmetro en la funcin CambiaValor. El valor en cambiado a 20 y pasado a ElValor, el
cual es retenido cuando se sale de la funcin.
Tambin se puede pasar un parmetro como un si no desea los cambios subsecuentes
que afectan al valor originalmente pasado del parmetro. Para especificar que un parmetro
es pasado como valor, asegurese que la palabra clave ByVal precede la declaracin de la
variable en el encabezado de la funcin.
En el ejemplo anterior, si reemplazamos la funcin CambiaValor con:
Sub CambiaValor(ByVal ElValor As Integer)
ElValor=20
End Sub

la variable A permanece sin afectarse por este cambio. Despus de llamar a la funcin
CambiaValor, la variable A mantiene el valor de 10.
El mtodo de pasar parmetros a los procedimientos y funciones es virtualmente identico a VBA. Por
defecto, los parmetros son pasados por referencia. Para pasar los parmetros como valores, use la
palabra clave ByVal. En VBA, deber tambin usar la palabra clave ByRef para forzar que un parmetro
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 pblicos. Las palabras claves
Public y Private usadas en VBA no son soportadas en OpenOffice.org Basic.

Parmetros opcionales
Las funciones y procedimientos solamente pueden ser llamados cuando todos los parmetros
necesarios son pasados durante la llamada.
OpenOffice.org Basic le permite definir parmetros como , esto es, si el parmetro
correspondiente no est incluido dentro de la llamada, OpenOffice.org Basic lo pasa como un
parmetro vaco. En el ejemplo:
Sub Prueba(A As Integer, Optional B As Integer)
End Sub

el parmetro A es obligatorio, mientras el parmetro B es opcional.


Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


La funcin IsMissing verifica cuando un parmetro ha sido pasado y cuando est ausente.
Sub Prueba(A As Integer, Optional B As Integer)
Dim B_Local As Integer
' Verifica si el parmetro B est presente.
If Not IsMissing (B) Then
B_Local = B
' Parmetro B est presente.
Else
B_Local = 0
' Parmetro B no est. 0 es el valor por defecto
End If
' cdigo de la funcin
End Sub

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


mismo valor a la variable interna B_Local. Si el parmetro correspondiente no est presente,
entonces un valor por defecto (en este caso, el valor 0) es pasado a B_Local en lugar del
parmetro pasado.
La opcin provista en VBA para definir valores por defecto para los parmetros 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 ms tiempo de
programacin consumen. OpenOffice.org Basic provee un rango de tareas para simplificar el
manejo de errores.

La Instruccin On Error
La instruccin 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:
'Cdigo individualizado para el manejo del error.
End Sub

La lnea On Error Goto ManejoError define cmo OpenOffice.org Basic procede en


un evento de error. El Goto ManejoError asegura que OpenOffice.org Basic salga de la
actual lnea de programacin y luego ejecute el cdigo en ManejoError:

El comando Resume
El comando Resume Next contina el programa en el lnea siguiente a la que ocurri el
error en el programa despus del cdigo en el manejador de errores ha sido ejecutado:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


ManejoError:
' ... cdigo para el manejo del error.
Resume Next

Use el comando Resume Proceed para especificar un punto de salto para continuar el
programa despus del manejo de errores:
ManejoError:
' ... cdigo para el manejo del error.
Resume Proceed
Proceed:
' El programa contina aqu despus del error.

Para continuar el programa sin ningn 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 ms informacin, vea

Consultas referentes a la informacin de errores


En el manejo de errores, es til tener descripcin del error, cmo, cuando y por qu ocurre el
error:

La variable Err contiene el nmero de errores que han ocurrido.

La variable Error$ contiene una descripcin del error.

La variable Erl contiene la lnea en la cual ocurri el error.

La llamada
MsgBox "Error " & Err & ": " & Error$ & " (lnea : " & Erl & ")"

muestra cmo la informacin 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 informacin se mantiene vlida hasta que el programa encuentre un Resume


o un comando On Error, entonces la informacin es reseteada o restaurada.
En VBA, el mtodo Err.clear o el objeto Err reinicia los estados del error despus 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
Captulo 2 El lenguaje de OpenOffice.org Basic

Captulo 2 El lenguaje de OpenOffice.org Basic


construccin Goto.
Si desea estructurar su cdigo limpiamente para prevenir la generacin 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 solucin es el uso de un nico acceso para el manejo de errores dentro del programa
mantiene manejo de errores separado del cdigo del programa actual y no salta de nuevo al
cdigo original despus 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 funcin
On Error Goto ErrorHandler
' Desactiva el manejo de errores
On Error Goto 0
' Final de la implementacin 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 definicin del manejador de errores, seguido del cdigo del
programa actual. Al final del cdigo del programa el manejador de errores es desactivado
mediante la llamada a On Error Goto 0 y la implementacin del procedimiento
termina con el comando Exit Sub (no se confunda con End Sub)
El ejemplo primero verifica que el nmero de error corresponda a un nmero 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
nmero de error para que puedan ser detectados errores no anticipados.
La llamada a On Error Goto 0 al final del cdigo restaura el estado de la informacin del
error (el cdigo de error en las variables de sistema Err) de esta manera un error que ocurra
despus puede ser claramente reconocido.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

La siguiente seccin presenta las funciones centrales de la librera de tiempo de ejecucin.

Funciones de conversin
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 implcito y explcito


La manera ms fcil de cambiar una variable de un tipo a otro es mediante el uso de una
asignacin
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 asignacin de la
variable A. Esta conversin es mucho ms 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
carcter (cada nmero). 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 programacin, Basic realiza este tipo de conversiones
automticamente. Sin embargo, esto puede tener consecuencias fatales. Despus de una
inspeccin detallada, la siguiente secuencia de cdigo:
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 intrprete 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 intrprete 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:

Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


Dim A
Dim B
Dim C
B = 1
C = "1"
A = B + C

Desde que las variables pueden contener nmeros y letras, no es claro que ser asigando a la
variable A si el nmero 2 o la cadena "11".
El error de las fuentes notados por las conversiones implcitas solamente pueden ser evitadas
por la programacin cuidadosa. Por ejemplo, evitando el uso del tipo de datos variant.
Para evitar otros errores resultantes de la conversin implicita de valores, OpenOffice.org
Basic ofrece un rango de de funciones de conversin, las cuales puede usar para definir el
tipo de datos a que debe convertir en una operacin:

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 conversin para definir como OpenOffice.org Basic debe
realizar las operaciones de conversin:
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 nmero 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 asignacin. Entonces a A le es asiganda la
cadena "11".
Las funciones de conversin numricas CSng y CDbl tambin aceptan nmeros decimales.
El smbolo del punto decimal a usar es el correspondiente a la definicin del pas especfico.
Para conversin, el mtodo CStr usa las especificacin seleccionada del pas especfico
cuando formatea nmeros, fechas y detalles de hora.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


La funcin Val es diferente de los mtodos Csng, Cdbl, y Cstr. El convierte una cadena
en un nmero; 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 nmero sin importar la configuracin 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 asignacin de la cadena test a la variable de fecha no tiene


sentido, por eso el intrprete 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 intrprete de Basic genera un error.


Estos mensajes de error pueden ser evitados al verificar el programa antes de una asignacin,
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 verificacin para este propsito:

IsNumeric(Valor) verifica cuando el valor es un nmero.

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 nmero o fecha vlido.
If IsNumeric(EntradaUsuario) Then
EntradaValida = EntradaUsuario
Else
EntradaValida = 0
Msgbox "Entrada no vlida."
End If

En el ejemplo anterior, si la variable EntradaUsuario contiene un valor numrico vlido,


entonces es asignado a la variable EntradaValida. Si EntradaUsuario no contiene
un nmero vlido, se le asigna el valor 0 a EntradaValida y un mensaje de error es
regresado.
Mientras existen las funciones para verificar nmeros, detalles de fechas y matrices en Basic,
no existe una funcin para verificar valores boleanos. Sin embargo, esta funcionalidad puede
Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


ser imitada con la funcin 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 funcin IsBoolean define una variable interna del tipo boleano para ayudarse, y trata
de asignarle el valor del parmetro. Si la asignacin es satisfactoria, la funcin retorna
Verdadero. Si esta falla, se produce un error en tiempo de ejecucin, el cual es interceptado
por la funcin de error de la funcin.
Si una cadena en OpenOffice.org Basic contiene un valor no-numrico y esto es asignado a un nmero,
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 implementacin del programa terminada si una
asignacin 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 carcter establecido y/o
el correpondiente carcter 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 conversin, la expresin


MiCadena = Chr(13)

asegura que "MiCadena" es inicializada con el valor del nmero 13, el cual es el standar del
salto de lnea.
El comando Chr es a menudo usado en lenguajes Basic para insertar caracteres de control
dentro de las cadenas.
La asignacin
MiCadena = Chr(9) + "Esto es una prueba" + Chr(13)

se asegura que que el texto sea precedido por una tabulacin (Unicode valor 9) y un salto de
lnea (Unicode valor 13) sea agregado al final.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 posicin Inicio.

Len(MiCadena) retorna el nmero 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

Bsqueda y reemplazo
OpenOffice.org Basic provee la funcin InStr para buscar cadenas parciales dentro de otra
cadena:
CadenaResultado = InStr (CadenaBuscar, MiCadena)

El parmetro CadenaBuscar especifica la cadena que ser buscada en MiCadena. La funcin


retorna un nmero que contiene la posicin en la cual CadenaBuscar aparece dentro de
MiCadena. Si desea encontrar otras ocurrencias para la cadena, la funcin tambin provee la
oportunidad de especificar opcionalmente la posicin inicial desde la cual OpenOffice.org
Basic empezar la bsqueda. En este caso la sintaxis de la funcin es:
CadenaResultado = InStr (PosicionInicial, CadenaBuscar, MiCadena)

En los ejemplos previo, InStr omite los caracteres en mayscula o minscula. Para cambiar
las bsquedas de manera que InStr sea sentitivo a maysculas/minsculas, agrege el
parmetro 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:

Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


Function
String)
Dim
Dim
Dim

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


Resultado As String
PosInicia As String
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 funcin busca dentro de la cadena transferida CadBuscar en un ciclo por significado


dentro del trmino original CadFuente. Si encuentra el trmino de bsqueda, toma la parte
antes de la expresin y la escribe dentro de la variable temporal Resultado. Agrega la
seccin NuevParte en el punto del trmino de bsqueda en Busqueda. Si no se
encuentran ms ocurrencias del trmino de bsqueda, la funcin 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 ms
usadas, la funcin Mid en OpenOffice.org Basic ha sido extendida de manera que haga esta
tarea automticamente. 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 posicin de la cadena
MiCadena.

Formateando cadenas
La funcin Format formatea los nmeros como una cadena. Para hacer esto, la funcin
Format espera una expresin para ser especificada, la cual es usada como plantilla para
formatear los nmeros. Cada posicionador dentro de la planilla asegura que este sea
formateado de acuerdo al valor de salida. Los posicionadores ms importantes dentro de una
planilla son el cero (0), numeral (#), punto (.), coma (,), y el signo de dlar ($).
El carcter cero dentro de la plantilla, asegura que ese nmero siempre sea puesto en la
posicin correspondente. Si no es provisto un nmero, 0 es desplegado en su lugar.
Un punto se coloca para el smbolo de punto decimal definido en las especificaciones del pas
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


en el sistema operativo.
El ejemplo de abajo muestra cmo los caracteres cero y punto pueden definir los dgitos
despus del punto decimal en una expresin:
MiFormato = "0.00"
MiCadena
MiCadena
MiCadena
MiCadena

=
=
=
=

Format(-1579.8, MiFormato)
Format(1579.8, MiFormato)
Format(0.4, MiFormato)
Format(0.434, MiFormato)

'
'
'
'

Guarda
Guarda
Guarda
Guarda

"-1579,80"
"1579,80"
"0,40"
"0,43"

De la misma manera, pueden agregarse ceros al frente de un nmero para archivar con el
formato deseado:
MiFormato = "0000.00"
MiCadena
MiCadena
MiCadena
MiCadena

=
=
=
=

Format(-1579.8, MiFormato)
Format(1579.8, MiFormato)
Format(0.4, MiFormato)
Format(0.434, MiFormato)

'
'
'
'

Guarda
Guarda
Guarda
Guarda

"-1579,80"
"1579,80"
"0000,40"
"0000,43"

Una coma representa, el carcter que el sistema operativo usa como el separador de miles, y
el signo numeral mantiene un dgito o lugar que solamente es desplegado cuando se requiere
en la cadena de salida:
MiFormato = "#,##0.00"
MiCadena
MiCadena
MiCadena
MiCadena

=
=
=
=

Format(-1579.8, MiFormato)
Format(1579.8, MiFormato)
Format(0.4, MiFormato)
Format(0.434, MiFormato)

'
'
'
'

Guarda
Guarda
Guarda
Guarda

"-1.579,80"
"1.579,80"
"0,40"
"0,43"

En el lugar del signo de dlar, la funcin Format desplegar el smbolo de moneda definido
en el sistema.
MiFormato = "#,##0.00 $"
MiCadena
MiCadena
MiCadena
MiCadena

=
=
=
=

Format(-1579.8, MiFormato) ' Guarda "-1.579,80 "


Format(1579.8, MiFormato)
' Guarda "1.579,80 "
Format(0.4, MiFormato)
' Guarda "0,40 "
Format(0.434, MiFormato)
' Guarda "0,43 "

Las instrucciones de formateo usadas en VBA para formatear fechas y horas no estn 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.

Especicacin de los detalles de fecha y hora dentro del


cdigo del programa
Puede asignar una fecha a una variable de fecha mediante la asignacin de una simple
cadena.
Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


Dim MiFecha As Date
MiFecha = "1.1.2002"

Esta asignacin 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
asignacin, sin embargo, puede causar errores, porque los valores de fecha y hora son
definidos y desplegados de diferentes formas en los diferentes pases.
Desde que OpenOffice.org usa la configuracin especifica del pas del sistema operativo
cuando convierte una cadena en un valor de fecha, la expresin mostrada anteriormente
solamente funciona con las configuraciones especificas que concuerden con la expresin de
cadena.
Para evitar este problema, la funcin DateSerial debe ser usada para asignar un valor fijo
a una variable de fecha:
Dim MiFecha As Date
MiFecha = DateSerial(2001, 1, 1)

Los parmetros de la funcin debe estar en esta secuencia: ao, mes, da. La funcin se
asegura que la variable sea asignada correctamente con el valor correcto obviando las
especificaciones especficas de un pas.
La funcin TimeSerial formatea los detalles de la hora, de la misma manera que la
funcin DateSerial formatea fechas:
Dim MiFecha As Date
MiFecha = TimeSerial(11, 23, 45)

Sus parmetros deben ser especificados en esta secuencia: horas, minutos y segundos.

Extrayndo detalles de fecha y hora.


Las siguientes funciones forman parte de la familia de las funciones DateSerial y
TimeSerial:

Day(MiFecha) Retorna el da del mes desde MiFecha.

Month(MiFecha) Retorna el mes desde MiFecha.

Year(MiFecha) Retorna el ao desde MiFecha.

Weekday(MiFecha) Retorna el nmero del da 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 especfica.
El ejemplo:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim MiFecha As Date
' ... inicializa MiFecha
If Year(MiFecha) = 2004 Then
' ... La fecha especificada esta dentro del ao 2004
End If

verifica que la fecha guardada en MiFecha este en el ao 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 funcin Weekday retorna el nmero del da de la semana de una fecha dada:
Dim MiFecha As Date
Dim Nombre As String
' ... Inicializa el valor de MiFecha
Select Case
Case 1:
Nombre
Case 2:
Nombre
Case 3:
Nombre
Case 4:
Nombre
Case 5:
Nombre
Case 6:
Nombre
Case 7:
Nombre
End Select

Weekday(MiFecha)
= "Domingo"
= "Lunes"
= "Martes"
= "Mircoles"
= "Jueves"
= "Viernes"
= "Sbado"

Nota: El domingo es considerado el primer da de la semana.

Accesando la fecha y la hora del sistema


Las siguientes funciones estn 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)

Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Archivos y directorios
Trabajar con archivos es una de las principales bsicas de una aplicacin. El API de
OpenOffice.org Basic le provee un amplio rango de objetos por las cuales puede crear, abrir
y modificar documentos. Estos estn presentados con detalle en el captulo 4. Apesar de esto,
en algunos casos deber accesar directamente el sistema de archivos, buscar por los
directorios o editar archivos de texto. La librera de tiempo de ejecucin de OpenOffice.org
Basic provee algunas funciones bsicas para realizar estas tareas.
Algunas funciones especificas de archivos y directorios del DOS no estn provistas en OpenOffice.org, o su
funcin es limitada. Por ejemplo, el soporte para las funciones ChDir, ChDrive y CurDir no est
soportada. Algunas propiedades especificas del DOS no estn usadas en las funciones que esperan los
archivos como parmetros (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 funcin 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 parmetro. El segundo
parmetro 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 funcin Dir debe ser llamada sin parmetros. Si la funcin Dir no
encontra ms entradas, retorna una cadena vaca.
El siguiente ejemplo muestra como la funcin 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 parmetro en la funcin Dir para asegurarse que la funcin
solamente retorne nombres de archivos y los directorios son ignorados. Los siguientes
parmetros pueden ser especificados:

0 : retorna archivos normales

16 : sub-directorios.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


El siguiente ejemplo es virtualmente el mismo que el ejemplo anterior, pero la funcin Dir,
pero se le dio un 16 como parmetro, 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 parmetro 16 en la funcin


Dir retornar solamente los subdirectorios. En VBA, la funcin tambin retorna los nombres de los
archivos de manera que una verificacin posterior es necesaria para recuperar solamente los directorios.

Las opciones provistas por VBA para buscar por los directorios por archivos especficos 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 estn 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 comodn "*" puede ser el ltimo carcter de
un nombre de archivo o de una extensin, lo cual no es vlido en VBA.

Creando y borrando directorios


OpenOffice.org Basic provee la funcin MkDir para la creacin de directorios
MkDir ("C:\Subdir")

Esta funcin crea directorios y subdirectorios. Todos los directorios que se necesitan dentro
de una jerarqua tambin son creados, si se requiere. Por ejemplo, Si slo existe
C:\SubDir1, entonces puede llamar:
MkDir ("C:\SubDir1\SubDir2\SubDir3")

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


La funcin RmDir borra directorios:
RmDir ("C:\SubDir1\SubDir2\SubDir3")

si el directorio contiene sub-directorios o archivos, estos tambin sern borrados, por eso
tenga cuidado con la funcin RmDir.

Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin 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 funcin
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 (incluyndo sus archivos)


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

Leyndo 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 tamao del mismo.
La llamada
Dim Atributos As Integer
Atributos = GetAttr(NombreArchivo)

retorna algunas propiedades del archivo. El valor de retorno es provisto como una mscara de
bits, en la cual son posibles los siguientes valores:

1 : archivo de slo-lectura.

16 : nombre de un directorio.

El ejemplo

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 mscara de bits del archivo prueba.txt y verifica si es de slo 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 estn soportadas por OpenOffice.org Basic porque son especficas de Windows y no estn
disponibles en otros sistemas operativos o slo parcialmente.

La funcin SetAttr permite el cambio de las propiedades de un archivo. La llamada


SetAttr("prueba.txt",1)

puede ser usada para asignarle el status de slo lectura a un archivo. Si ya hay un status de
slo lectura puede ser borrado con la siguiente llamada
SetAttr("prueba.txt",0)

La fecha y la hora de la ltima modificacin de un archivo esta provista por la funcin


FileDateTime. La fecha est formateada de acuerdo con las especificaciones del pas
usado en su sistema.
FileDateTime("prueba.txt") 'Provee la fecha de la ltima modificacin

la funcin FileLen determina el tamao del archivo en bytes (como un entero largo)
FileLen("prueba.txt") ' provee el tamao del archivo en bytes.

Escribiendo y leyndo archivos de texto


OpenOffice.org Basic provee un amplio rango de mtodos para leer y escribir en archivos de
texto. Las siguientes explicaciones estn relacionadas para el trabajo con archivos de texto
(no documentos de texto).

Escribindo 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 funcin FreeFile es usada para crear un manejador de archivo disponible. El
manejador es usado como un parmetro para la instruccin Open, la cual abre el archivo.
Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin 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 funcin FreeFile.
Una vez que el archivo est abierto, la instruccin Print puede ser descrito lnea por lnea:
Print #NumArchivo, "Esto es una lnea de prueba."

NumArchivo tambin es el manejador de archivo aqu. El segundo parmetro especifica el


texto que ser guardado como una lnea 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 lnea de texto" ' Guarda la lnea
Print #NumArchivo, "Otra lnea de texto" ' Guarda la lnea
Close #NumArchivo ' Cierra el archivo

Leyndo archivos de texto


Los archivos de texto son ledos de la misma manera en que ellos son escritos. La instruccin
Open usada para abrir el archivo contiene la expresin For Input en lugar de la expresin
For Output, en lugar del comando Print para escribir datos, la instruccin Line
Input se usa para leer los datos.
Finalmente, cuando llama un archivo de texto, la instruccin
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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim

NumArchivo As Integer
LineaActual As String
Archivo As String
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 lnea
Line Input #NumArchivo, LineaActual
If LineaActual <> "" Then
Msg = Msg & LineaActual & Chr(13)
End If
Loop
' Cierra el archivo
Close #NumArchivo
Msgbox Msg

Las lneas individuales son recuperadas en el ciclo Do While, guardndolo en la variable


Msg, y desplegada al final en un dilogo de mensaje.

Mensajes y cuadro de dilogo de entrada


OpenOffice.org Basic provee las funciones Msgbox e Inputbox para las comunicaciones
bsicas con el usuario.

Desplegando mensajes
Msgbox despliega un cuadro de informacin bsico, el cual puede tener uno o ms botones.
En su forma ms simple
MsgBox "Esta es una prueba de informacin"

el Msgbox solamente contiene el texto y un botn de Aceptar.


La apariencia del cuadro de informacin puede ser cambiada usando un parmetro. El
parmetro provee una opcin para agregar botones, definir los botnes pre-asignados, y
agregar un smbolo de informacin. Los valores para seleccionar los botn son:

0 botn 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.


Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


Para poner un botn por defecto, agregue uno de los siguientes valores al valor del parmetro
de la lista de botones. Por ejemplo, para crear los botones de Si, No y Cancelar (valor 3) y
que Cancelar sea el botn por defecto (valor 512), el valor del parmetro es 3 + 512 = 515.

0 primer botn por defecto.

256 segundo botn por defecto.

512 tercer botn por defecto.

Finalmente, los siguientes smbolos de informacin estn disponibles y tambin pueden ser
desplegados agregando el valor relevante al parmetro:

16 signo de detenerse.

32 signo de pregunta.

48 signo de exclamacin.

64 signo de Tip.

La llamada
Msgbox "Desea continuar?", 292

despliega un dilogo de informacin con los botones de Si No (valor 4), en el cual el


segundo botn (No) es el botn por defecto (valor 256) y tambin despliega un signo de
pregunta (valor 32), 4+256+32= 292.
Si un cuadro de informacin contiene varios botones, un valor de retorno debe ser preguntado
para saber cual botn ha sido presionado. Los siguientes valores de retorno estn 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 botn SI.
Else
' Fue presionado el botn NO.
End If

Adicionalmente al texto de informacin y el parmetro que arregla el cuadro de informacin,


Msgbox tambin permite un tercer parmetro, que define el texto para el ttulo del cuadro:
Msgbox "Desea continuar?", 292, "Pregunta del sistema"

Si no se especifica ningn ttulo, el valor por defecto es "soffice".

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Cuadro de entrada para obtener cadenas simples


La funcin Inputbox pregunta cadenas simples al usuario. Es sin embargo una alternativa
simple a configurar un dilogo. Inputbox recibe tres parmetros normales:

Un texto de informacin,

un ttulo para el cuadro de dilogo,

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 funcin Beep causa que el sistema haga un sonido que puede ser usada para advertir al
usuario de una accin incorrecta. Beep no tiene parmetros.
Beep ' genera un sonido informativo.

Shell
Programas externo pueden ser iniciados usando la funcin 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 tamao 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 tamao 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 parmetro, Parametro, permite que parmetros de la lnea de comando sean


transferidos al programa a ser iniciado.

Wait
La funcin Wait termina la ejecucin del programa por un tiempo especifico. El periodo de
espera est especificado en milisegundos. El comando
Captulo 3 La librera de ejecucin de OpenOffice.org Basic

Captulo 3 La librera de ejecucin de OpenOffice.org Basic


Wait 2000

especifica una interrupcin de 2 segundos (2000 milisegundos)

Environ
La funcin Environ retorna las variables de ambiente del sistema operativo. Dependiendo del
sistema operativo y su configuracin, 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

La API de OpenOffice.org es una interface universal de programacin 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 opcin de extender el rango personal de
OpenOffice.org a travs de macros personales y escribir dilogos personalizados.
La API de OpenOffice.org no solamente puede ser usada en OpenOffice.org Basic, sino
tambin en otros lenguajes de programacin como Java o C++. Una tcnica llamada Red de
Objetos Universal (UNO4) la cual provee ua interface que hace posible una interface con
varios lenguajes de programacin.
Este captulo se centra en cmo 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 cmo trabajar con varias partes de
la API OpenOffice.org se pueden encontrar en los captulos siguientes.

Red de Objetos Universal (UNO)


OpenOffice.org provee una interface de programacin en la forma de Red de Objetos
Universal (UNO). Esta es una interface de programacin 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 programacin por procedimientos,
necesitar la declaracin de una variable para el objeto asociado. La declaracin es hecha
usando la instruccin Dim (vea captulo 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 funcin 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 terminologa de UNO
es llamado un "servicio" en lugar de un tipo. De acuerdo a la filosofa de UNO, Obj es
descrito como una referencia a un objeto que soporta el servicio
com.sun.star.frame.Desktop. El trmino "servicio" es usado en OpenOffice.org
Basic y corresponde a los trminos tipo y clase en otros lenguajes de programacin.
4 N.T.: por las siglas de Universal Network Objects

Captulo 4 Introduccin a la API de OpenOffice.org

Captulo 4Introduccin 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, tambin 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 mtodos
Un objeto OpenOffice.org Basic provee un rango de propiedades y mtodos 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 asignacin:
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 estn definidas en la
descripcin del servicio UNO. Adicionalmente a estas propiedades "reales", tambin hay
propiedades las cuales consisten en dos mtodos al nivel de UNO. Uno de estos es usado para
preguntar el valor de una propiedad y el otro es dada para asignarla (mtodos get y set ).
La propiedad ha sido virtualmente imitada por estos dos mtodos. Los objetos carcter por
ejemplo, proveen los mtodos 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
mtodo originales tambin estn disponibles (en nuestro ejemplo, getPosition y
setPosition).

Mtodos
Los mtodos son entendidos como funciones relacionadas directamente con un objeto a
travs de los cuales este objeto es llamado. El objeto anterior Documento, por ejemplo,
provee el mtodo Save, el cual puede ser llamado de esta manera:
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Documento.Save()

los mtodos, como las funciones, pueden contener parmetros y retornar valores. La sintaxis
de la llamada a este mtodo est orientada a las funciones clsicas. La llamada:
Ok = Documento.Save(True)

tambin especifica un parmetro True para el objeto documento cuando llama al mtodo
Save. Una vez que el mtodo ha sido completado, Save retorna un valor en la variable Ok.

Mdulos, servicios e interfaces


OpenOffice.org provee cientos de servicios. Para proveer un vistazo de estos servicios, estos
han sido combinados en mdulos. Los mdulos no tienen otra importancia funcional para los
programadores de OpenOffice.org Basic. Cuando se especifica un nombre de servicio, solo el
nombre del mdulo 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 mdulo, como frame, y
finalmente el nombre actual del servicio, como Desktop. El nombre completo del ejemplo
nombrado sera:
com.sun.star.frame.Desktop

Adicionalmente a los trminos de mdulos y servicios, UNO introduce el trmino


"interface". Mientras este trmino es familiar para los programadores de Java, no es usado en
Basic.
Una interface combina varios mtodos. En el sentido estricto de la palabra, un servicio UNO
no soporta mtodos, sino mas bien interfaces, dentro de las cuales se proveen diferentes
mtodos. En otras palabras, los mtodos 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 mtodo. En
OpenOffice.org Basic, esto es irrelevante. Aqu, los mtodos son llamados directamente por
el significado del objeto relevante.
Sin embargo, para una comprensin de la API, es til tener a mano la asignacin de los
mtodos 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 estn mostradas al final
de este captulo, 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
terminologa de UNO soportan cuales propiedades, mtodos e interfaces y cmo pueden ser
determinadas. Adicionalmente a esta gua, puede obtener ms informacin acerca de los
objetos de las siguientes fuentes: el mtodo supportsService, los mtodos de
depuracin asi como la gua del desarrollador, y la referencia API.
Captulo 4 Introduccin a la API de OpenOffice.org

Captulo 4Introduccin a la API de OpenOffice.org

El mtodo supportsService
Un nmero de objetos UNO soportan el mtodo 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 depuracin
Cada objeto UNO en OpenOffice.org Basic conoce que propiedades, mtodos 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 mtodos de un objeto.
DBG_supportedInterfaces retorna una cadena conteniendo todas las interfaces que
soporta un objeto.
El siguiente cdigo muestra cmo 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 mtodos 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 funcin retorna todas las propiedades
de un servicio particular que puede soportar tericamente. Sin embargo, no hay completa
seguridad ya que estos pueden ser usados en el objeto en cuestin. Despus de llamar las
propiedades, deber usar la funcin IsEmpty para verificar si est realmente disponible.

Referencia API
Se puede encontrar ms informacin sobre los servicios disponibles, y sus interfaces,
mtodos, 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 mtodos para tareas abstractas las cuales pueden ser
aplicadas a varios problemas. Aqu encontrar un vistazo de las ms comunes de estas
interfaces.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


El origen de losobjetos est explicado ms adelante en esta gua. 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 funcin mencionada al inicio de este captulo createUnoService.
CreateUnoService crea un objeto que puede ser usado universalmente. Estos objetos
tambin son llamados servicios independientes del contexto.
Adicionalmente a los servicios independientes del contexto, tambin estn 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 clculo,
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
mtodo de un objeto, del cual el objeto depende. El mtodo 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 clculo:
Dim Rectangulo As Object
Rectangulo = _
SpreadSheet.createInstance("com.sun.star.drawing.RectangleShape")

Una plantilla de prrafo 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 insercin, modificacin 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
clculo. Esto combina todas las pginas dentro de un libro de clculo. Las pginas
individuales son accesadas usando el mtodo getByName de XNameAccess:

Captulo 4 Introduccin a la API de OpenOffice.org

Captulo 4Introduccin a la API de OpenOffice.org


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

El mtodo 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 clculo 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 mtodo hasByName de la interface XNameAccess revela los objetos subordinados


existentes en un objeto bsico con un nombre particular. El siguiente ejemplo despliega un
mensaje que informa al usuario cuando el objeto SpreadSheet contiene una pgina 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 insercin, borrado y modificacin de elementos
subordinados en un objeto bsico. Las funciones responsables de esto son insertByName,
removeByName y replaceByName.
El siguiente es un ejemplo prctico de esto. Llama un documento, que contiene un objeto
StyleFamilies y lo usa para cambiar las plantillas de los prrafos (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 lnea insertByName agrega el estilo NewStyle bajo el nombre de el mismo nombre


en el objeto ParagraphStyles. La lnea replaceByName cambia el objeto anterior a
ChangingStyle dentro de NewStyle. Finalmente, la llamada a removeByName
remueve el objeto detrs de OldStyle desde ParagraphStyles.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 mtodos para el acceso de objetos individuales.
XIndexContainer provee los mtodos para insertar y remover elementos.

La interface com.sun.star.container.XIndexAccess
XIndexAccess provee los mtodos getByIndex y GetCount para llamar los objetos
subordinados. GetByIndex provee un objeto con un ndice particular. GetCount retorna
cuantos objetos estn 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 despus del
otro y guarda una referencia a cada uno en la variable de objeto Sheet. Cuando trabaja con
ndices, note que getCount retorna el nmero de elementos. Los elementos en
getByIndex sin embargo estn 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 parmetros estn 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 bsico debe proveer la interface XenumerationAccess, la cual slo contiene el
mtodo CreateEnumeration. Esto retorna un objeto auxiliar, el cual provee la interface
Xenumeration con los mtodos hasMoreElements y NextElement. Por medio de
estos, se tendr accesso a los objetos subordinados.

Captulo 4 Introduccin a la API de OpenOffice.org

Captulo 4Introduccin a la API de OpenOffice.org


El siguiente ejemplo, pasa por los prrafos 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 prrafo individuales del texto en un ciclo. El ciclo es terminado tan pronto
como el mtodo hasMoreElements retorna el valor Falso, sealando que el final del texto
ha sido encontrado.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 administracin de plantillas. Desde
que estas areas de funciones estn disponibles en todos los tipos de documentos, estn
explicadas de primero en este captulo.

El StarDesktop
Cuando trabaje con documentos, hay dos servicios que son usados ms 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 estn clasificadas todas las ventanas de documentos. Los documentos pueden ser
creados, abiertos e importados usando este servicio.

La funcionalidad bsica para objetos de documentos individuales estn provistos por el


servicio com.sun.star.document.OfficeDocument. Esto provee los mtodos
para salvar, exportar e imprimir documentos.

El servicio com.sun.star.frame.Desktop abre automticamente 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 ms importante de el StarDesktop es
com.sun.star.frame.XComponentLoader. Esto bsicamente cubre el mtodo
loadComponentFromURL, el cual es el responsable de la creacin, importacin y
apertura de documentos.
El nombre de StarDesktop data de la versin StarOffice 5, el la cual todos los documentos estaban juntos
en una sola aplicacin comn llamada StarDesktop. En la presente versin de OpenOffice.org, no se usa
ms un StarDesktop. Sin embargo, el nombre de StarDesktop aun existe para para el marco del objeto
porque indica claramente que este es un objeto bsico para toda la aplicacin.
El objeto StarDesktop asume asume la posicin 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 presentacin en pantalla de StarOffice (por ejemplo, FullScreen,
FunctionBarVisible, Heigth, Width, Top, Visible) ya no se usan ms.

Captulo 5 Trabajando con documentos OpenOffice.org

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

Informacin bsica
OpenOffice.org

acerca

de

los

documentos

en

Cuando se trabaja con documentos de OpenOffice.org, es til entender los puntos bsicos de
la administracin de documentos en OpenOffice.org. Esto incluye la forma en que estn
estructurados los nombres de archivos para los documentos de OpenOffice.org, tambin el
formato en que estos archivos estn salvados.

Nombres de archivos en notacin URL


Desde que OpenOffice.org es una aplicacin independiente de las plataformas, usa la
notacin 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, estn 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 funcin
ConvertToURL. Para convertir una URL en un nombre de archivo local, OpenOffice.org
provee la funcin 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 tambin 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 dems caracteres son incluidos con la codificacin 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 versin 6.0, StarOffice provee un formato de archivos basado en XML. A traves del
uso de XML, el usuario tiene la opcin tambin de abrir y editar archivos en otros programas.

Compresin de archivos
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 opcin del mtodo storeAsURL, el usuario puede guardae el archivo XML
original directamente. Vea las opciones del mtodo StoreAsURL en la pgina 79.

Crear, abrir e importar documentos


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

El primer parmetro de LoadComponentFromURL especifica la URL del archivo asociado.


El segundo parmetro espera el nombre para el objeto marco de la ventana que
OpenOffice.org crea internamente para su administracin. El nombre predefinido _blank es
el usado normalmente aqu, y se asegura de que OpenOffice.org cree una nueva ventana.
Alternativamente, tambin se puede especificar _hidden, asegura que el documento
correspondiente sea cargado, pero que no permanezca visible.
Usando estos parmetros, el usuario puede abrir un documento OpenOffice.org, y comodines
(valores tontos) pueden ser asignados a los dos ltimos parmetros.
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 nmero 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 mtodos 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 parmetro 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 explcito. Ntese que este
nombre no empieza con rayabajo (underscore). De la misma forma, el parmetro 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 parmetro de marco y SearchFlags:
Captulo 5 Trabajando con documentos OpenOffice.org

Captulo 5Trabajando con documentos OpenOffice.org


Dim
Dim
Dim
Dim

Doc As Object
Dummy()
URL As String
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 mtodo loadComponentFromURL


El cuarto parmetro de la funcin 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
opcin en la que el nombre de la opcin es guardada como una cadena tambin con el valor
asociado.

AsTemplate (Boolean) si es verdadero, carga un documento nuevo, sin ttulo,


para la URL dada. Si es falso, la plantilla es cargada para edicin.

CharacterSet (String) Define en cual conjunto de caracteres est basado el


documento.

FilterName (String) Especifica un filtro especial para la funcin


loadComponentFromURL
Los nombres de filtros estn 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 posicin
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 opcin FilterName.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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
opcin.
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 automticamente un nuevo documento si el documento especificado en
la URL es una plantilla.
Alternativamente, si slo se necesita un documento vaco sin ninguna adaptacin, 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 funcin vista anteriormente loadComponentFromURL vista en la seccin 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 mtodos 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 mtodos para salvar e
imprimir documentos. Sin embargo, los nombres y parmetros de los mtodos han cambiado.

Salvando y exportando documentos


Los documentos OpenOffice.org son salvados directamente por medio del objeto de
documento. El mtodo Store de la interface com.sun.star.frame.XStorable est
disponible para este propsito:

Captulo 5 Trabajando con documentos OpenOffice.org

Captulo 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 mtodo
storeAsURL. Este mtodo tambin est definido en
com.sun.star.frame.XStorable y puede ser usado para definir la direccin del
documento:
Dim Url As String
Dim Dummy()
Url = "file:///C:/prueba3.sxw"
Doc.StoreAsURL(Url, Dummy())

Adicionalmente a los mtodos anteriores, com.sun.star.frame.XStorable tambin


provee algunos mtodos 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 proteccin de slo lectura.

IsModified() - especifica cuando un documento ha sido cambiado desde la ltima vez


que fue gardado.

El cdigo 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. Contina con el proceso de salvado solamente en este caso. Si el
documento ya tiene asignada una URL y no es de slo lectura, es salvado bajo la URL
existente. Si no tiene una URL o ha sido abierto en el estado de slo lectura, es salvado bajo
una URL nueva.

Opciones del mtodo storeAsURL


Asi como el mtodo loadComponentFromURL, algunas opciones tambin pueden ser
especificadas en la forma de un campo de datos PropertyValue usando el mtodo
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 funcin


loadComponentFromURL. Los nombres de filtros disponibles estn definidos en el
archivo

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 opcin 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 mtodo Print de la interface
com.sun.star.view.Xprintable esta provista para este propsito.
En su forma ms simple, la llamada a Print es:
Dim Dummy()
Doc.Print(Dummy())

Como en el caso del mtodo loadComponentFromURL, el parmetro Dummy es un


campo de datos PropertyValue por medio del cual OpenOffice.org puede especificar
algunas opciones para la impresin.

Las opciones del mtodo Print


El mtodo Print espera un campo de datos PropertyValue como un parmetro, que
refleja los parmetros del cuadro de dilogo de impresin de OpenOffice.org

CopyCount (Integer) especifica el nmero de copias a imprimir.

FileName (String) imprime el documento en el archivo especificado.

Collate (Boolean) advierte a la impresora que ordene las pginas de las copias.

Sort (Boolean) Ordena las pginas cuando se imprimen varias copias


(CopyCount>1).
Captulo 5 Trabajando con documentos OpenOffice.org

Captulo 5Trabajando con documentos OpenOffice.org

Pages (String) contiene la lista de las pginas que se van a imprimir (la sintxis es
como la especificada en el dilogo de impresin)

El siguiente ejemplo muestra como varias pginas de un documento se imprimen usando la


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

Seleccin de impresora y parmetros


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 orientacin de papel (El valor


com.sun.star.view.PaperOrientation.PORTAIT para impresin 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 tamao carta)

PaperSize (Size) Especifica el tamao del papel en centsimas de milmetro.

El siguiente ejemplo muestra como se puede cambiar de impresora y puesto el tamao 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 tamao del papel. Tambin 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 Gua del programador BASIC

OpenOffice.org Gua 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 automticamente 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 modificacin 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 prrafos,

plantilla de marcos,

plantillas de pginas y

plantillas de nmeros

OpenOffice.org Calc soporta

plantillas de celdas

plantillas de pginas

OpenOffice.org Impress soporta

plantillas de elementos de caracteres

plantillas de presentaciones

En la terminologa 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
Dim
Dim
Dim

Doc As Object
Sheet As Object
StyleFamilies As Object
CellStyles As Object

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
CellStyles = StyleFamilies.getByName("CellStyles")

El ejemplo usa la propiedad StyleFamilies de una hoja de clculo para establecer una
lista que contiene todas las plantillas de celdas disponibles.
Las plantillas individuales pueden ser accesadas directamente por medio de un ndice:

Captulo 5 Trabajando con documentos OpenOffice.org

Captulo 5Trabajando con documentos OpenOffice.org


Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
StyleFamilies As Object
CellStyles As Object
CellStyle As Object
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 despus 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 ms importantes y los puntos en las que estn
explicadas:

Propiedades de caracteres, captulo 6, documentos de texto


servicio com.sun.star.style.CharacterProperties

Propiedades de prrafos, captulo 6, documentos de texto


servicio com.sun.star.text.Paragraph

Propiedades de celdas, captulo 7, documentos de clculo


servicio com.sun.star.table.CellProperties

Propiedades de pginas, captulo 7, documentos de clculo


servicio com.sun.star.style.PageStyle

Propiedades de elementos de caracteres, captulo 7, documentos de clculo


Varios servicios

Las propiedades de formato no significan que estn restringidas a las aplicaciones en las que
estn explicadas, sino que pueden ser usadas universalemente. Por ejemplo, muchas de las
propiedades de pginas estn descritas en el captulo 7, y pueden ser usadas no slo en
OpenOffice.org Calc, sino tambin en OpenOffice.org Writer.
Para ms informacin acerca de trabajar con plantillas puede ser encontrada en la seccin
Valores por defecto para las propiedades de carcter y prrafo en el captulo 6, Documentos
de Texto.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Adicionalmente a cadenas de caracteres, los documentos de texto tambin contienen


informacin sobre los formatos. Estos puede aparecer en cualquier punto del texto. La
estructura es un poco ms complicada en las tablas. Esto no solamente incluye cadenas de
dimensiones sencillas, sino tambin campos de dos dimensiones. Muchos programas de
procesamiento de texto actualmente proveen la opcin 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 pgina.
Este captulo presenta las principales interfaces y servicios para los documentos de texto. La
primera seccin detalla la anatoma de los documentos de texto y se concentra en cmo un
programa OpenOffice.org Basic puede ser usado para tomas pasos iteractivos a traves del
documento OpenOffice.org. Se enfoca en prrafos, porciones de prrafos y sus formatos.
La segunda seccin se enfoca en el trabajo eficiente con documentos de texto. Para este
propsito, OpenOffice.org ofrece varios objetos de ayuda, como el objeto TextCursor, el cual
se extiende ms all de la especificacin de la primera seccin.
La tercera seccin va ms all del trabajo con textos. Se concentra en tablas, marcos de texto,
campos de texto, marcadores, contenidos de directorio y ms.
La informacin sobre cmo crear, abrir, salvar e imprimir documentos est descrita en el
cpitulo 5, porque no solamente puede ser usada para documentos de texto, sino tambin con
otros tipos de documentos.

La estructura de los documentos de texto


Un documento de texto bsicamente puede contener cuatro tipos de informacin:

el texto actual

plantillas para formatear caracteres, prrafos y pginas

elementos no-texto, como tablas grficos y objetos de dibujo

configuracin global para el documento de texto

Esta seccin se concentra especialmente en el texto y las opciones de formato asociadas.

Captulo 6 Documentos de texto

Captulo 6Documentos de texto


El diseo de la API de OpenOffice.org para OpenOffice.org Writer difiere de las versiones previas. La
versin 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 (ratn).
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 aplicacin y puede
trabajar con diferentes sub secciones de un documento al mismo tiempo. El antiguo objeto Selection ya
no est ms disponible.

Prrafos y porciones de prrafos


El corazn de un documento de texto consiste en una secuancia de prrafos. Estos no estn
nombrados o indexados y por eso no hay forma posible de accesar directamente prrafos
individuales. Sin embargo, los prrafos pueden ser atravesados secuancialmente con la ayuda
del objeto Enumeration descrito en el captulo 4. Esto permite que los prrafos sean
editados.
Cuando se trabaja con el objeto Enumeration, un escenario especial puede ser, sin embargo,
notado: esto no slo retorna prrafos, sino tambin tablas (estrictamente hablando, en
OpenOffice.org Writer, una tabla es una forma especial de prrafo). Antes de accesar un
objeto retornado, deber verificar cuando el objeto retornado soporta el servicio
com.sun.star.text.Paragraph para los prrafos 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 cuestin es un prrafo 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 enumeracin
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

Wend

If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Msgbox "el bloque actual contiene un prrafo"
End If

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 (prrafos y tablas) asignando el elemento actual al
objeto TextElement. El ejemplo usa el mtodo supportsService para verificar
cuando TextElement es un prrafo o una tabla.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Prrafos
El servicio com.sun.star.text.Paragraph garantiza el acceso al contenido de un
prrafo. El texto de un prrafo 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

Wend

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

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 prrafos para accesar los
prrafos relevantes y reemplaza las cadenas, "you", "too" y "for" con los caracteres "U", "2"
y "4". La funcin Replace es usada para reemplazar no cae dentro del alcance lingstico
standard del OpenOffice.org Basic. Esto es una instancia de ejemplo de funcin descrita en el
captulo 3, en la seccin Bsqueda y reemplazo.
El contenido del procedimiento descrito aqu para el acceso de prrafos 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 prrafos son accesados por su nmero (por ejemplo mediante la llamada
Paragraph(1)), en OpenOffice.org Basic, el objeto Enumeration se decribi previamente cmo debe
usarse.
No hay contraparte directa en OpenOffice.org Basic, para las listas Characters, Sentences, y Words
provistas en VBA. Sin embargo, tiene la opcin puede cambiar a TextCursor el cual permite la
navegacin a nivel de caracteres, frases y palabras. (refierase a TextCursor)

Porciones de prrafos
En el ejemplo previo se pudo cambiar texto, segn se requiera, pero algunas veces tambin se
puede destruir un formato.
Esto es porque el prrafo de turno consiste en sub objetos individuales. Cada uno de estos sub
objetos consiste en su propia informacin de formateado. Si se centra un prrafo, por
ejemplo, contiene una palabra escrita en negrita, entonces esto es representado en
OpenOffice.org por tres porciones de prrafos: La porcin antes de la negrita, luego la
palabra en negrita, y finalmente la porcin despus de la negrita, que de nuevo es puesta
como normal.
Si el prrafo es cambiado usando la propiedad del prrafo String, entonces OpenOffice.org
primero borra las viejas porciones de prrafo e inserta una nueva porcin de prrafo. El
formateo de las secciones previas es borrado.
Para prevenir este efecto, el usuario puede accesar las porciones de prrafo asociadas en lugar
Captulo 6 Documentos de texto

Captulo 6Documentos de texto


del prafo entero. Los prrafos proveen su propio objeto Enumeration para este propsito. El
siguiente ejemplo muestra un ciclo doble que pasa por todos los prrafos del documento de
texto y las porciones de prrafos que contienen y aplica el proceso de reemplazamiento del
ejemplo previo:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Enum1 As Object
Enum2 As Object
TextElement As Object
TextPortion As Object

Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.Enumeration
'Ciclo por todos los prrafos
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then

Wend

'Ciclo por los sub prrafos


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

El ejemplo corre por el documento de texto en un ciclo doble. El ciclo de afuera se refiere a
los prrafos del texto. El ciclo interno procesa las pociones de prrafos en estos prrafos. El
ejemplo de cdigo modifica el contenido en cada una de las porciones de prrafo, usando la
propiedad String de la cadena, como en el caso del ejemplo para los prrafos. Sin embargo,
como las porciones de prrafo son editadas directamente, la informacin del formato es
retenida cuando se reemplazan las cadenas.

Formateando
Hay varias formas para el formateado del texto. La forma ms 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 lnea.
Adicionalmente al formateo directo, tambin 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 Gua del programador BASIC

OpenOffice.org Gua 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 estn disponibles directamente,
usando los objetos adecuados (TextCursor, Paragraph, y asi). Puede encontrar un vistazo de las
propiedades de prrafo 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 prrafos y tambin el servicio
com.sun.star.text.TextPortion para las porciones de prrafos.
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 prrafos 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 ms importantes.

CharFontName (string) nombre de la fuente seleccionada.

CharColor (Long) color del texto.

CharHeight (Float) tamao 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 carcter (constantes en concordancia con


com.sun.star.awt.FontWeight)

CharBackColor (Long) color del fondo.

CharKeepTogether (Boolean) suprimir el salto de lnea.

CharStyleName (String) nombre de la plantilla.

Propiedades de prrafos
La informacin de formatos que no se refiere a caracteres individuales, sino a un prrafo
entero es considerada como una propiedad de prrafo. Esto incluye la distancia de un prrafo
al borde de la pgina, y el espaciado de las lneas. Las propiedades de los prrafos estn
disponibles desde el servicio com.sun.star.style.ParagraphProperties.
Las propiedades de los prrafos estn disponibles desde varios objetos. Todos los objetos que
soporten el servicio com.sun.star.text.Paragraph tambin proveen soporte para
las propiedades de prrafo en el servicio
com.sun.star.style.ParagraphProperties.
Una lista completa de las propiedades de prrafos pueden ser encontradas en la referencia de
la API de OpenOffice.org. Las propiedades de prrafos ms comunes son:
Captulo 6 Documentos de texto

Captulo 6Documentos de texto

ParaAdjust (enum) orientacin del texto vertical (constantes en concordancia con


com.sun.star.style.ParagraphAdjust).

ParaLineSpacing (struct) Espaciado de las lneas (estructura en concordancia con


com.sun.star.style.LineSpacing)

ParaBackColor (Long) color de fondo.

ParaLeftMargin (Long) margen izquierdo en centsimas de milmetro.

ParaRightMargin (Long) margen derecho en centsimas de milmetro.

ParaTopMargin (Long) margen superior en centsimas de milmetro.

ParaBottomMargin (Long) margen inferior en centsimas de milmetro.

ParaTabStops (Array of struct) tipo y posicin de los tabuladores (matriz con


estructura del tipo com.sun.star.style.TabStop).

ParaStyleName (String) nombre de la plantilla del prrafo.

Ejemplo: exportacin a HTML simple


El siguiente ejemplo demuestra cmo trabajar con el formateo de la informacin. Va pasando
por el documento de texto y crea un archivo HTML simple. Cada prafo es grabado con su
propio elemento <P> para este propsito. Las pociones de prrafo son desplegadas en negrita
y marcadas usando el elemento HTML <B> cuando se exportan:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim

FileNo As Integer, Filename As String, CurLine As String


Doc As Object
Enum1 As Object, Enum2 As Object
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 prrafos
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 prrafos
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 lnea
CurLine = CurLine & "</P>"
Print #FileNo, CurLine
End If
Wend
' Escribe el pie del HTML
Print #FileNo, "</BODY></HTML>"
Close #FileNo

La estructura bsica de el ejemplo est orientada a los ejemplo vistos de ejecutarse a traves
de las porciones de prrafos de un texto que ya se ha discutido. Las funciones para escribir el
archivo HTML, tambin es una cdigo de prueba del peso de la fuente de las porciones de
texto correspondientes, y provee porciones de prrafos en negrita con su etiqueta
correspondiente en HTML, que ha sido agregada.

Valores por defecto para las propiedades de prrafo y carcter


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 cundo una seccin de un documento ha sido formateada directa o indirectamente
no es fcil. Las barras de smbolos provistas por OpenOffice.org muestran las propiedades
comunes de texto, como tipo de fuente, peso y tamao. Sin embargo, los ajustes
correspondientes basados en plantillas o formateo directo en el texto, no estn claros.
OpenOffice.org Basic provee el mtodo getPropertyState, con el cual los
programadores pueden verificar cmo cierta propiedad ha sido formateada. Como un
parmetro, toma el nombre de la propiedad y retorna una constante que provee informacin
acerca del origen del formato. Las siguientes respuestas posibles, estn definidas en la
Captulo 6 Documentos de texto

Captulo 6Documentos de texto


enumeracin 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 prrafo, 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 prrafos que han sido marcados con
negrita usando formateo directo. Si encuentra la porcin de prrafo correspondiente, borra el
formateo directo usando el mtodo setPropertytoDefault y asigna el carcter de
plantilla MyBold a la porcin de prrafo correspondiente.
Dim
Dim
Dim
Dim
Dim

Doc As Object
Enum1 As Object
Enum2 As Object
TextElement As Object
TextPortion As Object

Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
' ciclo sobre todos los prrafos
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Enum2 = TextElement.createEnumeration
' ciclo sobre todas las porciones de prrafo
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

Wend
End If

TextPortion.setPropertyToDefault("CharWeight")
TextPortion.CharStyleName = "MyBold"
End If

Wend

Editando documentos de texto


La seccin previa ha sido discutida en un amplio rango de opciones para editar documentos
de texto, enfocndose en los servicios com.sun.star.text.TextPortion y
com.sun.star.text.Paragraph, los cuales garantizan el acceso a las porciones de
prrafos y tambin a los prrafos. 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


com.sun.star.text.TextCursor para tareas ms complicadas, que incluye
navegacin en reversa en un documento o la navegacin 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 terminologa difiere de la usada en VBA: En trminos de funcin de bsqueda, 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 mtodos para la navegacin y el cambio de
texto que estn incluidos en el objeto Range de VBA (por ejemplo, MoveStart, MoveEnd, InsertBefore,
InsertAfter). La correspondientecontraparte del objeto TextCursor en OpenOffice.org estn 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 posicin 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
mtodos 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 parmetro False en la funcin 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 despus del sptimo
Captulo 6 Documentos de texto

Captulo 6Documentos de texto


carcter en el texto y termina en el dcimo carcter.
Aqu estn los principales mtodos del servicio com.sun.star.text.TextCursor
provistos para la navegacin:

goLeft (Count, Expand) salta el nmero de caracteres a la izquierda.

goRight (Count, Expand) salta el nmero 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 prrafo actual

gotoEndOfParagraph (Expand) salta al final del prrafo actual

gotoNextParagraph (Expand) salta al inicio del siguiente prrafo

gotoPreviousParagraph (Expand) salta al inicio del prrafo anterior

isStarOfParagraph () - retorna verdadero si el TextCursor est al inicio de un


prrafo

isEndOfParagraph () - retorna verdadero si el TextCursor est al final de un prrafo

El texto est dividido en sentecias en la base de los smbolos de las sentecias. Los puntos son,
por ejemplo, interpretados como smbolos que marcan el final de una sentencia.
El parmetro Expand es un valor booleano que especifica cuando el rea por la que se pasa
durante la nevegacin va a ser resaltada. Todos los mtodos de navegacin retornan un
parmetro el cual especifica cuando la navegacin ha sido satisfactoria o cuando la accin ha
sido terminada por falta de texto.
La siguiente es una lista de algunos mtodos para editar reas resaltadas usando
TextCursor y las cuales soportan el servicio com.sun.star.text.TextCursor.

CollapseToStart () - resetea el resaltado y posicin del TextCursor al inicio del


rea resaltada anterior.

CollapseToEnd () - resetea el resaltado y posicin del TextCursor al final del rea


resaltada anterior.

IsCollapsed () - retorna verdadero cuando el TextCursor no cubre ninguna rea


resaltada actualmente.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Formateando texto con TextCursor


El servicio com.sun.star.text.TextCursor soporta todos los caracteres y
propiedades de prrafos que estn presentes al inicio de este captulo.
El siguiente ejemplo muestra cmo 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
interacta con todo el texto, oracin por oracin, 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 oracin 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 oracin puede ser modificada de la misma manera usando la
propiedad String:

Captulo 6 Documentos de texto

Captulo 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 asignacin a la propiedad String


reemplaza esta con un texto nuevo. Si no hay rea resaltada, el texto es insertado en la
posicin actual de TextCursor.

Insertando cdigos 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 cdigos de control para estos propsitos.
Estos son insertados e influyen en la estructura. Los cdigos de control estn definidos en el
grupo de constantes com.sun.star.text.ControlCharacter. Los siguientes
cdigos de control estn disponibles en OpenOffice.org:

PARAGRAPH_BREAK salto de prrafo.

LINE_BREAK salto de lnea.

SOFT_HYPEN posible punto de slaba.

HARD_HYPEN punto de slaba obligatorio.

HARD_SPACE protege el espacio para que no sea ampliado o comprimido en la


justificacin del texto.

Para insertar los cdigos de control, neceritar no slo el cursor, sino tamben los objetos de
texto asociados. El siguiente ejemplo inserta y prrafo despus del vigsimo carcter 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 parmetro False en la llamada al mtodo insertControlCharacter asegura que


el rea actualmente seleccionada por el TextCursor permanezca despus de la operacin
de insercin. Si el parmetro True es pasado aqu, entonces el
insertControlCharacter reemplaza el rea actual.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Bscando porciones de texto


En muchas circunstancias, el caso es que un texto es buscado para un trmino particular y en
el punto correspondiente debe ser editado. Todos los documentos de OpenOffice.org proveen
una interface especial para este propsito, y esta interface funciona en concordancia con el
mismo principio: antes del proceso de bsqueda, que es comnmente 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
mtodo 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 trminos de su funcin, el SearchDescriptor es comparable con el dilogo de


bsqueda de OpenOffice.org. De la misma manera que en la ventana de bsqueda, los
parmetros necesita una bsqueda que pueda ser asignada en el objeto
SearchDescriptor.
Las propiedades estn provistas por el servicio
com.sun.star.util.SearchDescriptor:

SearchBackwards (boolean) busca por el texto hacia atrs, en lugar de hacia


adelante.

SearchCaseSensitive (boolean) toma en consideracin las maysculas y las


minsculas durante la bsqueda.

SearchRegularExpression (boolean) trata la expresin de bsqueda como una


expresin regular.

SearchStyles (boolean) busca por el texto por una plantilla de prrafo especifica.

SearchWords (boolean) busca solamente palabras completas.

La funcin de OpenOffice.org SearchSimilarity (o "concordancia difusa") tambin


est disponible en OpenOffice.org Basic. Con esta funcin, OpenOffice.org busca una
expresin que pueda ser similar pero no exactamente igual a la expresin de bsqueda. El
nmero de caracteres adicionales, borrados o modificados por esta expresin pueden ser
definidas individualmente. Aqu estn las propiedades asociadas del servicio
com.sun.star.util.SearchDescriptor:

SearchSimilarity (boolean) realiza una bsqueda por similaridad.

SearchSimilarityAdd (short) nmero de caracteres que pueden ser agregados para


una bsqueda por similaridad.

SearchSimilarityExchange (short) nmero de caracteres que pueden ser


reemplazados como parte de una bsqueda por similaridad.

SearchSimilarityRemove (short) nmero de caracteres que pueden ser removidos


Captulo 6 Documentos de texto

Captulo 6Documentos de texto


como parte de una bsqueda por similaridad.

SearchSimilarityRelax (boolean) toma todas las reglas de desviacin en


consideracin al mismo tiempo para la expresin de bsqueda.

Una vez que el SearchDescriptor ha sido preparado segn los requerimientos, puede
ser aplicado al documento de texto. El documento OpenOffice.org provee los mtodos
findFirst y findNext para este propsito:
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: bsqueda por similaridad


Este ejemplo muestra como un texto puede ser buscado por la palabra "turnover" y los
resultados formateados en negrita. Si una bsqueda por similaridad es usada no slo se
encuentra la palabra "turnover", sino tambin son encontradas el plural "turnovers" y las
declinaciones "turnover's". Las expresiones encontradas difieren por ms de dos letras de la
expresin 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 bsica de bsqueda y reemplazo en OpenOffice.org es comparable a la usada en VBA. Ambas


interfaces estn provistas por medio de un objeto, por medio del cual las propiedades de bsqueda y
reemplazo pueden ser definidos. Este objeto entonces es aplicado al texto requerido para realizar la
accin. 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 mtodos disponible pueden
cambiar.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Como en la antigua API de OpenOffice.org, buscar y reemplazar texto en la nueva API tambin es usando
el objeto de documento. Mientras previamente haba un objeto llamado SearchSettings especialmente para
definir estas opciones, en el nuevo objeto las bsquedas son hechas usando un objeto SearchDescriptor o
ReplaceDescriptor para reemplazar texto automticamente. Estos objetos cubren no solo las porciones,
sino tambin 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 parmetro para los
mtodos de bsqueda.

Reemplazando porciones de texto


De la misma forma que la funcin de bsqueda, la funcin de reemplazo de OpenOffice.org
tambin est disponible en OpenOffice.org Basic. Las dos funciones son manejadas de
manera idntica. Un objeto especial que graba los parmetros para el proceso tambin 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 maysculas y minsculas puede ser activado y desactivado, y
bsquedas por similaridad pueden ser realizadas.
El siguiente ejemplo demuestra el uso de ReplaceDescriptor para una bsqueda dentro
de un documento OpenOffice.org:
Dim
Dim
Dim
Dim
Dim

I As Long
Doc As Object
Replace As Object
BritishWords(5) As String
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 expresin para bsqueda y reemplazo es puesta usando las propiedades SearchString


y ReplaceString del ReplaceDescriptors. El proceso actual de reemplazo es
finalmente implementado usando el mtodo replaceAll del objeto de documento, el cual
reemplaza todas los casos de la expresin buscada.

Ejemplo: bsqueda y reemplazo de texto con expresiones regulares


La funcin de reemplazo de OpenOffice.org es particularmente efectiva si se usa en conjunto
con expresiones regulares. Esto provee la opcin de definir expresiones de bsqueda
variables con comodines y caracteres especiales en lugar de valores fijos.
Las expresiones regulares soportadas por OpenOffice.org estn desccritas con detalle en la
seccin de ayuda en lnea para OpenOffice.org. Aqu hay unos cuantos ejemplos:

Un punto dentro de una expresin de bsqueda reemplaza cualquier carcter. La expresin


de bsqueda sh.rt entonces puede encontrar shirt y short.
Captulo 6 Documentos de texto

Captulo 6Documentos de texto

El carcter ^ marca el inicio de un prrafo. Todas las ocurrencias del nombre Pedro que
estn al inicio de un prrafo pueden ser encontradas usando la expresin de bsqueda
^Pedro.

El carcter $ marca el final de un prrafo. Todas los casos del nombre Pedro que estn al
final de un prrafo pueden ser encontrados usando la expresin de bsqueda Pedro$.

Un * indica que el carcter precedente puede ser repetido cualquier nmero de veces.
Puede ser combinado con el punto como un comodn para cualquier carcter. La expresin
temper.*a, por ejemplo, puede encontrar las palabras temperancia y
temperatura.

El siguiente ejemplo muestra cmo todas las lneas vacas 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: ms que slo texto


Ms adelante, este captulo fue solamente con prrafos de texto y sus porciones. Pero los
documentos de texto tambin 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 caractersticas comunes, todos estos objetos en OpenOffice.org soportan un
servicio bsico 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 enumeracin
com.sun.star.text.TextContentAnchorType)

AnchorTypes (Enum) Enumeracin 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 enumeracin
com.sun.star.text.WrapTextMode)

El objeto TextContent tambin comparten algunos mtodos en particular, aquellos para


la creacin, insercin y borrado de objetos.

Un objeto TextContent nuevo es creado usando el mtodo CreateInstance de un


objeto de documento.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Un objeto es insertado usando el mtod InsertTextContent de un objeto de texto.

Los objetos TextContent son borrados usando el mtodo removeTextContent.

Encontrar un rango de ejemplos de estos mtodos en las siguientes secciones.

Tablas
El siguiente ejemplo crea una tabla con la ayuda de el mtodo 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 nmero 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 mtodo insertTextContent espera no solo el objeto
content que va a ser insertado, sino tambin dos parmetros:

Un objeto Cursor que determina la posicin de insertado.

Una variables boolean que especifica cuando el objeto Content va a reemplazar la


seleccin actual del cursor (valor verdadero) o va a ser insertado antes de la seleccin
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 mtodo 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 mtodo del documento de texto getTextTables() es usado para este propsito:
Dim
Dim
Dim
Dim

Doc As Object
TextTables As Object
Table As Object
I As Integer

Doc = StarDesktop.CurrentComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count 1
Table = TextTables(I)
' Editando la tabla
Next I

Captulo 6 Documentos de texto

Captulo 6Documentos de texto


Las tablas de texto estn 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 cmo una tabla de texto puede ser creada. Las opciones para accesar una tabla de texto
estn descritas a continuacin.

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 mtodos 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 estn definidas en el servicio
com.sun.star.text.TextTable. Aqu estn las propiedades ms importantes del
objeto tabla:

BackColor (Long) Color de fondo de la tabla.

BottomMargin (Long) margen inferior en centsimas de milmetro.

LeftMargin (Long) margen izquierdo en centsimas de milmetro.

RightMargin (Long) margen derecho en centsimas de milmetro.

TopMargin (Long) margen superior en centsimas de milmetro.

RepeatHeadline (boolean) el encabezado de la tabla es repetido en cada pgina.

Width (Long) ancho absoluto de la tabla en centsimas de milmetro.

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
Dim
Dim
Dim
Dim
Dim

Doc As Object
Table As Object
Cursor As Object
Rows As Object
Row As Object
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 mtodos getCount y getByIndex permiten que la lista sea
procesada posteriormente y pertenece a la interface
com.sun.star.table.XtableRows. El mtodo GetByIndex retorna el objeto fila,
y soporta el servicio com.sun.star.text.TextTableRow.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Aqu estn los mtodos principales de la interface
com.sun.star.table.XtableRows:

getByIndex (Integer) retorna el objeto fila para el ndice especificado.

GetCount () - retorna el nmero de objetos de fila.

InsertByIndex (Index, Count) inserta las filas especificadas en Count en la


posicin Index.

RemoveByIndex (Index, Count) borras las filas especificadas en Count en la


posicin Index.

Mientras los mtodos getByIndex y getCount estn disponibles en todas las tablas, los
mtodos 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 centsimas de milmetro.

IsAutoHeight (boolean) el alto de la fila es adaptado dinmicamente al contenido.

VertOrient (const) orientacin vertical del marco de texto los detalles sobre la
orientacin 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 mtodos
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 mtodo 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 nmero de la ltima fila. Los objetos
celdas estn disponibles por medio del mtodo getCellByName() del objeto de tabla. El
siguiente ejemplo muestra como un ciclo pasa por todas las celdas de una tabla e introduce el
nmero correspondiente de celda y columna dentro de la celda:

Captulo 6 Documentos de texto

Captulo 6Documentos de texto


Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Table As Object
Cursor As Object
Rows As Object
RowIndex As Integer
Cols As Object
ColIndex As Integer
CellName As String
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 prrafos quedan


automticamente disponibles.
El siguiente ejemplo busca por todas las tablas de texto y aplica el formato de alineacin
derecha a todas las celdas con valores numricos mediante significado de la propiedad de
prrafo correspondiente.
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
TextTables As Object
Table As Object
CellNames
Cell As Object
CellCursor As Object
I As Integer
J As Integer

Doc = StarDesktop.CurrentComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count 1
Table = TextTables(I)
CellNames = Table.getCellNames()

Next

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

El ejemplo crea una lista TextTables conteniendo todas las tablas del texto que se est
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 numrico, 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 prrafo de la celda de la tabla.

Marcos de texto
Los marcos de texto son considerados objetos TextContent, como las tablas y grficos.
Estos pueden esecialmente consisten en texto standard, pero pueden ser puestos en cualquier
posicin en una pgina y no estn incluidas en el flujo del texto.
Como con los objetos TextContent, tambin es hecha una distincin con marcos de texto
entre la actual creacin e insercin en el documento.
Dim
Dim
Dim
Dim

Doc As Object
TextTables As Object
Cursor As Object
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 mtodo createInstance del objeto de documento.


El marco de texto creado de esta manera puede ser insertado en el documento usando el
mtodo insertTextContent de el objeto Text. Para hacerlo, el nombre propio del
servicio com.sun.star.text.textFrame debe ser especificado.
El punto de insercin del marco de texto est determinado por el objeto Cursor, el cual
tambin es ejecutado cuando se inserta.
Los marcos de texto son la contraparte a los marcos de posicin usados en Word. Mientras VBA usa el
mtodo Document.Frames.Add para este propsito, la creacin en VBA es hecha usando el el
procedimiento anterior tambin con la ayuda de el TextCursor y de el mtodo createInstance del
objeto de documento.

Los objetos de marco de texto proveen un rango de propiedades con las cuales la posicin y
el comportamiento del marco pueden ser cambiados. La mayora de estas propiedades estn
definidas en el servicio com.sun.star.text.BaseFrameProperties, el cual
tambin est soportado por cada servicio TextFrame. Las principales propiedades son:

BackColor (Long) Color de fondo del marco de texto.

BottomMargin (Long) mrgen inferior en centcimas de milmetro.

LeftMargin (Long) mrgen izquierdo en centcimas de milmetro.

RightMargin (Long) mrgen derecho en centcimas de milmetro.

TopMargin (Long) mrgen superior en centcimas de milmetro.

Heigth (Long) Alto del marco de texto en centcimas de milmetro.


Captulo 6 Documentos de texto

Captulo 6Documentos de texto

Width (Long) ancho del marco de texto en centcimas de milmetro.

HoriOrient (const) orientacin horizontal del marco de texto (de acuerdo con
com.sun.star.text.HoriOrientation)

VertOrient (const) orientacin 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
Dim
Dim
Dim

Doc As Object
TextTables As Object
Cursor As Object
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 insercin 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 interaccin 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 carcter. Esto puede, por
ejemplo, ser movido a la siguiente lnea cuando se ocurre un salto de lnea. 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 carcter.
Una vez que la inicializacin 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 tambin est disponible para los marcos de texto.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim

Doc As Object
TextTables As Object
Cursor As Object
Frame As Object
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 pequea 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 orientacin del prrafo 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 lgica adicional
extendida ms all del puro texto. Los campos de texto pueden ser insertados en el
documento de texto usando el mismo mtodo 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 automticamente
cuando el documento es abierto.
Mientras que el tipo de un campo en VBA es especificado por parmetros en el mtodo
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 mtodos que
OpenOffice.org tena 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 mtodo
insertTextContent. El correspondiente cdigo fuente ha sido visto en el ejemplo anterior. Los tipos de
campos ms importantes y sus propiedades estn descritas en las siguientes secciones.

Adicionalmente a insertar campos de texto, buscar un documento por los campos es tambin
Captulo 6 Documentos de texto

Captulo 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
Dim
Dim
Dim

Doc As Object
TextFieldEnum As Object
TextField As Object
I As Integer

Doc = StarDesktop.CurrentComponent
TextFieldEnum = Doc.getTextFields.createEnumeration
While TextFieldEnum.hasMoreElements()

Then

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

MsgBox "Anotacin"

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 mtodo
supportsService. Si el campo prueba ser de un tipo Fecha/Hora o una Anotacin,
entonces el tipo de campo correspondiente es desplegado en el cuadro de informacin. Si por
otra parte, el ejemplo encuentra cualquier otro campo, entonces se despliega la informacin
"desconocido".
Abajo, encontrar una lista de los campos de texto ms importantes y sus propiedades
asociadas. Una lista completa de todos los campos de texto esta provista en la referencia API
en el mdulo com.sun.star.text.TextField. (Cuando lista el nombre del servicio
de un campo de texto, los caracteres en maysculas y minsculas deben ser usados en
OpenOffice.org basic, como en el ejemplo previo.)

Nmeros de pginas, 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 nmero de pginas, palabras o caracteres de un texto. Estos soportan la siguiente


propiedad:

NumberingType (const) formato de nmero (en concordancia con las constantes de


com.sun.star.style.NumberingType)

Pgina actual
El nmero de la pgina actual puede ser insertado usando el campo de texto
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


com.sun.star.text.TextField.PageNumber. Las siguientes propiedades
pueden ser especificadas:

NumberingType (const) formato de nmero (en concordancia con las constantes de


com.sun.star.style.NumberingType)

Offset (short) formato agregado al nmero de pgina (especificaciones negativas


tambin son posibles)

El siguiente ejemplo muestra como el nmero de pginas puede ser insertado en el pie de un
documento:
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
DateTimeField As Object
PageStyles As Object
StdPage As Object
FooterCursor As Object
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 lneas de encabezado y pie
son definidas como parte de la plantilla de la pgina de OpenOffice.org , esto inicialmente es
establecido usando la lista de todos los PageStyles.
Para asegurarse que la lnea de pie de pgina 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 lnea del pie de pgina.

Anotaciones
Los campos de anotacin (com.sun.star.text.TextField.Annotation) pueden
ser vistos mediante un pequeo smbolo amarillo en el texto. Hacindo click en este smbolo
se abre un campo de texto, en el cual puede ser guardado un comentario en el punto actual de
texto. Un campo de anotacin 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:
Captulo 6 Documentos de texto

Captulo 6Documentos de texto

IsFixed (boolean) si es verdadero, los detalles de tiempo de la insercin 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/nmero del captulo


El nombre del captulo 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 cmo el nombre del captulo o el nmero es mostrado


(en concordancia con com.sun.star.text.ChapterFormat)

Level (Integer) determina el nivel en el cual el nombre o el nmero del captulo est
siendo desplegado. El valor 0 determina el nivel ms 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 posicin del punto de insercin 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 posicin del
cursor.
Los marcadores de texto son accesados por medio de una lista llamada Bookmarks. Los
marcadores pueden ser accesados por su nmero o por su nombre.
El siguiente ejemplo muestra como un marcador puede ser encontrado dentro de un texto, y
un texto insertado en esa posicin.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 mtodo 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 posicin del anclaje del marcador. El cursor inserta el texto requerido
en esa posicin.

Captulo 6 Documentos de texto

OpenOffice.org Gua del programador BASIC

OpenOffice.org Basic provee una interface extensa para la creacin y edicin de libros de
clculo controlados por programacin. Este captulo describe como controlar los servicios,
mtodos y propiedades relevantes de los documentos de hoja de clculo.
La primera seccin contiene la estructura bsica de los documentos de hoja de clculo y
muestra como accesar y editar los contenidos de celdas individuales.
La segunda seccin se concentra en cmo editar hojas de clculo eficientemente, ponindo el
foco en reas de celdas y las opciones de bsqueda 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 clculo)
El objeto de documento de una hoja de clculo est basado en el servicio
com.sun.star.sheet.SpreadsheetDocument. Cada uno de estos documentos
puede contener varias hojas de clculo. En esta gua, un documento basado en tablas o un
documento de hojas de clculo es el documento entero, mientras que hoja de clculo (hoja
para resumir) es una hoja en el documento.
Una terminologa diferente es usada en VBA y en OpenOffice.org. Mientras que el objeto de documento en
VBA es llamado Libro de trabajo y sus pginas inidividuales pginas de trabajo, estos son llamados
Documento de hojas de clculo y Hojas en OpenOffice.org.

Hojas de clculo
Se pueden accesar hojas individuales de las hojas de clculo por medio dela lista Sheets.
El siguiente ejemplo muestra cmo puede accesar una hoja bien sea por su nmero 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

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


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 nmero (el conteo inicia en 0). En el
segundo ejemplo, la hoja es accesada por su nombre con el mtodo getByName.
El objeto Sheet que es obtenido por el mtodo 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 clculo son visibles.

PageStyle (String) nombre de la plantilla para la hoja de clculo.

Creando, borrando y renombrando hojas de clculo


La lista sheets del documento spreadsheet tambin es usado para crear, borrar y
renombrar hojas de clculo individuales. El siguiente ejemplo usa el mtodo hasByName
para verificar si existe una hoja llamada "MiHoja". Si existe, el mtodo determina el objeto
correspondiente usando el mtodo 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 clculo mediante el mtodo 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 mtodos getByName y insertByName son de la interface


com.sun.star.container.XnameContainer descrita en el captulo 4.

Filas y columnas
Cada hoja contiene una lista de filas y columnas. Estn disponibles mediante las propiedades
Rows y Columns del objeto de Hojas de Clculo 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
FirstCol As Object
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 milsimas de milmetro.

OptimalWidth (Boolean) pone una columna con el ancho ptimo.

IsVisible (Boolean) Despliega una columna.

IsStartOfNewPage (boolean) Cuando se imprime, crea un salto de pgina 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 trminos de funcionalidad,
OptimalWidth es ms un mtodo que una propiedad.
Los objetos de filas estn basados en el servicio com.sun.star.table.TableRows y
tiene las siguientes propiedades:

Height (Long) alto de la fila en milsimas de milmetro.

OptimalHeight (Boolean) pone la fila al alto ptimo.

IsVisible (Boolean) despliega la fila.

IsStartOfNewPage (boolean) cuando se imprime crea un salto de pgina antes de la


fila.

Si la propiedad OptimalHeight de una fila es puesta en verdadero, el alto de la fila


cambia automticamente cuando el alto de una celda es cambiado. La optimizacin
automtica continua hasta que a la fila le sea asignado un valor absoluto por medio de la
propiedad Height.
El siguiente ejemplo activa la optimizacin automtica de las primeras cinco filas en la hoja y
hace la segunda columa invisible.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
Row As Object
Col As Object
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 tambin
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 mtodo insertByIndex para insertar una nueva columna dentro de la
cuarta posicin en la hoja (ndice 3 la numeracin inicia en 0). El segundo parmetro
especifica el nmero de columnas a ser insertadas (en este ejemplo una).
El mtodo removeByIndex borra la sexta columna (ndice 5). De nuevo, el segundo
parmetro especifica el nmero de columnas que se desean borrar.
Los mtodos para insertar y borrar columnas usa la funcin del objeto Rows de la misma
manera que el mtodo muestra para la edicin de las columnas usando el objeto columns.

Celdas
Una hoja de clculo consiste en una lista bi-dimensional que contiene celdas. Cada celda es
definida por posicin X-Y con respecto a la celda superior izquierda que tiene la posicin
(0,0).
El siguiente ejemplo crea un objeto que referencia la celda superior izquierda e inserta texto
en la celda:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 numricas, cada celda tiene su nombre, por ejemplo, la


celda superior izquierda (0,0) de una hoja de clculo es llamada A1. La letra A representa la
columna y el nmero 1 es la fila. Es importante que no confunda el nombre y la posicin 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 vaca o contener texto, nmeros o
frmulas. 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 nmeros pueden ser insertados llamando la propiedad Value, el texto con
la propiedad String, y las frmulas 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 nmero, un texto, y una frmula en las celdas A1 a la A3.


Las propiedades Value, String y Formula superponen el mtodo 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 nmero. Los nmeros son alineados a la izquierda en la
celda, mientras lo dems alineado a la derecha. Tambin puede notar la diferencia entre el
texto y los nmeros cuando usa frmulas.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


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 frmula
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 nmero.
Para verificar si el contenido de una celda es un nmero 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: Vaco"
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: Frmula"
End Select

La propiedad Cell.Type retorna un valor de la enumeracin


com.sun.star.table.CellContentType que identifica el contenido de una celda.
Los posibles valores son:

EMPTY que no tiene ningn valor.

VALUE es un nmero.

TEXT Cadenas.

FORMULA contiene una frmula.

Insertando, borrando, copiando y moviendo celdas


Adicionalmente a la modificacin 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 clculo y provee cuatro mtodos para modificar el contenido de las celas.
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


El mtodo 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 tamao de dos filas y dos columnas en la segunda
fila y la segunda columna (cada inicio est en 1) de la primera hoja de clculo (nmero 0) en
el libro de hojas de clculo. 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 estn incluidos
en esta estructura:

Sheet (short) El nmero de la hoja. (la numeracin inicia en 0)

StartColumn (long) La primera columna en el rango de celdas (la numeracin inicia


en 0)

StartRow (long) la primera fila en el rango de celdas (la numeracin inicia en 0)

EndColumn (long) La columna final en el rango (la numeracin inicia en 0)

EndRow (long) la ltima fila en el rango de celdas (la numeracin inicia en 0)

La estructura completa de CellRangeAddress debe ser pasada como parmetro al


mtodo InsertCells. El segundo parmetro de InsertCells contiene un valor de la
enumeracin com.sun.star.sheet.CellInsertMode y define que se har con los
valores que estn localizados frente a la posicin en la que se va a insertar. La enumeracin
CellInsertMode reconoce los siguientes valores:

NONE los valores actuales se mantienen en su posicin actual.

DOWN las celdas en y abajo de la posicin de insercin sern movidas hacia abajo.

RIGHT las celdas en y a la derecha de la posicin de insercin sern movidas hacia la


derecha.

ROWS las filas despus de la posicin de insercin sern movidas hacia abajo.

COLUMNS las columnas despus de la posicin de insercin sern movidas hacia la


derecha.

El mtodo RemoveRange es la contrapartida del mtodo insertCells. Este mtodo


borra el rango que est definido en la estructura CellRangeAddress de la hoja.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


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 remocin est definido por uno de los siguientes valores de la enumeracin
com.sun.star.sheet.CellDeleteMode:

NONE los valores actuales conservan su posicin actual.

UP las celdas en y bajo el punto de remocin son movidas hacia arriba.

LEFT las celdas depus del punto de remocin son movidas a la izquierda.

ROWS las filas despus del punto de remocin son movidas hacia arriba.

COLUMNS las columnas despus del punto de insercin son movidas hacia la izquierda.

La interface XrangeMovement provee dos mtodos 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 posicin A6:
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
CellRangeAddress As New com.sun.star.table.CellRangeAddress
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 mtodo moveRange espera una


estructura com.sun.star.table.CellAddress para definir el origen a mover de la
regin destino. El mtodo CellAddress provee los siguientes valores:

Sheet (short) el nmero de la hoja de clculo (la numeracin inicia en 0).

Column (short) el nmero de la columna direccionada (la numeracin inicia en 0).

Row (short) el nmero de la fila direccionada (la numeracin inicia en 0).

El contenido de las celdas en el rango de destino ser siempre sobreescrito por el mtodo
moveRange. A diferencia del mtodo InsertCells, el parmetro para realizar
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


movimientos automticos no est provisto por el mtodo removeRange.
El mtodo copyRange funciona de la misma manera que el mtodo moveRange, excepto
que copyRange inserta una copia del rango de celdas, en lugar de moverlas.
En trminos de su funcionalidad, los mtodos de OpenOffice.org Basic insertCell, removeRange y
CopyRange son comparables con los mtodos de VBA Range.Insert, Range.Delete y Range.Copy.
Mientras en VBA, los mtodos son aplicados al objeto Range correspondiente, en OpenOffice.org Basic
ellos son aplicados al objeto Sheet asociado.

Formateado
Un documento de hoja de clculo provee las propiedades y mtodos para el formateo de
celdas y pginas.

Propiedades de celdas
Hay numerosas opciones para formatear celdas, para especificar tipo de fuente y tamao para
el texto.
Cada celda soporta los servicios com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties, cuyas principales propiedades
estn descritas en el captulo 6 (Documentos de texto en la pgina 71). Formateados
especiales de las celdas son manejados por el servicio
com.sun.star.table.CellProperties. Las principales propiedades de este
servicio estn 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
tambin 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) posicin de la sombra. (los valores provienen de la estructura


com.sun.star.table.ShadowLocation)

ShadowWidth (short) tamao en centsimas de milmetro.

IsTransparent (boolean) configura la sombra a transparente.


Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

Color (long) color de la sombra.

El siguiente ejemplo escribe el nmero 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
Dim
Dim
Dim

Doc As Object
Sheet As Object
Cell As Object
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

Justificacin
OpenOffice.org provee varias funciones que permiten cambiar la justificacin del texto en
una celda de una tabla.
Las siguientes propiedades definen la justificacin horizontal y vertical del texto:

HoriJustify (enum) justificacin horizontal del texto (valores de


com.sun.star.table.CellHoriJustify)

VertJustify (enum) justificacin vertical del texto (valores del


com.sun.star.table.CellVertJustify)

Orientation (enum) orientacin del texto (valores de


com.sun.star.table.CellOrientation)

IsTextWrapped (boolean) permite los saltos de lnea automticos dentro de una


celda.

RotateAngle (Long) ngulo de rotacin del texto en centsimas 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 Gua del programador BASIC

OpenOffice.org Gua 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 nmeros, fecha y texto


OpenOffice.org Provee un amplio rango de formatos predefinidos para hora y fecha. Cada
uno de estos formatos tiene un nmero interno que es asignado al formato de la celda
mediante la propiedad NumberFormat.
OpenOffice.org Provee los mtodos queryKey y AddNew de manera que pueda accesar los
nmeros de formatos existentes y tambin crear sus propios formatos. Los mtodos 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 ingls y puntos
decimales o caracteres de separadores de miles, las abreviaciones especificas del pas 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 nmeros son desplegados con
tres posiciones decimales y usa comas como separador de miles.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
Cell As Object
NumberFormats As Object
NumberFormatString As String
NumberFormatId As Long
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 dilogo en OpenOffice.org Calc provee un vistazo de los diferentes


opciones de formatos para las celdas.

Propiedades de pginas
Las propiedades de pginas son opciones de configuran la posicin del contenido del
documento en una pgina y tambin los elementos visuales que sern repetidos pgina a
pgina. Estos incluyen:

Formatos de pgina.

Mrgenes de pginas.

Encabezados y pies de pgina.

El procedimiento para definir los formatos de las pginas difieren de las otras formas de
formateado. Mientras los elementos de celdas, prrafos, y caracteres pueden ser directamente,
los formatos de pginas tambin pueden ser definidas y aplicadas indirectamente usando los
estilos de pginas. Por ejemplo, los encabezados o pies de pgina pueden ser agregados al
estilo de pgina.
Las siguientes secciones describen las opciones de formato principales para las pginas de las
hojas de clculo. Muchos de los estilos que estn descritos tambin estn disponibles para los
documentos de texto. Las propiedadades que son vlidos para ambos tipos de documentos
estn definidos en el servicio com.sun.star.style.PageProperties. Las
propiedades de pginas que solo se aplican a los documentos de hoja de clculo estn
definidos en el servicio com.sun.star.sheet.TablePageStyle.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Las propiedades de pgina (mrgenes de pginas, bordes y dems) para un documento Microsoft Office
estn definidos por el significado PageSetup en el objeto Worksheet (Excel) o el objeto Document (Word).
En OpenOffice.org, estas propiedades estn definidas usando el estilo de pgina el cual est vinculado al
documento relacionado.

Fondo de pgina
El servicio com.sun.star.style.PageProperties define las siguientes
propiedades para el fondo de las pginas:

BackColor (long) color de fondo.

BackGraphicURL (string) URL del grfico de fondo que desea usar.

BackGraphicFilter (string) nombre del filtro para interpretar el grfico de fondo.

BackGraphicLocation (enum) Posicin del grfico de fondo (el valor de acuerdo


con la enumeracin com.sun.star.style.GraphicLocation)

Formato de la pgina
El formato de la pgina est definido usando las siguientes propiedades del servicio
com.sun.star.style.PageProperties:

IsLandscape (boolean) formato horizontal.

Width (long) ancho de la pgina en centcimas de milmetro.

Height (long) alto de la pgina den centcimas de milmetro.

PrinterPaperTray (string) nombre de la bandeja de papel que desea usar.

El siguiente ejemplo configura el tamao del papel del estilo de pgina "default" al formato
DIN A5 horizontal. (alto 14.8 cm, ancho 21 cm)
Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
StyleFamilies As Object
PageStyles As Object
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

Mrgen de la pgina, bordes y sombras


El servicio com.sun.star.style.PageProperties provee las siguientes
propiedades para ajustar los mrgenes de las pginas y tambin los bordes y sombras:

LeftMargin (long) ancho del mrgen izquierdo en centcimas de milmetro.

RightMargin (long) ancho del mrgen derecho en centcimas de milmetro.

TopMargin (long) ancho del mrgen superior en centcimas de milmetro.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

BottomMargin (long) ancho del mrgen inferior en centcimas de milmetro.

LeftBorder (struct) especificaciones de la lnea del borde izquierdo (estructura


com.sun.star.table.BorderLine)

RightBorder (struct) espeficicaciones de la lnea del borde derecho (estructura


com.sun.star.table.BorderLine)

TopBorder (struct) especificaciones de la lnea del borde superior (estructura


com.sun.star.table.BorderLine)

BottomBorder (struct) especificaciones de la lnea del borde inferior (estructura


com.sun.star.table.BorderLine)

LeftBorderDistance (long) distancia entre el borde izquierdo y el contenido de la


pgina en centcimas de milmetro.

RightBorderDistance (long) distancia entre el borde derecho y el contenido de la


pgina en centcimas de milmetro.

TopBorderDistance (long) distancia entre el borde superior y el contenido de la


pgina en centcimas de milmetro.

BottomBorderDistance (long) distancia entre el borde inferior y el contenido de la


pgina en centcimas de milmetro.

ShadowFormat (struct) especificaciones de la sombra en el rea de contenido de la


pgina (estructura de com.sun.star.table.ShadowFormat)

El siguiente ejemplo configura los bordes derecho e izquierdo del estilo de pgina "default" a
un centmetro:
Dim
Dim
Dim
Dim
Dim

Doc as Object
Sheet As Object
StyleFamilies As Object
PageStyles As Object
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 pginas


Los encabezados y pies de pgina de un documento forman parte de las propiedades de la
pgina y estn 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 mrgen izquierdo de la


pgina en centcimas de milmetro.

HeaderRightMargin (long) distancia entre el encabezado y el mrgen derecho de la


pgina en centcimas de milmetro.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

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


documento en centcimas de milmetro.

HeaderHeight (long) altura del encabezado en centcimas de milmetro.

HeaderIsDynamicHeight (boolean) la altura del encabezado es automticamente


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 centcimas de milmetro.

HeaderRightBorderDistance (long) distancia entre el borde derecho y el


contenido del encabezado en centcimas de milmetro.

HeaderTopBorderDistance (long) distancia entre el borde superior y el contenido


del encabezado en centcimas de milmetro.

HeaderBottomBorderDistance (long) distancia entre el borde inferior y el


contenido del encabezado en centcimas de milmetro.

HeaderIsShared (boolean) el encabezado en esta o en todas las pginas tienen el


mismo contenido (referencia a HeaderText, HeaderTextLeft,
HeaderTextRight)

HeaderBackColor (long) color de fondo del encabezado.

HeaderBackGraphicURL (long) URL del grfico de fondo que desea usar.

HeaderBackGraphicFilter (long) nombre del filtro para interpretar el grfico de


fondo para el encabezado.

HeaderBackGraphicLocation (enum) posicin del grfico de fondo para el


encabezado (valores de acuerdo a la enumeracin
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 pgina son:

FooterIsOn (boolean) el pie de pgina est activado.


Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

FooterLeftMargin (long) distancia entre el pie de pgina y el mrgen izquierdo de


la pgina en centsimas de milmetro.

FooterRightMargin (long) distancia entre el pie de pgina y el mrgen derecho de


la pgina en centsimas de milmetro.

FooterBodyDistance (long) distancia entre el pie de pgina y el cuerpo de la


pgina en centsimas de milmetro.

FooterHeight (long) alto del pie de pgina en centsimas de milmetro.

FooterIsDynamicHeight (long) el alto del pie de pgina es adaptado


automticamente al contenido.

FooterLeftBorder (struct) detalles de la lnea del borde izquierdo alrededor del pie
de pgina (structura de com.sun.star.table.BorderLine)

FooterRightBorder (struct) detalles de la lnea del borde derecho alrededor del pie
de pgina (structura de com.sun.star.table.BorderLine)

FooterTopBorder (struct) detalles de la lnea del borde superior alrededor del pie de
pgina (structura de com.sun.star.table.BorderLine)

FooterBottomBorder (struct) detalles de la lnea del borde inferior alrededor del


pie de pgina (structura de com.sun.star.table.BorderLine)

FooterLeftBorderDistance (long) distancia entre el borde izquierdo y el


contenido del pie de pgina en centcimas de milmetro.

FooterRightBorderDistance (long) distancia entre el borde derecho y el


contenido del pie de pgina en centcimas de milmetro.

FooterTopBorderDistance (long) distancia entre el borde superior y el contenido


del pie de pgina en centcimas de milmetro.

FooterBottomBorderDistance (long) distancia entre el borde inferior y el


contenido del pie de pgina en centcimas de milmetro.

FooterIsShared (boolean) los pies de pgina tienen los mismos contenidos para
todas y cada una de las pginas. (referencia a FooterText, FooterTextLeft y
FooterTextRight)

FooterBackColor (long) color de fondo del pie de pgina.

FooterBackGraphicURL (string) URL para el grfico de fondo que desea usar.

FooterBackGraphicFilter (string) nombre del filtro para interpretar el grfico


de fondo del pie de pgina.

FooterBackGraphicLocation (enum) posicin del grfico de fondo del pie de


pgina. (valores de la enumeracin de acuerdo con
com.sun.star.style.GraphicLocation)

FooterBackTransparent (boolean) muestra el fondo del pie de pgina como


transparente.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

FooterShadowFormat (struct) detalles sobre la sombra del pie de pgina.


(estructura de com.sun.star.table.ShadowFormat)

Cambiando el texto de encabezados y pies de pgina


El contenido de los encabezados y pies de pgina, puede ser accesado por medio de las
siguientes propiedades:

LeftPageHeaderContent (Object) contenido de los encabezados para las pginas


impares. (servicio com.sun.star.sheet.HeaderFooterContent)

RightPageHeaderContent (Object) contenido de los encabezados para las


pginas pares. (servicio com.sun.star.sheet.HeaderFooterContent)

LeftPageFooterContent (Object) contenido del pie para las pginas impares.


(servicio com.sun.star.sheet.HeaderFooterContent)

RightPageFooterContent (Object) contenido del pie para las pginas pares.


(servicio com.sun.star.sheet.HeaderFooterContent)

Si no necesita distinguir entre los encabezados de las pginas pares e impares (la propiedad
FooterIsShared esta puesta en False), entonces ponga las propiedades para los
encabezados y pies de las pginas 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
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
StyleFamilies As Object
PageStyles As Object
DefPage As Object
Htext As Object
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 lnea 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 estn definidas en el servicio
com.sun.star.style.PageProperties:
Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

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
pginas izquierdas. (servicio com.sun.star.text.Xtext)

HeaderTextRight (Object) objeto de texto con el contenido del encabezado para las
pginas derechas. (servicio com.sun.star.text.Xtext)

FooterText (Object) objeto de texto con el contenido del pie de pgina. (servicio
com.sun.star.text.Xtext)

FooterTextLeft (Object) objeto de texto con el contenido del pie para las pginas
izquierdas. (servicio com.sun.star.text.Xtext)

FooterTextRight (Object) - objeto de texto con el contenido del pie para las pginas
derechas. (servicio com.sun.star.text.Xtext)

El siguiente ejemplo crea un encabezado en el estilo de pgina "default" para un documento


de texto y agrega el valor "solo un ejemplo" en el encabezado.
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
StyleFamilies As Object
PageStyles As Object
DefPage As Object
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 pgina en lugar del objeto HeaderFooterContent.

Centrado (slo hojas de clculo)


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

Definicin de elementos a ser impresos (slo hojas de clculo)


Cuando se formatean las hojas de clculo, se pueden definir cuales elementos de la pgina
son visibles. Para este propsito el servicio com.sun.star.sheet.TablePageStyle
provee las siguientes propiedades:

PrintAnnotations (boolean) Imprime los comentarios de las celdas.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

PrintGrid (boolean) Imprime las lneas de la rejilla de las celdas.

PrintHeaders (boolean) Imprime los encabezados de filas y columnas.

PrintCharts (boolean) Imprime los grficos 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 clculo se extiende por


varias pginas, estas son impresas primeramente en orden verticalmente descendente, y
luego hacia abajo al lado derecho.

PrintFormulas (boolean) Imprime las frmulas en lugar de los valores calculados.

PrintZeroValues (boolean) Imprime los valores en cero.

Editando las hojas de clculo de manera


eficiente
Mientras la seccin anterior describe la estructura principal de los documentos de hoja de
clculo, esta seccin describe los servicios que permite el acceso fcil 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 tambin provee objetos que representan
rangos de celdas. Como el objeto CellRange es creado usando la llamada a
getCellRangeByName del objeto de hoja de clculo:
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
clculo. Por ejemplo, A1:C15 representa todas las celdas en las filas 1 a la 15 y las columnas
A, B y C.
La localizacin de celdas individuales en un rango de celdas puede ser determinado usando el
mtodo getCellByPosition, donde las coordenadas de la celda superior izquierda en el
rango de celdas es (0,0). El siguiente ejemplo usa el mtodo para crear un objeto en la celda
C3.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim

Doc as Object
Sheet As Object
CellRange As Object
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 ms informacin y ejemplos
de este servicio, vea la seccin formateado.

Calculando con rangos de celdas


Puede usar el mtodo ComputeFunction para realizar operaciones matemticas en rangos
de celdas. ComputeFunction espera una constante como los parmetros que describen la
funcin matemtica que desea usar. Las constantes asociadas estn definidas en la
enumeracin com.sun.star.sheet.GeneralFunction. Los siguientes valores estn
disponibles:

SUM suma de todos los valores numricos.

COUNT nmero total de valores (incluyndo los no-numricos)

COUNTNUMS nmero total de los valores numricos.

AVERAGE el Average de los valores numricos.

MAX el valor numrico ms grande.

MIN el menor valor numrico.

PRODUCT el producto de los valores numricos.

STDEV La desviacin estndar.

VAR La varianza.

STDEVP la desviacin estndar con base en el total de la poblacin.

VARP la varianza basada en el total de la poblacin.

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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


El mtodo 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 informacin de formateado directo del
rango B2:C3
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
CellRange As Object
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 especficas en ClearContents vienen de la lista de constantes en


com.sun.star.sheet.CellFlags. Esta lista provee los siguientes elementos:

VALUE valores numricos que no estn formateados como fecha u hora.

DATETIME valores numricos que estn formateados como fecha u hora.

STRING cadenas.

ANNOTATION comentarios que estn ligados a las celdas.

FORMULA frmulas.

HARDATTR formateado directo de las celdas.

STYLES formateado indirecto.

OBJECTS - objetos de dibujo que estn conectados a celdas.

EDITATTR formateado de caracteres que solamente se aplican a partes de las celdas.

Tambin pueden agregar constantes juntas para borrar diferentes partes de informacin
usando la llamada a ClearContents.

Buscando y reemplazando contenidos de las celdas


Los documentos de hojas de clculo, como los documentos de texto, proveen una funcin
de buscar y reemplazar.
Los descriptores del objeto de bsqueda y reemplazo en el documento de hoja de clculo 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 bsqueda y reemplazo.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
ReplaceDescriptor As Object
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 dems hojas mediante un ciclo.

Dibujos y presentaciones
Este captulo provee una introduccin a la creacin y edicin controlada por macros de
dibujos. La primera seccin describe la estructura de los dibujos, incluyndo los elementos
bsicos que pueden contener los dibujos. La segunda seccin hace referencia a funciones de
edicin ms complejas, como agrupamiento, rotacin, y escalado de objetos.
La informacin acerca de la creacin, apertura, y guardado de los documentos de dibujo
puede ser encontrado en el captulo 5, Trabajando con documentos OpenOffice.org.

La estructura de los dibujos


OpenOffice.org No limita el nmero de pginas en un documento de dibujo. Puede disear
cada pgina separadamente. Tambin no hay lmite en el nmero de elementos de dibujo que
puede agregar que puede agregar en una pgina.
Esta imgen es un poco ms complicada con la presencia de capas. Por defecto, cada
documento de dibujo contiene capas de formato, controles, y lneas de dimensin y los
elementos de dibujo son agregados a la capa de formato. Tambin tiene la opcin de agregar
ms capas. Vea la Gua del desarrollador de StarOffice para ms informacin acerca de las
capas de dibujo.

Pginas
Las pginas de un documento de dibujo estn disponibles por medio de la lista DrawPages.
Puede accesar pginas individuales por medio de su nombre o por medio de su nmero. Si un
documento tiene una pgina y es llamada Slide 1, entonces los siguientes ejemplos son
idnticos:
Ejemplo 1

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 nmero (el conteo inicia en 0). En el


segundo ejemplo la pgina es accesada por su nombre con el mtodo 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 pgina que soporta el servicio


com.sun.star.drawing.DrawPage. El servicio reconoce las siguientes propiedades:

BorderLeft (Long) borde izquierdo en centcimas de milmetro.

BorderRight (Long) borde derecho en centcimas de milmetro.

BorderTop (Long) borde superior en centcimas de milmetro.

BorderBottom (Long) borde inferior en centcimas de milmetro.

Width (Long) ancho de la pgina en centcimas de milmetro.

Height (Long) alto de la pgina en centcimas de milmetro.

Number (Short) Nmero de pginas (numeracin inicia en 1), slo lectura.

Orientation (Enum) orientacin de la pgina (de acuerdo con la enumeracin de


com.sun.star.view.PaperOrientation)

Si estos parmetros son ajustados, entonces todas las pginas del documento sern afectadas.
El siguiente ejemplo ajusta el tamao del papel de un documento de dibujo que ha sido recin
abierto a 20 x 20 centmetros con un mrgen de 0.5 centmetros.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


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 (rectngulos, crculos y dems), lnea y objetos de
texto. Todas estas comparten un nmero de cractersticas 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 rectngulo en un objeto de dibujo:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 pgina 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 tamao del
objeto de documento son inicializados. Los anchos son especificados en centcimas de
milmetro. El cdigo del programa usa la llamada Doc.CreateInstance para crear el
objeto de dibujo rectngulo como se especifica en el servicio
com.sun.star.drawing.RectangleShape. Al final, el objeto de dibujo es asignado
a una pgina 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


El siguiente ejemplo crea un rectngulo y lo rellena con rojo (valor RGB 255,0,0):
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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


centcimas de milmetro.

YoffSet (Short) coordenada Y en la cual la gradiente de colores inicia, especificada en


centcimas de milmetro.

StarIntensity (Short) Intensidad de StarColor como porcentaje (en OpenOffice.org


Basic, tambin puede especificar valores mayores que 100 porciento)

EndIntensity (Short) Intensidad de EndColor como porcentaje (en OpenOffice.org


Basic, tambin puede especificar valores mayores que 100 porciento)

StepCount (Short) nmero 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:
Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
Size As New com.sun.star.awt.Size
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 ms
brillantes que los valores especificados en las propiedades StarColor y EndColor. La
gradiente de color es pintada usando una centcimas de graduacin de colores individuales
(StepCount).

Sombreado
Para crear un relleno de sombras, la propiedad FillStyle debe ser ajustada a HATCH. El
cdigo de programa para definir sombreado es muy similar al cdigo 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 lneas.

Distancia (long) distancia entre las lneas en centcimas de milmetro.

Angle (Short) ngulo del sombreado en dcimas de grado.

El siguiente ejemplo demuestra el uso de la estructura del sombreado:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
Size As New com.sun.star.awt.Size
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 cdigo crea una estructura simple de sombreado (HatchStyle = SINGLE) cuyas
lneas son rotadas 45 grados (Angle). Las lneas son gris oscuro (Color) y tienen un
espacio de 0.2 milmetros (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, slo 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 rectngulo y hace un mosaico del mapa de bits "Sky" disponible
en OpenOffice.org para rellenar el area del rectngulo.

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 ms simple para
cambiar la transparencia de un elemento de dibujo es usar la propiedad
FillTransparence.
El siguiente ejemplo crea un rectngulo rojo con una transparencia del 50 porciento.
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 tambin provee la propiedad
FillTransparenceGradient. Esta es usada para definir la gradiente que especifica la
transparencia del area de relleno.

Propiedades de la lneas
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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


provee son:

LineStyle (Enum) tipo de lnea (los valores por defecto en


com.sun.star.drawing.LineStyle)

LineColor (Long) color de la lnea.

LineTransparence (Short) transparencia de la lnea.

LineWidth (Long) ancho de la lnea en centcimas de milmetro.

LineJoint (enum) transicin a los puntos de conexin (valores de defecto con


com.sun.star.drawing.LineJoint)

El siguiente ejemplo crea un rectngulo con un borde slido (LineStyle = SOLID) que
tiene 5 milmetros de ancho (LineWidth) y un 50 porciento de transparencia. Los bordes
derecho e izquierdo de la lnea extienden sus puntos para intersercar con la otra
(LineJoint = MITER) para formar un ngulo derecho.
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 lneas punteadas
y rayadas. Para ms informacin, 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 estn relacionados a caracteres individuales y prrafos segn est descrito en
detalle en el captulo 6 (Documentos de texto, pg 67).
El siguiente ejemplo inserta un texto en un rectngulo y formatea la fuente con el servicio
com.sun.star.style.CharacterPropierties:
Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 cdigo usa la propiedad String del rectngulo 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 despus de que el objeto de dibuja ha sido agregado a
la pgina. Tambin 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 ms
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) posicin horizontal del texto dentro del elemento


de dibujo. (Valores de acuerdo con
com.sun.star.drawing.TextHorizontalAdjust)

TextVerticalAdjust (Enum) posicin 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 centcimas de milmetro.

TextRightDistance (Long) distancia derecha entre el elemento de dibujo y el


texto dentro en centcimas de milmetro.

TextUpperDistance (Long) distancia superior entre el elemento de dibujo y el


texto dentro en centcimas de milmetro.

TextLowerDistance (Long) distancia inferior entre el elemento de dibujo y el


texto dentro en centcimas de milmetro.

El siguiente ejemplo demuestra el uso de las propiedades anteriores.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 cdigo inserta un elemento de dibujo en una pgina y luego agrega el texto en la esquina
superior izquierda del objeto de dibujo usando las propiedades TextVerticalAdjust y
TextHorizontalAdjust. La mnima distancia entre el borde del texto del objeto de
dibujo est ajustada a tres milmetros.

Propiedades de las sombras


Puede agregar sombras a la mayora 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


centcimas de milmetro.

ShadowYDistance (Long) Distancia horizontal de la sombra del objeto de dibujo en


centcimas de milmetro.

El siguiente ejemplo crea un rectngulo con una sombra con una configuracin vertical y
horizontal desde un restngulo de 2 milmetros. La sombra es renderizada en gris oscuro a un
50 porciento de transparencia-

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 lneas 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 centcimas de milmetro.

Crculos y elipses
El servicio com.sun.star.drawing.EllipseShape es el responsable de los crculos
y elipses y soporta los siguientes servicios:

Propiedades de relleno com.sun.star.drawing.FillProperties

Propiedades de lneas 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 crculos y elipses tambin proveen las siguientes
propiedades:
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

CircleKind (Enum) tipo de crculo o elipse (valores de acuerdo con


com.sun.star.drawing.CircleKind)

CircleStartAngle (Long) ngulo inicial en dcimas de grado. (slo para


segmentos de crculo o elipse)

CircleEndAngle (Long) ngulo final en dcimas de grado (slo para segmentos de


crculo o elipse)

La propiedad CircleKind determina si un objeto es un cculo completo, una tajada de crculo,


o una seccin de un crculo. Los siguientes valores estn disponibles:

com.sun.star.drawing.CircleKind.FULL crculo o elipse completa.

com.sun.star.drawing.CircleKind.CUT seccin de un crculo (crculo parcial


cuyas interfaces estn ligadas directamente con otra)

com.sun.star.drawing.CircleKind.SECTION tajada de un crculo

com.sun.star.drawing.CircleKind.ARC ngulo (no incluye la lnea del


crculo)

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
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
EllipseShape As Object
Point As New com.sun.star.awt.Point
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)

Lneas
OpenOffice.org Provee el servicio com.sun.star.drawing.LineShape para los
objetos de lneas. Los objetos de lneas soportan todos los servicios generales de formateado
con excepcin de los de reas. Los siguientes son todas las propiedades que estn asociadas
con el servicio LineShape:

Propiedades de lneas 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)
Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

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

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

Doc As Object
Page As Object
LineShape As Object
Point As New com.sun.star.awt.Point
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 polgono
OpenOffice.org Tambin soporta figuras de polgonos complejos por medio del servicio
com.sun.star.drawing.PolyPolygonShape. Estrictamente hablando, un objeto
PolyPolygon no es un simple polgono, sino un polgono mltiple. 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
tambin estn provistas para los polypolygons:

Propiedades de relleno com.sun.star.drawing.FillProperties

Propiedades de lneas 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 tambin tiene una propiedad que permite definir las
coordenadas del polgono:

PolyPolygon (Array) una matriz que contiene las coordenadas del polgono. (doble
matriz con los puntos del tipo com.sun.star.awt.Point)

El siguiente ejemplo muestra como puede definir un tringulo con el servicio


PolyPolygonShape.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
PolyPolygonShape As Object
PolyPolygon As Variant
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
Coordinates(1).x
Coordinates(2).x
Coordinates(0).y
Coordinates(1).y
Coordinates(2).y

=
=
=
=
=
=

1000
7500
10000
1000
7500
5000

PolyPolygonShape.PolyPolygon = Array(Coordinates())

Desde que los puntos de un polgono son definidos como valores absolutos, necesita
especificar el tamao de la posicin inicial del polgono. 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 polgono. Despus de que la llamada
correspondiente es hecha, el polgono puede ser insertado en el documento.
Esta matriz doble en la definicin permite la creacin de formas complejas al combinar
algunos polgonos. Por ejemplo, puede crear un rectngulo e insertar otro rectngulo adentro
para crear un hueco en el rectngulo original:

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
PolyPolygonShape As Object
PolyPolygon As Variant
Square1(3) As New com.sun.star.awt.Point
Square2(3) As New com.sun.star.awt.Point
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
Square1(1).x
Square1(2).x
Square1(3).x
Square1(0).y
Square1(1).y
Square1(2).y
Square1(3).y

=
=
=
=
=
=
=
=

5000
10000
10000
5000
5000
5000
10000
10000

Square2(0).x
Square2(1).x
Square2(2).x
Square2(3).x
Square2(0).y
Square2(1).y
Square2(2).y
Square2(3).y

=
=
=
=
=
=
=
=

6500
8500
8500
6500
6500
6500
8500
8500

Square3(0).x
Square3(1).x
Square3(2).x
Square3(3).x
Square3(0).y
Square3(1).y
Square3(2).y
Square3(3).y

=
=
=
=
=
=
=
=

6500
8500
8500
6500
9000
9000
9500
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 lmite de la figura de afuera es siempre el borde exterior del polgono. La siguiente lnea
interior es el borde interior de la figura y marca la transicin del primer hueco. Si hay otra
lnea adentro, marca la transicin del area de relleno.
Los ltimos elementos de dibujo presentados aqu son objetos grficos basados en el servicio
com.sun.star.drawing.GraphicObjectShape. Este puede ser usado con
cualquier grfico dentro de OpenOffice.org cuya apariencia puede ser adaptada usando un
amplio rango de propiedades.
Los objetos grficos 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 grficos son:
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

GraphicURL (String) - URL del grfico

AdjustLuminance (Short) iluminacin de los colores, como porcentaje (tambin son


permitidos valores negativos)

AdjustContrast (Short) contraste como porcentaje (valores negativos tambin son


permitidos)

AdjustRed (Short) valor del rojo como porcentaje (valores negativos tambin son
permitidos)

AdjustGreen (Short) valor del rojo como porcentaje (valores negativos tambin son
permitidos)

AdjustBlue (Short) valor del azul como porcentaje (valores negativos tambin son
permitidos)

Gamma (Short) valor del gama del grfico

Transparency (Short) transparencia del grfico 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 pgina dentro de un objeto grfico:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
GraphicObjectShape As Object
Point As New com.sun.star.awt.Point
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 cdigo inserta el grfico test.jpg y adapta su apariencia usando las propiedades de
Adjust. En este ejemplo, los grfico son decolorados como un 40 porciento con ningn otra
conversin de colores. No toma lugar (GraphicColorMode = STANDARD).

Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo

Agrupando objetos
En muchas situacin, es til agrupar varios objetos de dibujo individuales juntos de manera
que se comporten como un slo gran objeto.
El siguiente combina dos objetos de dibujo:
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
Square As Object
Circle As Object
Shapes As Object
Group As Object
Point As New com.sun.star.awt.Point
Size As New com.sun.star.awt.Size
NewPos As New com.sun.star.awt.Point
Height As Long
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 crculo
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 cdigo crea un rectngulo y un crculo y los inserta dentro de la pgina. Entonces crea
un objeto que soporte el servicio com.sun.star.drawing.ShapeCollection y usa
el mtodo Add para agregar el rectngulo y el crculo a este objeto. ShapeCollection es
agregado a la pgina usando el mtodo 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


al grupo. No puede modificar los objetos una vez que estn en el grupo.

Rotando y recorte de objetos de dibujo


Todos los objetos de dibujo que estn 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 rotacin en centcimas de grado

ShearAngle (Long) ngulo de recorte en centcimas de grado

El siguiente ejemplo crea un rectngulo y lo rota a 30 grados usando la propiedad


RotateAngle:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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 rectngulo como en el ejemplo previo, pero en cambio lo
recorta por el medio 30 grados usando la propiedad ShearAngle:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Page As Object
RectangleShape As Object
Point As New com.sun.star.awt.Point
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)

Bsqueda y reemplazo
Como en los objetos de texto, los documentos de dibujo proveen una funcin de bsqueda y
reemplazo. Esta funcin es similar a la usada en los objetos de texto descrita en el captulo 6,
Captulo 7 Documentos de libros de clculo

Captulo 7Documentos de libros de clculo


Documentos de texto.(pg 79) Sin embargo, los documentos de dibujo los objetos
descriptores para bsqueda 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
Dim
Dim
Dim

Doc As Object
Page As Object
ReplaceDescriptor As Object
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 cdigo usa la primera pgina de dibujo del documento para crear el ReplaceDescriptor y
luego aplica este descriptor en un ciclo para todas las pginas del documento de dibujo.

Presentaciones
En OpenOffice.org las presentaciones estn basadas en documentos de dibujo. Cada pgina
de la presentacin es una filmina.
Puede accesar filminas de la misma forma en que un dibujo estndar 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, tambin 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 presentacin tiene el objeto de presentacin que provee acceso a propiedades
principales y mecanismos de contro para las presentaciones. Por ejemplo, este objeto provee
el mtodo start que puede ser usado para iniciar la presentacin.
Dim Doc As Object
Dim Presentation As Object
Doc = StarDesktop.CurrentComponent
Presentation = Doc.Presentation
Presentation.start()

El cdigo usado en este ejemplo crea un objeto Doc que hace referencia al documento de
presentacin actual y establece el objeto de presentacin asociado. El mtodo start() del
objeto es usado para iniciar el ejemplo y ejecutar la presentacin en pantalla.
Los siguientes mtodos son provistos para los objetos de presentacin:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

start Inicia la presentacin

end finaliza la presentacin

rehearseTimings inicia la presentacin desde el inicio y establece su tiempo de


ejecucin

Las siguientes propiedades tambin estn disponibles:

AllowAnimations (Boolean) ejecuta las animaciones en la presentacin

CustomShow (String) permite especificar el nombre de las presentaciones de manera


que pueda referenciar el nombre de la presentacin.

FirstPage (String) nombre de la filmina con la que desea iniciar la presentacin

IsAlwaysOnTop (Boolean) siemple despliega la ventana de la presentacin como la


primera ventana en la pantalla.

IsAutomatic (Boolean) automticamente ejecuta toda la presentacin

IsEndless (Boolean) reinicia la presentacin desde el inicio cuando esta termina.

IsFullScreen (Boolean) automticamente inicia la presentacin en modo de pantalla


completa.

IsMouseVisible (Boolean) despliega el puntero del mouse durante la presentacin

Pause (long) la cantidad de tiempo en que una pantalla blanca es desplegada al final de
la presentacin

StartWithNavigator (Boolean) despliega la ventana del navegador cuando inicia la


presentacin

UsePn (Boolean) despliega el puntero durante la presentacin

Captulo 7 Documentos de libros de clculo

OpenOffice.org Gua del programador BASIC

OpenOffice.org puede desplegar los datos como un diagrama, lo cual crea vnculos grficos
entre los datos en forma de barras, grficos de pastel, lneas y otros elementos. Los datos
pueden ser desplegados como grficos 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 estn disponibles de la hoja de clculo, entonces pueden ser vinculados
dinmicamente al diagrama. Cualquier modificacin en los datos bsicos pueden en esta
instancia ser vistos inmediatamente al diagrama asociado. Este captulo provee un vistazo de
la interface de programacin de los mdulos de diagramas de OpenOffice.org enfocados al
uso de diagramas dentro de los documentos de clculo.

Usando diagramas en hojas de clculo.


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 clculo, se provee un mecanismo que permite que se
establesca un vnculo entre el documento de datos y el diagrama insertado. El siguiente
ejemplo explica la interaccin entre la hoja de clculo y el diagrama:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Charts As Object
Chart as Object
Rect As New com.sun.star.awt.Rectangle
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 cdigo usado en el ejemplo puede aparecer complejo, el proceso central est
limitado a tres lneas: la primera lnea central crea la variable Doc, que hace referencia a la
hoja de clculo actual. (Lnea Doc = StarDesktop.CurrentComponent). El cdigo
usado en el ejemplo crea una lista conteniendo todos los diagramas de la primera hoja de
clculo. (Lnea Charts = Doc.Sheets(0).Charts). Finalmente, un nuevo diagrama
es agregado en la ltima lnea de la lista usando el mtodo addNewByName. Este diagrama
nuevo es entonces visible al usuario.

Captulo 8 Diagramas (grficos)

Captulo 8Diagramas (grficos)


La ltima lnea inicializa las estructuras auxiliares Rect y RangeAddress, las cuales
proveen el mtodo addNewByName provisto como parmetro. Rect determina la posicin
del diagrama dentro de la hoja de clculo. 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 explcitamente reemplazado.:
Chart = Charts.getByName("MyChart").embeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")

La primera lnea define el objeto de diagrama correspondiente. La segunda lnea reemplaza el


diagrama actual con uno nuevo. En este ejemplo, un diagrama de lneas.
En Excel, es hecha una distincin entre los diagramas que han sido insertados como una hoja
separada en un documento Excel y los grficos que han sido vnculados en una tabla de
pgina. Correspondiente, dos mtodos diferentes estn definidos para estos grficos. Esta
distincin no es hecha en OpenOffice.org Basic, porque los grficos en OpenOffice.org Calc
son siempre objetos vnculados en la tabla de la pgina. Los grficos son siempre accesados
usando la lista del objeto de hoja de clculo 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 mtodos 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


Ttulo, sub-ttulos, y llaves.
Un ttulo, un sub-ttulo, y una llave forman parte de los elementos bsicos 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 ttulo.

Title (Object) objeto con informacin detallada acerca del ttulo del diagrama(soporta
el servicio com.sun.star.chart.ChartTitle).

HasSubTitle(Boolean) activa el sub-ttulo.

Subtitle (Object) objeto q}con la informacin detallada acerca del sub-ttulo del
diagrama (soporta el servicio com.sun.star.chart.ChartTitle).

HasLegend (Boolean) activa la llave.

Legend (Object) objeto con informacin 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 Gua del programador BASIC

OpenOffice.org Gua 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 programacin
tcnica de los elementos de dibujo.
Los usuarios entonces tienen la oportunidad de determinar la posicin y tamao de los
elementos usando las propiedades Size y Position.
Las otras propiedades de relleno y lneas (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 tambin estas otras dos propiedades:

TextRotation (Long) ngulo de rotacin del texto en centcimas de grado.

String (String) el texto que es desplegado como el ttulo o sub-ttulo.

La llave del diagrama (el servicio com.sun.star.chart.ChartLegend) contiene la


siguientes propiedad adicional:

Alignment (Enum) posicin 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-ttulo "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 tamao de letra de 7 puntos.

Captulo 8 Diagramas (grficos)

Captulo 8Diagramas (grficos)


Dim
Dim
Dim
Dim
Dim

Doc As Object
Charts As Object
Chart as Object
Rect As New com.sun.star.awt.Rectangle
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, incluyndo el area bajo el ttulo, sub-ttulo y llave
del diagrama. El servicio asociado com.sun.star.chart.ChartArea soporta la
propiedades lnea y relleno y provee ms 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 detrs del area de datos.
Dos paredes de diagramas normalmente existen en los diagramas 3D: uno detrs del area de
datos y uno como la demarcacin izquierda para el eje de las Y. Los diagramas 3D
normalmente tambin tienen un piso.

Floor (Object) piso del panel del diagrama (slo para diagramas de 3D, soportan el
servicio com.sun.star.chart.ChartArea).

Wall (Object) paredes del diagrama (slo para diagramas 3D, soportan el servicio
com.sun.star.chart.ChartArea).

Los objetos especficos soportan el servicio com.sun.star.chart.ChartArea, los


cuales en cambio proveen las propiedades comunes de relleno y lnea (servicios
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


com.sun.star.drawing.FillProperties y
com.sun.star.drawing.LineStyle, refirase al captulo 7 pg 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 grficos (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 ms simple, estos son los ejes de las X y de las Y. Cuando se trabaja con diagramas
3D, algunas veces tambin 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 tambin
un ttulo, una descripcin, 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 caractersticas
(Tomando el ejemplo del eje de las X; las propiedades para los ejes de las Y y las Z estn
estructurados de la misma forma):

HasXAxis (Boolean) activa el eje de las X.

XAxis (Object) objeto con informacin detallada acerca del eje de las X. (soporta el
servicio com.sun.star.chart.ChartAxis).
Captulo 8 Diagramas (grficos)

Captulo 8Diagramas (grficos)

HasXAxisDescription (Boolean) activa la descripcin para el eje de las X.

HasXAxisGrid (Boolean) activa la rejilla principal para el eje de las X.

XMainGrid (Object) objeto con informacin 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 informacin detallada acerca de la rejilla auxiliar para
el eje de las X. (soporta el servicio com.sun.star.chart.ChartGrid).

HasXAxisTitle (Boolean) activa el ttulo para el eje de las X.

XAxisTitle (Object) objeto con informacin detallada acerca del ttulo del eje de las
X.(soporta el servicio com.sun.star.chart.ChartTitle).

Segundo eje de las X y las Y


Las siguientes propiedades estn 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 informacin detallada acerca del segundo eje de
las X. (soporta el servicio com.sun.star.chart.ChartAxis).

HasSecondaryXAxisDescription (Boolean) activa la descripcin 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 captulo 6, pg 71) y
las lneas (servicio com.sun.star.drawing.LineStyle, refierase al captulo 7, pg
122), provee las siguientes propiedades:

Max (Double) el valor mximo del eje.

Min (Double) el valor mnimo del eje.

Origin (Double) punto de interseccin para el cruce de los ejes.

StepMain (Double) distancia entre las dos lneas primarias de los ejes.

StepHelp (Double) distancia entre las dos lneas secundarias de los ejes.

AutoMax (Boolean) automticamente determina el valor mximo para los ejes.

AutoMin (Boolean) automticamente determina el valor mnimo para los ejes.

AutoOrigin (Boolean) automticamente determina el punto de interseccin para el


cruce de los ejes.

AutoStepMain (Boolean) automticamente determina la distancia entre las lneas

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


primarias de un eje.

AutoStepHelp (Boolean) automticamente determina la distancia entre las lneas


secundarias de los ejes.

Logarithmic (Boolean) escalas de los ejes de manera logartmica (en lugar de la


manera lineal).

DisplayLabels (Boolean) activa las etiquetas de texto para los ejes.

TextRotation (Long) ngulo de rotacin para las etiquetas de texto en centcimas de


grado.

Marks (Const) constante que especifica cuales de las lneas 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 lneas 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 extencin 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 posicin de la inscripcin; adicionalmente a la


posicin de una lnea, tambin est la opcin de dividir la etiqueta alternativamente sobre
dos lneas (valores por defecto de acuerdo con
com.sun.star.chart.ChartAxisArrangeOrderType)

TextBreak (Boolean) permite saltos de lnea.

TextCanOverlap (Boolean) permite que el texto se sobreponga.

NumberFormat (Long) formato de nmeros (refirase al captulo 7, en la seccin


formato de nmeros, fecha y texto, pg 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 lnea del servicio
com.sun.star.drawing.LineStyle (Refirase al captulo 7 pag 126).

Propiedades del ttulo del eje


Los objetos para el formateo del ttulo del eje estn basados en el servicio
com.sun.star.chart.ChartTitle, el cual tambin es usado para los ttulos de los
diagramas.

Captulo 8 Diagramas (grficos)

Captulo 8Diagramas (grficos)

Ejemplo
El siguiente ejemplo crea un diagrama de lnea. 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 orientacin
visual. Elvalor mnimo para el eje-Y est fijado en y el valor mximo est fijado en 100 de
manera que la resolucin del diagrama es retenida, an 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 grficos 3D. Todos los
tipos de diagramas que proveen esta opcin 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 tambin 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 distribucin en


porcentajes.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Tipos de diagramas
Diagramas de lneas
Los diagramas de lneas (servicio com.sun.star.chart.LineDiagram) soportan un
eje-X, dos ejes-Y y un eje-Z. Pueden ser desplegados como grficos 2D o 3D (servicio
com.sun.star.chart.Dim3Ddiagram). Las lneas pueden ser apiladas
(com.sun.star.chart.StackableDiagram).
Los diagramas de lneas proveen las siguientes propiedades:

SymbolType (const) smbolo para desplegar los puntos de datos(constantes de acuerdo


con com.sun.star.chart.ChartSymbolType).

SymbolSize (Long) tamao del smbolo para desplegado de los puntos de datos en
centcimas de milmetro.

SymbolBitmapURL (String) nombre del archivo grfico para el desplegado de los


puntos de datos.

Lines (Boolean) vnculos de los puntos de datos por significado de las lneas.

SplineType (Long) funcin spline para el emparejado de lneas (0: sin la funcin, 1:
splines cbicas, 2: splines B).

SplineOrder (Long) ancho polinomial para las splines (solamente para splines B).

SplineResolution (Long) nmero soportado de puntos para el clculo 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 grficos 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 grficos 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 detrs una de la otra en lugar de
una junto a la otra.

StackedBarsConnected (Boolean) vnculos asociados a las barras en los


Captulo 8 Diagramas (grficos)

Captulo 8Diagramas (grficos)


diagramas apilados por el significado de las lneas (disponible solamente con diagramas
de carta horizontales).

NumberOfLines (Long) nmero de lneas para ser desplegadas en un diagrama


apilado como lneas 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 grficos 2D o 3D. (servicio
com.sun.star.chart.Dim3Ddiagram).

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 estndar 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 clculo OpenOffice.org como
fuentes de datos.
Desde que los controladores estn 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 trminos 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
mtodo del objeto application, la interface en OpenOffice.org lo subdivide en varios objetos.
Un DatabaseContext es usado como el objeto raz 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 ms simples, como aquellos asociados a carateres en minscula o
mayscula.
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 implementacin del SQL para SDBC est orientada a SQL-ANSI-Standard. Extensiones
especificas de Microsoft, como el constructor INNER JOIN no estn 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 espaol. Por eso inclu el trmino en ingls para
dar mayor "claridad" al texto. Backend es un trmino standard de multicapas (n-Tier), que indica la aplicacin o la
base de datos que subyace o existe por detrs de la aplicacin del usuario ("frontend")

Captulo 9 Acceso a bases de datos

Captulo 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 estn disponibles en las aplicaciones
OpenOffice.org Writer y OpenOffice.org Calc , y tambin 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. Tambin hay una opcin de mover datos desde la
ventana de bases de datos usando la funcin de arrastrar y soltar (drag-and-drop).
Si el usuario mueve una tabla de una base de datos dentro de una hoja de clculo,
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 revs, los datos de la hoja de clculo pueden
ser movidos a la tabla de la base de datos y se realiza una importacin.
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 estn basadas en interfaces de usuario de
OpenOffice.org. No es necesario conocimiento de programacin para usar las funciones
correspondientes.
Este captulo, sin embargo, provee un poco de informacin acerca de las funciones
especificadas, pero se concentra en la interface de programacin de SDBC, la cual permite
consultas automticas a las bases de datos y esto permite que un rango mucho mayor de
aplicaciones sean usadas.
Un conocimiento bsico de la forma en que funcionan las bases de datos y del lenguaje de
consultas SQL es necesario para una completa compresin de las secciones siguientes.

Fuentes de datos
Una base de datos es incorporada a OpenOffice.org mediante su creacin comnmente
referida a la fuente de datos. La interface de usuario provee una opcin correspondiente para
la creacin de fuentes de datos en el menu Extras. Sin embargo, tambin puede crear fuentes
de datos y trabajar con las mismas usando OpenOffice.org Basic.
Un contexto de objeto que es creado usando la funcin 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 raz 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 Gua del programador BASIC

OpenOffice.org Gua 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 estn basadas en el servicio


com.sun.star.sdb.DataSource y puede determinarse desde que contexto de base de
datos est siendo usado usando el mtodo 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 informacin
general acerca del origen de los datos e informacin acerca de los mtodos 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 conexin (usualmente al menos el nombre de usuario y la contrasea).

User (String) nombre de usuario.

Password (String) contrasea del usuario (no se guarda).

IsPasswordRequired (Boolean) la contrasea es necesaria y preguntada


interactivamente al usuario.

IsReadOnly (Boolean) permite acceso de slo lectura a la base de datos.

NumberFormatsSupplier (Object) objeto que contiene el nmero de formatos


disponibles para la base de datos (soporta la interface
com.sun.star.util.XNumberFormatsSupplier, refierase al captulo 7,
seccin nmero, 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 administracin 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 informacin acerca del origen
de los datos, una fuente de datos en OpenOffice.org tambin incluye un rango de informacin
Captulo 9 Acceso a bases de datos

Captulo 9Acceso a bases de datos


acerca de cmo 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 estn 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 tambin provee a los usuarios sin ningn conocimiento de SQL la
opcin de mentener comandos SQL.
Un objeto que soporta el servicio com.sun.star.sdb.QueryDefinition est
conciliado detrs de una consulta. Las consultas son accesadas por significado de el mtodo
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
Dim
Dim
Dim
Dim

DatabaseContext As Object
DataSource As Object
QueryDefinitions As Object
QueryDefinition As Object
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 estn basadas en varias tablas:


nombre de la tabla en la cual es posible la modificacin de valores.

UpdateCatalogName (String) nombre de los catlogos para la actualizacin de tablas.

UpdateSchemaName (String) nombre de los diagramas para la actualizacin de tablas.

El siguiente ejemplo muestra como un objeto de consulta puede ser creado de una forma
controlada por programacin y puede ser asignado a una fuente de datos.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim

DatabaseContext As Object
DataSource As Object
QueryDefinitions As Object
QueryDefinition As Object
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.

Vnculos y formularios de bases de datos


Para simplificar el trabajo con las fuentes de datos, OpenOffice.org provee una opcin de
vinculas las fuentes de datos con formularios de bases de datos. Los vnculos estn
disponibles mediante el mtodo getBookmarks(). Este retorna un contenedor con
nombre (com.sun.star.sdb.DefinitionContainer) el cual contiene todos los
vnculos 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
Dim
Dim
Dim
Dim

DatabaseContext As Object
DataSource As Object
Bookmarks As Object
URL As String
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 conexin a una base de datos es necesario para accesarla. Este es el canal de
transferencia que permite la comunicacin directa con la base de datos. A diferencia de las
fuentes de datos presentadas en la seccin previa, la conexin 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 explicacin para el mtodo basado en una fuente de datos existente.

Captulo 9 Acceso a bases de datos

Captulo 9Acceso a bases de datos


Dim
Dim
Dim
Dim

DatabaseContext As Object
DataSource As Object
Connection As Object
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 cdigo usado en el ejemplo primero verifica si la base de datos est protegida con
contrasea. Si no, crea la conexin a la base de datos requerida usando la llamada
GetConnection call. Las dos cadenas vacas en la lnea de comandos son para el nombre de
usuario y la contrasea.
Si la base de datos est protegida por contrasea, el ejemplo crea un
InteractionHandler y abre la base de datos usando el mtodo
ConnectWithCompletion method. El InteractionHandler se asegura que
OpenOffice.org pregunte al usuario los datos necesarios para accesar la base de datos.

Interaccin 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Dim
Dim
Dim
Dim
Dim
Dim

DatabaseContext As Object
DataSource As Object
Connection As Object
InteractionHandler as Object
Statement As Object
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
Wend

MsgBox ResultSet.getString(1)

End If

Mientras la conexin a la base de datos ha sido establecida, el cdigo 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 mtodo getString,
mientras que el parmetro 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 tambin 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 SQLSELECT. En el pasado, el objeto ResultSet provey mtodos residentes en el objeto
Application para la nevegacin dentro de los datos (e.j: DataNextRecord).

Mtodos especficos-al-tipo para obtener datos


Como se observ en el ejemplo de la seccin anterior, OpenOffice.org provee un mtodo
getString para accesar los contenidos de las tablas. El mtodo provee el resultado en la
forma de una cadena. Los siguientes mtodos de acceso estn disponibles:

getByte() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.

getShort() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.

getInt() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.

getLong() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.

getFloat() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.

getDouble() soporta los tipos de datos SQL para nmeros, caracteres y cadenas.
Captulo 9 Acceso a bases de datos

Captulo 9Acceso a bases de datos

getBoolean() soporta los tipos de datos SQL para nmeros, 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 nmeros, cadenas, fecha y hora.

getTime() soporta los tipos de datos SQL para nmeros, cadenas, fecha y hora.

getTimestamp() soporta los tipos de datos SQL para nmeros, cadenas, fecha y hora.

getCharacterStream() soporta los tipos de datos SQL para nmeros, cadenas y


valores binarios.

getUnicodeStream() soporta los tipos de datos SQL para nmeros, cadenas y valores
bianrios.

getBinaryStream() valores binarios.

getObject() soporta todos los tipos de datos.

En todas las instancias, el nmero de columnas debe ser listado como un parmetro 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 crtica. 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 ms conpleja sea su
implementacin normalmente son por lo tanto funciones ms lentas.
Un ResultSet simple, como es que fue presentado en la seccin "interaccin de las
tablas", provee el mnimo de funciones de bsqueda disponibles. Slo permite interaccin
para ser aplicada hacia adelante, y cuales valores van a ser preguntados. Opciones de
navegacin ms extensos, como la posibilidad de modificar valores, por eso no estn
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 cmo 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

FORWARD_ONLY ResultSet solamente permite la navegacin hacia adelante.

SCROLL_INSENSITIVE ResultSet permite cualquier tipo de navegacin, sin


embargo no se refrescan los cambios en los datos originales.

SCROLL_SENSITIVE ResultSet permite cualquier tipo de navegacin, 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
funcin de vistas del ResultSet es comparable con en tipo Dynaset Recordset de
ADO y DAO.

Mtodos de navegacin en ResultSets


Si un ResultSet es un tipo SCROLL_INSENSITIVE o SCROLL_SENSITIVE, soporta
un amplio rango de mtodos de navegacin en el almacn de datos. Los mtodos 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 mtodos retornan un parmetro booleano que especifica si la nevagacin tuvo
xito.
Para determinar la posicin actual del cursor, estn provistos los siguientes mtodos de
prueba y todos retornan un valor booleano:

isBeforeFirst() ResultSet est antes del primer registro de datos.

isAfterLast() ResultSet est despus 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.

Captulo 9 Acceso a bases de datos

Captulo 9Acceso a bases de datos


El objeto ResultSet provee mtodos Update para modificar valores, los cuales estn
estructurados de la misma manera que los mtodos de acceso para abstraer valores. El
mtodo updateString, for example, permite que una cadena sea escrita.
Antes de la modoficacin, los valores deben ser transferidos a la base de datos usando el
mtodo updateRow(). La llamada debe tener lugar antes de los comandos de navegacin,
porque si no los valores se perdern.
Si ocurre un error durante las modificaciones, este puede ser reversado usando el mtodo
cancelRowUpdates(). Esta llamada solamente est disponible mientras los datos no
sean reescritos en la base de datos usando updateRow().

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Puede agregar ventanas de dilogos 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 dilogos pueden, por ejemplo, desplegar informacin de una base de datos, o guiar a los
usuarios por un proceso paso a paso para la creacin de un documento nuevo en la forma de
un autopiloto.

Tabajando con dilogos


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

Creando dilogos
Puede crear y estructurar dilogos usando el editor de dilogos 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 diseo (derecha) dentro
del area de dilogo donde puede definir su posicin y tamao.
Este ejemplo muestra un dialogo que contiene una etiqueta y un cuadro de lista.
Puede abrir un dilogo usando el siguiente cdigo
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 dilogo


asociado. Antes debe crear el dilogo, debe asegurarse que librera que est usando (en este
ejemplo, la librera Standard) est cargada. Si no, el mtodo LoadLibrary realiza esta
tarea.
Una vez que el objeto de dilogo ha sido inicializado, puede usar el mtodo Execute para
desplegar el dilogo. Los dilogos como este estn definidos como modales porque no
permiten ninguna otra accin del programa hasta que sean cerrados. Cuando un dilogo es
abierto, el programa permanece en la llamada a Execute.
El mtodo dispose al final del cdigo libera los recursos usados por el dilogo mientras
finaliza el programa.

Cerrando dilogos
Cerrando con Aceptar o cancelar
Captulo 10 Dilogos

Captulo 10Dilogos
Si un dilogo contiene un botn Aceptar o Cancelar, el dilogo automticamente es cerrado
cuando se presiona uno de estos botones. Ms informacin acerca de cmo trabajan estos
botones est mencionada en la seccin "Elementos de control de los dilogos" de este
captulo.
Si cierra un dilogo haciendo click en el botn Aceptar, el mtodo 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 botn de cerrar en la barra de ttulo


Si lo desea, puede cerrar un dilogo haciendo click en el botn cerrar en la barra de ttulo. En
este caso, el mtodo Execute del dilogo retorna un valor de 0, de la misma forma que
cuando se presiona el botn cancelar.

Cerrando con una llamada explcita del programa


Tambin puede cerrar un dilogo abierto con el mtodo endExecute:
Dlg.endExecute()

Accesando elementos de control individuales


Un dilogo puede contener cualquier nmero de elementos de control. Puede accesar estos
elementos por medio del mtodo getControl que retorna el nombre del elemento de
control.
Dim Ctl As Object
Ctl = Dlg.getControl("MyButton")
Ctl.Label = "New Label"

Este cdigo define el objeto para el elemento de control "MyButton" y luego inicializa la
variable de objeto "Ctl" con la referencia al elemento. Finalmente, el cdigo 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 maysculas y minsculas
para los nombres de los elementos de control.

Trabajando con el modelo de dilgos y los controles de


elementos
La divisin entre los elementos visibles del programa (Vista) y los datos o documentos detrs
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


de ellos (Modelo) ocurre en muchos lugares de la API de OpenOffice.org. Adicionalmente a
los mtodos y propiedades de los elementos de control, ambos dilogos y elementos de
control tienen un objeto Modelo subordinado. Este objeto permite que pueda accesar
directamente el contenido del dilogo o el elemento de control.
En los dilogos, la distincin 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 estn disponibles por
medio de la Vista y el Modelo.
La propiedad Model provee un acceso controlado por programa al modelo del dilogo y a los
objetos de elementos de control
Dim cmdNext As Object
cmdNext = Dlg.getControl("cmdNext")
cmdNext.Model.Enabled = False

Este ejemplo desactiva el botn cmdNtext en el dilogo Dlg con la ayuda del objeto model de
cmdNtext.

Propiedades
Nombre y ttulo
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 ttulo que aparece en la barra de ttulo de un dilogo con la siguiente
propiedad model:

Model.Title (String) ttulo del dilogo (aplica solamente a los dilogos).

Posicin y tamao
Puede consultar el tamao y la posicin 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) Posicin X del elemento de control, medido desde el borde


interior izquierdo del cuadro de dilogo (en unidades de ma)

Model.PositionY (long) Posicin Y del elemento de control, medido desde el borde


interior superior del cuadro de dilogo (en unidades de ma)

Para asegurar la independencia de la plataforma en la apariencia de los dilogos,


OpenOffice.org usa la medida interna Map AppFont (ma) para especificar la posicin y
tamao dentro de los dilogos. Una unidad ma est difinida como un octavo del alto
promedio de un carcter del sistema de fuentes definido en el sistema operativo y un cuarto
Captulo 10 Dilogos

Captulo 10Dilogos
de su ancho. Mediante el uso de las unidades ma, OpenOffice.org asegura que un dilogo se
vea de la misma forma en los diferentes sistemas operativos, bajo diferentes configuraciones
de sistema.
Si desea cambiar el tamao o la posicin de los elementos de control en tiempo de ejecucin,
determine el tamao total del dilogo 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 dilogo presionando la tecla "Tab".
Las siguientes propiedades estn 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) posicin del elemento de control en el orden de activacin

Finalmente, el elemento de control provee un mtodo getFocus que asegura que el elemento
de control subyacente reciba el foco:

getFocus elemento de control que recibe el foco (solamente para dilogos)

Dilogos de multi-pgina
Un dilogo en OpenOffice.org puede tener una o ms pginas. La propiedad Step de un
dilogo define la pgina actual del dilogo mientras la propiedad Step para el elemento de
control especifica la pgina 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 dilogo, 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 pginas en el dilgo.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

En el ejemplo precedente, puede tambin asignar el valor 0 al Step para la lnea divisoria y
para los botones "Cancel", "Prev", "Next", y "Done" para desplegar estos elementos en todas
las pginas. Tambin puede asignar los elementos a una pgina individual (por ejemplo la
pgina 1).
El siguiente cdigo 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 dilogo abierto debe ser incluida para hacer
este ejemplo posible. El dilogo cambia su apariencia como sigue:
Captulo 10 Dilogos

Captulo 10Dilogos
Pgina 1:

Pgina 2:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Eventos
Los dilogos y formularios de OpenOffice.org estn basados en un modelo de programacin
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 accin
particular, aun cuando la accin es otro evento. Se pueden editar documentos o abrir bases de
datos con el control de eventos y tambin 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 especfico de la pantalla)
Control de teclado: Eventos que son disparados por golpes de teclas.
Modificacin del Foco: Eventos que OpenOffice.org realiza cuando los elementos de control
son activados o desactivados.
Eventos especficos de los controles: Eventos que solamente ocurren en relacin con ciertos
elementos de control.
Cuando trabaja con eventos, asegurese crear el dilogo 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).

Captulo 10 Dilogos

Captulo 10Dilogos

La figura anterior muestra el ambiente de desarrollo con una ventana de dilogo 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 mdulo, lo mejor es
limitar su uso a dos mdulos. Para hacer su cdigo ms fcil 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 cdigo no muy claro. En cambio,
para simplificar el mantenimiento del cdigo y la resolucin 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 cdigo muestra un ejemplo de movimiento de una entrada de izquierda a derecha
en un cuadro de lista de un dilogo:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 dilogos.

La asignacin de todas las listas de dilogos de los procedimientos de OpenOffice.org Basic.


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

Parmetros
La ocurrencia de un evento particular no es siempre suficiente para una respuesta apropiada.
Se puede requerir informacin adicional. Por ejemplo, para procesar un click de mouse,
puede necesitar la posicin en la pantalla donde el botn del mouse fue presionado.
En OpenOffice.org Basic, puede usar los parmetros del objeto para proveer ms
informacin acerca de un evento a un procedimiento, por ejemplo:

Captulo 10 Dilogos

Captulo 10Dilogos
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 botn.

Mouse button pressed el usuario presiona un botn del mouse

Mouse button released el usuario libera un botn del mouse

Mouse outside el usuario mueve el mouse fuera de la ventana actual

La estructura de los objetos de eventos asociados estn definidos en la estructura


com.sun.star.awt.MouseEvent la cual provee la siguiente informacin:

Buttons (short) Botn presionado (uno o ms 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) nmero de clicks asociados a un evento del mouse (Si


OpenOffice.org puede responder lo suficientemente rpido, ClickCount es tambin 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 botn izquierdo del mouse

RIGHT botn derecho del mouse

MIDDLE botn del centro del mouse

El siguiente ejemplo muestra la posicin del mouse y tambin cual botn del mouse ha sido
presionado:

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 estn 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 lgica de la aplicacin.

Eventos del teclado


Los siguientes eventos del teclado estn disponibles en OpenOffice.org Basic:

Key pressed el usuario presiona una tecla

Key released el usuario libera una tecla

Ambos eventos estn relacionados a las acciones lgicas de las teclas, no a acciones fsicas.
Si el usuario presiona varias teclas para un carcter individual (por ejemplo, para agregar un
acento a un caracter), entonces OpenOffice.org Basic solamente crea un evento.
Una accin simple de una modificacin de una tecla, como la tecla Shift o la letra Alt no crea
un evento independiente.
La informacin 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) cdigo de la tecla presionada (los valores por defecto de acuerdo con
com.sun.star.awt.Key)

KeyChar (String) el carcter que ha sido ingresado (tomando en cuenta las teclas de
modificacin)

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 carcter de la tecla es retornado:

Captulo 10 Dilogos

Captulo 10Dilogos
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

Ms informacin 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 dilogo. Los siguientes eventos de foco
estn disponibles:

When receiving focus El elemento recibe el foco

When losing focus El elemento pierde el foco

Los objetos Event para el foco estn 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 especficos de los elementos de control


Adicionalmente a los eventos anteriores, los cuales estn soportados por todos los elementos
de control, hay algunos eventos de elementos de control especficos estn definidos
solamente para ciertos elementos de control. Los eventos ms 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Text modified el texto de un elemento de control cambia

When initiating una accin que puede ser realizada cuando un elemento de control es
disparado (por ejemplo, se presiona un botn)

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 verifquelo 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 dilogos 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 numricos

Campos de moneda

Campos que adoptan cualquier formato


Botones:

Botones estndar

cajas de chequeo (Checkboxes)

Botones de radio

Listas de seleccin

cajas de listas

cajas de combo

Otros elementos de control:


Barras de desplazamiento (horizontal y vertical)

Captulo 10 Dilogos

Captulo 10Dilogos
Grupos de campos
Barras de progreso
Lneas divisorias (horizontal y vertical)
Grficos
Campos de seleccin de archivos
Los elementos de control ms importantes son presentados a continuacin:

Botones (buttom)
Un botn realiza una accin cuando se hace click en l.
El escenario ms simple para el botn es disparar un evento "When Initiating" cuando el
usuario le da click. Puede vincular otras acciones al botn para abrir un dilogo usando la
propiedad PushButtonType. Cuando hace click en un botn en el que esta propiedad ha
sido puesta en el valor de 0, el dilogo no se afecta. Cuando hace click en un botn en el que
esta propiedad ha sido puesta en el valor de 1, el dilogo es cerrado y el mtodo Execute
del dilogo retorna el valor de 1. (la secuencia del dilogo ha terminado correctamente).
Si el "PushButtonType" tiene el valor de 2, el dilogo es cerrado y el mtodo Execute
del dilogo retorna el valor de 0 (dilogo cerrado).
Las siguientes son todas las propiedades que estn disponibles mediante el modelo del botn:

Model.BackgroundColor (long) color de fondo

Model.DefaultButton (Boolean) el botn 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 botn

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 lnea para el elemento de control


correspondiente

PushButtonType (short) accin que est vinculada al botn (0: sin accin, 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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Cuando selecciona una opcin, todas las dems acciones del grupo son desactivadas. Esto
asegura que de cualquier forma, solamente una opcin del botn sea activada.
Un elemento de control provee dos propiedades:

State (Boolean) activa el botn

Label (String) etiqueta que es desplegada en el botn.

Tambin puede usar las siguientes propiedades del modelo de botones de opcin:

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 opcin 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 lnea correspondiente al elemento de


control

Para combinar varios botones de opcin en un grupo, debe posicionarlos uno despus del otro
en la secuencia de activacin sin interrupcin (propiedad Model.TabIndex, descrita como
Order en el editor de dilogos). Si la secuencia de activacin es interrumpida por otro
elemento de control, OpenOffice.org automticamente 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 opcin en un grupo de elementos de control en
OpenOffice.org Basic. La agrupacin de los elementos de control en OpenOffice.org Basic solamente es
usada para asegurar la divisin visual mediante el dibujo de un marco alrrededor de los elementos de
control.

Cajas de verficacin (Checkboxes6)


Las cajas de verificacin 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 ms 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, tambin

6 N.T. Es bastante dificil traducir estos nombres, porque en su mayora son conocidos por los nombres en ingls.
Para ms claridad dejo tambin los nombres en ingls.

Captulo 10 Dilogos

Captulo 10Dilogos
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 lnea correspondiente al elemento de


control

Campos de texto (text fields)


Los campos de texto permiten a los usuarios ingresar nmero 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 ms lneas que pueden ser editadas o bloqueadas
para las entradas de usuarios. Los campos de texto tambin pueden ser usados como campos
especiales de moneda o numricos y tambin como campos de pantalla para tareas
especiales.
Como estos elementos de control estn 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) nmero mximo de caracteres que puede especificar en el campo

Editable (Boolean) verdadero activa la opcin de ingresado de texto, falso bloquea la


opcin 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


slo-lectura.

Tambin, las siguientes propiedades son provistas por el objeto model asociado:
OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

Model.Align (short) orientacin 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) carcter 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 lnea automticos 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) tamao mximo del texto, donde 0 corresponde a que no


tiene lmite

Model.MultiLine (Boolean) permite la entrada de varias lneas

Model.Printable (Boolean) el elemento de contro puede ser impreso

Model.ReadOnly (Boolean) el contenido del elemento de control es de slo-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 lnea 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) nmero de elementos, slo lectura

SelectedItem (String) texto de la entrada resaltada, slo lectura

SelectedItems (Array Of Strings) campo de datos con las entradas resaltadas, slo
lectura

SelectedItemPos (Short) nmero de entradas resaltadas actuales, slo lectura

SelectedItemsPos (Array of Short) campo de datos con el nmero de entradas


resaltadas (para listas que soportan selecciones mltiples), slo lectura

MultipleMode (Boolean) Verdadero activa la opcin para entradas de seleccin


Captulo 10 Dilogos

Captulo 10Dilogos
mltiple, Falso bloquea las selecciones mltiples (la propiedad no puede ser llamada
directamente, sino por medio de IsMultipleMode)

IsMultipleMode (Boolean) permite mltiples selecciones dentro de las listas, slo


lectura

Cajas de listas proveen los siguientes mtodos:

addItem (Item, Pos) ingresa la cadena especificada en "Item" dentro de la lista en la


posicin "Pos"

addItems (ItemArray, Pos) ingresa las entradas listadas en el campo de datos


"ItemArray" dentro de la lista en la posicin "Pos"

removeItems (Pos, Count) remueve las entradas de "Count" de la posicin "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) nmero de lneas del elemento de control

Model.MultiSelection (Boolean) permite selecciones de entradas mltiples

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 slo 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 lnea correspondiente al elemento de


control

La opcin VBA para registrar entradas de la lista con un valor nmerico adicional (ItemData) no existe en
OpenOffice.org Basic. Si desea administrar un valor numrico (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 Gua del programador BASIC

OpenOffice.org Gua del programador BASIC

En muchos aspectos, la estructura de los formularios de OpenOffice.org corresponde a los


dilogos discutidos en el captulo previo. Sin embargo, hay algunas diferencias importantes:
Los dilogos aparecen en el formulario en una ventana de dilogo sencilla, la cual es
desplegada sobre un documento que no permite ninguna otra accin mas que el proceso del
dilogo, hasta que este es finalizado. Los formularios, por en contrario, son desplegados
directamente en el documento, como elementos de dibujo.
Un editor de dilogos es provisto para la creacin de dilogos, 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 dilogos estn disponibles en todos los documentos
OpenOffice.org, la vida de las funciones de los formularios estn solamente disponibles en
los documentos de texto y las hojas de clculo.
Los elementos de control de un formulario puede ser vinculado con una tabla de una base de
datos externa. Esta funcin no est disponible en los dilogos.
Los elementos de control de los dilogos y formularios difieren en varios aspectos.
Los usuarios que deseen proveer a sus formularios sus propios mtodos para el manejo de
eventos, pueden referirse al captulo 10 (dilogos). El mecanismo explicado son idnticos 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 clculo. 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 posicin 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 tambin 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:
Captulo 11 Formularios

Captulo 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 mtodo GetByIndex retorna el formulario con el nmero de ndice 0.


Cuando trabaja con hojas de clculo, in estado intermedio se necesita en la lista de hojas,
porque los niveles de dibujo no estn localizados directamente en el documento sino en las
hojas individuales:
Dim
Dim
Dim
Dim

Doc As Object
Sheet As Object
DrawPage As Object
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 mtodo GetByIndex, un documento puede contener


varios formularios. Es til, por ejemplo, si el contenido de diferentes bases de datos estn
desplegados dentro de un documento, o si una relacin 1:n7 es desplegada dentro de un
formulario. La opcin de crear sub-formularios tambin est provista para este propsito.

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 informacin.
Desde que los elementos de control de los formularios dentro de los documentos son
administrados como elementos de dibujo especiales, tambin hay un objeto "Shape" que
refleja elementos de propiedades de dibujo especficos del elemento de control (en particular
su posicin y tamao).

Accesando el Modelo de los elementos de contro de los


formularios
Los modelos de los elementos de control de un formulario estn disponibles por medio del
mtodo GetByName en el objeto formulario:

7 N.T. Tambin se puede traducir en "relacin de uno a muchos".

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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 opcin de bsqueda
por todos los formularios por el elemento de control requerido:
Dim
Dim
Dim
Dim
Dim

Doc As Object
Forms As Object
Form As Object
Ctl As Object
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 mtodo 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 bsqueda 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.

Captulo 11 Formularios

Captulo 11Formularios
Dim
Dim
Dim
Dim
Dim
Dim
Dim

Doc As Object
DocCrl As Object
Forms As Object
Form As Object
Ctl As Object
CtlView As Object
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 cdigo 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 tambin 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 mtodo 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 mtodo para accesar los objetos de formas de un elemento de control tambin 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 funcin termina la
bsqueda.

Determinado el tamao y posicin de los elementos de control


OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


Como se mencion, la posicin y el tamao 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
propsito:

Size (struct) tamao del elemento de control (estructura de datos


com.sun.star.awt.Size).

Position (struct) posicin del elemento de control (estructura de datos


com.sun.star.awt.Point).

El siguiente ejemplo muestra como la posicin y el tamao 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 cdigo funcione. Si este
no es el caso, puede ser determinado usando el cdigo 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 dilogos. Va desde rangos de seleccin de simples campos de texto pasando por listas y
cajas de combos hasta varios botones.
Abajo, encontrar una lista de las propiedades ms 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" tambin
est disponible para los formularios, el cual establece una incorporacin completa a las tablas
de las bases de datos. Este est descrito en la seccin de Formularios de bases de datos en el
captulo 11 (pg 184).

Botones
El objeto modelo de un botn provee las siguientes propiedades:

BackgroundColor (long) color de fondo

DefaultButton (Boolean) el botn sirve como valor por defecto. En este caso,
tambin responde a la entrada si el botn 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

Captulo 11 Formularios

Captulo 11Formularios

TabIndex (Long) posicin del elemento de control en la secuencia de activacin

FontName (String) nombre del tipo de fuente

FontHeight (Single) alto del carcter en puntos (pt).

Tag (String) cadena que contiene informacin adicional, la cual puede ser guardada en el
botn 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 botn (para los botones de tipo URL)

Label (String) etiqueta del botn

TextColor (Long) color de texto del elemento de control

HelpText (String) texto de ayuda que se despliega automticamente cuando el cursor


del mouse est sobre el elemento de control

HelpURL (String) URL de la ayuda en lnea del elemento de control correspondiente

ButtonType (Enum) accin que est vinculada con el botn (valores por defecto de
com.sun.star.form.FormButtonType).

Por medio de la propiedad ButtonType, tiene la oportunidad de definir una accin que es
automaticamente realizada cuando el botn se presionado. El grupo de constantes
com.sun.star.form.FormButtonType asociado, provee los siguientes valores:

PUSH botn 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 botn Aceptar y Cancelar provistos en los dilogos no estn soportados en los
formularios

Botones de opcin
Las siguientes propiedades estn 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) posicin del elemento de control en la secuencia de activacin

FontName (String) nombre del tipo de fuente

FontHeight (Single) alto del carcter en puntos (pt).

Tag (String) cadena que contiene informacin adicional, la cual puede ser guardada en el

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


botn para acceso controlado por programacin.

Label (String) inscripcin del botn.

Printable (Boolean) el elemento de control puede ser impreso.

State (Short) si es 1, la opcin est activada, de lo contrario est desactivada.

RefValue (String) cadena para salvar informacin adicional (por ejemplo, para
administrar Id de los registros de datos).

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

HelpText (String) texto automticamente desplegado, cuando el cursor del mouse est
sobre el elemento de control.

HelpURL (String) URL de la ayuda en lnea para el elemento de control correspondiente.

El mecanismo de agrupamiento de los botones de opcin distingue entre los elementos de


control para dilogos y formularios. Mientras los elementos de control que aparecen uno
despus del otro son automticamente combinados, el agrupamiento en los formularios est
basado en los nombres. Para hacer esto, todos los botones de opcin 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
Dim
Dim
Dim
Dim

Doc As Object
Forms As Object
Form As Object
Ctl As Object
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 cdigo 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 mtod 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 mtodo GetGroupByName (en lugar del mtodo 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.


Captulo 11 Formularios

Captulo 11Formularios

Tabstop (Boolean) el elemento de control puede ser accesado mediante la tecla "Tab".

TabIndex (Long) posicin del elemento de control en la secuencia de activacin

FontName (String) nombre del tipo de fuente.

FontHeight (Single) alto del carcter en puntos (pt).

Tag (String) cadena que contiene informacin adicional, la cual puede ser guardada en el
botn para acceso controlado por programacin.

Label (String) etiqueta del botn.

Printable (Boolean) el elemento de control puede ser impreso.

State (Short) si es 1, la opcin est activada, de lo contrario est desactivada.

RefValue (String) cadena para guardar informacin adicional (por ejemplo, administrar
ID de resgitros de datos).

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

HelpText (String) texto de ayuda desplegado automticamente, cuando el cursor del


mouse est sobre el elemento de control.

HelpURL (String) URL de la ayuda en lnea 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) orientacin 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) carcter de relleno para los campos de contrasea.

FontName (String) nombre del tipo de fuente.

FontHeight (Single) alto del carcter en puntos (pt).

HardLineBreaks (Boolean) los saltos de lnea automticos son insertados


permanentemente en el texto del elemento de control.

HScroll (Boolean) el texto tiene barra de desplazamiento horizontal.

MaxTextLen (Short) tamao mximo del texto; si se especifica el valor 0, no hay


lmites.

MultiLine (Boolean) permite entradas multi-lneas.

Printable (Boolean) el elemento de control puede ser impreso.

ReadOnly (Boolean) el contenido del elemento de control es de slo lectura.

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua 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) posicin del elemento de control en la secuencia de activacin.

FontName (String) nombre del tip de fuente.

FontHeight (Single) alto del carcter 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 automticamente, cuando el cursor del


muse est sobre el elemento de control.

HelpURL (String) URL de la ayuda en lnea 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) nmero de lneas del elemento de control.

MultiSelection (Boolean) permite la seleccin de mltiples 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 informacin 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 slo 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) posicin del elemento de control en la secuencia de activacin.

FontName (String) nombre del tipo de fuente.

FontHeight (Single) alto del carcter en puntos (pt).

Tag (String) cadena que contiene informacin adicional que puede ser guardada en el
botn para acceso controlado por programacin.
Captulo 11 Formularios

Captulo 11Formularios

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

HelpText (String) texto de ayuda automticamente desplegado cuando el cursor del


mouse est sobre el elemento de control.

HelpURL (String) URL de la ayuda en lnea 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 informacin adicional para las entradas
individuales de las listas.

Adicionalmente, los siguientes mtodos estn provistos en el objeto de vista (view) de la


caja de listas:

addItem (Item, Pos) inserta la cadena especificada en "Item" en la posicin "Pos" de la


lista.

addItems (ItemArray, Pos) inserta las entradas listadas en la cadena de datos


"ItemArray" en la lista en la posicin "Pos".

removeItems (Pos, Count) remueve las entradas "Count" desde la posicin "Pos".

selectItem (Item, SelectMode) activa o desactiva el resaltado para los elementos


especificados en la cadena "Item" dependiendo de la variable "SelectMode".

makeVisible (Pos) bsca 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 "frontend" de la base de datos sin trabajo de programacin independiente.
El usuario tiene la opcin de localizar y buscar por las tablas y consultas seleccionadas, y
tambin cambiar registros de datos e insertar nuevos registros. OpenOffice.org
Automticamente se asegura que los datos ms 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 bsicamente 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 (refirase al captulo 9,


Acceso a Bases de Datos, fuentes de datos (pg 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 vnculo
es hecho.

CommandType (Const) especifica cual comando es hecho a una tabla, conuslta o


comando SQL (valores de acuerdo a la enumeracin
com.sun.star.sdb.CommandType).

OpenOffice.orgOpenOffice.org Gua del programador BASIC

OpenOffice.org Gua del programador BASIC


La enumeracin 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 ms
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 descripcin completa en este punto.

Captulo 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 dinmicos 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
Cdigos de pgina 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
Declaracin explcita de variables
com.sun.star.text.VertOrientation 85
Declaracin implicita de variables
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
dlar 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

7
7

enableTriState 171
end 135
EndColor 119
EndColumn 101
endExecute 158
EndIntensity 119
EndRow 101
entero largo 11
enteros 10
Environ 48
eof 44
EQV 20
Erl 29
Err 29
Error$ 29
escritura exponencial 12
Event.Source 166
Event.Source.Model 166
Exit Function 26
Exit Sub 26

Falso y verdadero 13
fecha 14
file:/// 58
FileCopy 42
FileDateTime 43
FileExist 42
FileLen 43
FileName (String) 63
FillBitmapMode 121
FillBitMapName 121
FillBitmapURL 121
FillColor 118
FillTransparence 122
FillTransparenceGradient 122
FillTransparenceGradientName 119
FilterName (string) 62
FilterName (String) 60
FilterOptions (String) 60
FilterOptions (String)
63
findFirst 80
findNext 80
first() 155
FirstPage 135
Floor 140
FocusFlags 168
FontDescriptor 183

FontHeight 180, 182 s.


FontName 180, 182 s.
FooterBackColor 110
FooterBackGraphicFilter 110
FooterBackGraphicLocation 110
FooterBackGraphicURL 110
FooterBackTransparent 110
FooterBodyDistance 110
FooterBottomBorder 110
FooterBottomBorderDistance 110
FooterHeight 110
FooterIsDynamicHeight 110
FooterIsOn 91, 109
FooterIsShared 110
FooterLeftBorder 110
FooterLeftBorderDistance 110
FooterLeftMargin 110
FooterRightBorder 110
FooterRightBorderDistance 110
FooterRightMargin 110
FooterShadowFormat 111
FooterText 112
FooterTextLeft 112
FooterTextRight 112
FooterTopBorder 110
FooterTopBorderDistance 110
For ... Next 22
Formateado 36 s.
FORMULA 100, 115
FORWARD_ONLY 155
FreeFile 43
Funciones 25

Gamma 131
GapWidth 143
get, mtodo 50
GetAttr 42
getBinaryStream 154
getBoolean 154
getByIndex 55, 85
getByName 53, 96
getByte 153
getBytes 154
getCellRangeByName 113
getCharacterStream 154
getColumns 85
GetCount 55, 85
iv

getDate 154
getDouble 153
getElementNames 54
getFloat 153
getFocus 160
getInt 153
getLong 153
getObject 154
getPosition 50
getPropertyState 73
getShort 153
getString 154
getTextTables() 83
getTime 154
getTimestamp 154
getUnicodeStream 154
goLeft
76
goRight 76
gotoEnd 76
gotoEndOfParagraph 76
gotoEndOfWord 76
gotoNextParagraph 76
gotoNextWord 76
gotoPreviousParagraph 76
gotoPreviousWord 76
gotoRange 76
gotoStart 76
gotoStartOfParagraph 76
gotoStartOfWord 76
GRADIENT 119
GraphicColorMode 131
GraphicURL 131

HasXAxisGrid
142
HasXAxisHelpGrid 142
HasXAxisTitle 142
HeaderBackColor 109
HeaderBackGraphicFilter 109
HeaderBackGraphicLocation 109
HeaderBackGraphicURL 109
HeaderBackTransparent 109
HeaderBodyDistance 109
HeaderBottomBorder 109
HeaderBottomBorderDistance 109
HeaderHeight 109
HeaderIsDynamicHeight 109
HeaderIsShared 109
HeaderLeftBorder 109
HeaderLeftBorderDistance 109
HeaderRightBorder 109
HeaderRightBorderDistance 109
HeaderRightMargin 108
HeaderShadowFormat 109
HeaderText 112
HeaderTextLeft 112
HeaderTextRight 112
HeaderTopBorder 109
HeaderTopBorderDistance 109
Height 85, 97, 107, 117
Heigth 87
HelpMarks 143
HelpText 180 ss.
HelpURL 180 ss.
hexadecimales 13
Highlighted 169
HoriJustify 104
HoriOrient 88
Hour 38
HScroll 182

HARD_HYPEN 78
HARD_SPACE 78
HARDATTR 115
HardLineBreaks 182
hasByName 54, 96
HasLegend 138
hasLocation() 62
HasMainTitle 138
hasMoreElements 55
HasSecondaryXAxis 142
HasSecondaryXAxisDescription
HasSubTitle 138
HasXAxis
141
HasXAxisDescription 142

142

If ... Then ... Else 20


IMP 20
Info 149
Inputbox 45, 47
insertByIndex 55, 98
InsertByIndex 85
insertByName 54, 96
InsertCell 101
insertCells 101
InsertTextContent 83
v

InStr 35
interface 51
Internet Standard RFC 1738 58
Intrprete 2
isAfterLast() 155
IsAlwaysOnTop 135
IsArray 33
IsAutoHeight 85
IsAutomatic 135
isBeforeFirst() 155
IsCellBackgroundTransparent 103
IsCollapsed 76
IsDate 33, 92
IsEditable 172
IsEndless 135
isEndOfParagraph 76
isEndOfWord 76
isFirst() 155
IsFixed 92
IsFullScreen 135
IsLandscape 107
isLast( 155
IsModified() 62
IsMouseVisible 135
IsMultipleMode 174
IsNumeric 33
ISO8859 9
IsPasswordRequired 149
IsReadOnly 149
IsReadOnly() 62
isStarOfParagraph 76
isStarOfWord 76
IsStartOfNewPage 97
IsTextWrapped 104
IsTransparent 103
IsVisible 96 s.
ItemCount 173
ItemId 169

JumpMask (String)

KeyChar
KeyCode
Kill 42

167
167

Label

171, 180 ss.

60

last()
155
Left 35
LEFT 102, 166
LeftBorder 108
LeftBorderDistance 108
LeftMargin 84, 87, 107
LeftPageFooterContent 111
LeftPageHeaderContent 111
Legend 138
Len 35
Line Input 44
LINE_BREAK 78
LINE_TOP 88
Lneas de programacin 5
LineColor 123
LineCount 183
LineJoint 123
Lines 145
LineShape 127
LineStyle 123
LineTransparence 123
LineWidth 123
loadComponentFromURL 57
LoadLibrary 157
Location 103, 128
Logarithmic 143

makeVisible 174, 184


Marcadores 6
Marks 143
Matrices 14
Matrices, valor para el ndice inicial 15
Max 142
MAX 114
MaxTextLen 172, 182
mensajes de error 29
mtodo Store 61
Mtodos 50
Mid 35
Mid, con reemplazo de caracteres 36
MIDDLE 166
Min 142
MIN 114
Minute 38
MOD 20
Model.Align 173
Model.BackgroundColor 170, 173 s.
vi

Model.Border 173 s.
Model.DefaultButton 170
Model.EchoChar 173
Model.Enabled 160
Model.FontDescriptor 170 ss.
Model.HardLineBreaks 173
Model.Height 159
Model.HelpText 170 ss.
Model.HelpURL 170 ss.
Model.HScroll 173
Model.Label 170 ss.
Model.LineCount 174
Model.MaxTextLen 173
Model.MultiLine 173
Model.MultiSelection 174
Model.PositionX 159
Model.PositionY 159
Model.Printable 170 ss.
Model.ReadOnly 173 s.
Model.SelectedItems 174
Model.State 171 s.
Model.StringItemList 174
Model.TabIndex 160, 171
Model.Tabstop 160, 172 ss.
Model.Text 173
Model.TextColor 170 ss.
Model.Title 159
Model.VScroll 173
Model.Width 159
mdulos 51
moneda 11
Month 38
moveRange 102
Msgbox 45
MultiLine 182
MultipleMode 173
MultiSelection 183

Name 42, 149 s.


Name (String), Impresora
next() 155
NextFocus 168
NONE 101 s.
NOT 20
notacin URL 58
Now 39
Number 117

64

NumberFormat 92, 143


NumberFormatsSupplier 149
NumberingType 90 s.
NumberOfLines 146
numeral 36
Nmeros decimales 12
Nmeros enteros 12

OBJECTS 115
objeto Selection 68
objetos dependientes del contexto
octales 13
Offset 91
On Error 28
On Error Resume Next 29 s.
Open 43
OpenOffice.org Basic 5
OptimalHeight 97
OptimalWidth 97
OR 20
Orientation 104, 117
Origin 142
Overlap 143
Overwrite (Boolean) 63

Pages (String) 64
PageStyle 96
Pgina actual 90
PaperFormat (Enum) 64
PaperOrientation (enum) 64
PaperSize (Size) 64
ParaAdjust 72
ParaBackColor 72
ParaBottomMargin 72
PARAGRAPH_BREAK 78
ParaLeftMargin 72
ParaLineSpacing 72
ParamArray 28
parmetros 26
Parmetros opcionales 27
ParaRightMargin 72
ParaStyleName 72
ParaTabStops 72
ParaTopMargin 72
Password 149
Password (String) 60, 63
Pause 135
vii

53

Percent 144
Point 118
PolyPolygon 128
Position 118, 139, 179
previous() 155
Print 44, 63
Printable 181 ss.
PrintAnnotations 112
PrintCharts 113
PrintDownFirst 113
PrintDrawing 113
Printer, propiedad 64
PrinterPaperTray 107
PrintFormulas 113
PrintGrid 113
PrintHeaders 113
PrintObjects 113
PrintZeroValues 113
private:factory 61
Procedimientos 25
PRODUCT 114
PropertyValue 60
Propiedades 50
punto 36
PUSH 180
PushButtonType 170

ResultSetType 154
Resume 28
Right 35
RIGHT 101, 166
RightBorder 108
RightBorderDistance 108
RightMargin 84, 87, 107
RightPageFooterContent 111
RightPageHeaderContent 111
RmDir 41
RotateAngle 104, 133
Row 102
Rows 98
ROWS 101 s.

QUERY 185
QueryDefinitions

150

ReadOnly 182 s.
ReadOnly (Boolean) 60
Red de Objetos Universal (UNO)
ReDim 16
RefValue 181 s.
rehearseTimings 135
removeByIndex 55, 98
RemoveByIndex 85
removeByName 54
removeItems 174, 184
RemoveRange 101
removeTextContent 83
RepeatHeadline 84
replaceByName 54
ReplaceDescriptor 81
RESET 180
ResultSetConcurrency 154

49

SCROLL_INSENSITIVE 155
SCROLL_SENSITIVE 155
SearchBackwards 79
SearchCaseSensitive 79
SearchDescriptor 79
SearchFlags 59
SearchRegularExpression 79
SearchSimilarity 79
SearchSimilarityAdd 79
SearchSimilarityExchange 79
SearchSimilarityRelax 80
SearchSimilarityRemove 79
SearchStyles 79
SearchWords 79
Second 38
SecondaryXAxis 142
Select ... Case 21
Selected 169
SelectedItem 173
SelectedItemPos 173
SelectedItems 173, 183
SelectedItemsPos 173
SelectedText 172
Selection 172
selectItem 174, 184
sencillas 11
set, mtodo 50
SetAttr 43
setPosition 50
Shadow 125
ShadowColor 125
ShadowFormat 103, 108
viii

ShadowTransparence 125
ShadowWidth 103
ShadowXDistance 125
ShadowYDistance 125
ShearAngle 133
Sheet 101 s.
Sheets 95
Shell 47
Size 118, 128, 139, 179
SOFT_HYPEN 78
Sort (Boolean) 63
SplineOrder 145
SplineResolution 145
SplineType 145
Stacked 144
StackedBarsConnected 145
StarColor 119
StarDesktop 57
StarDesktop.CurrentComponent 58
StarDesktop.LoadComponentFromURL
StarIntensity 119
start 135
StartColumn 101
StartRow 101
StartWithNavigator 135
State 171, 181 s.
STDEV 114
STDEVP 114
StepCount 119
StepHelp 142
StepMain 142
storeAsURL 62
String 139
STRING 115
StringItemList 183
Style 119 s.
StyleFamilies 65
STYLES 115
SUBMIT 180
Subtitle 138
SUM 114
supportsService 52
SuppressVersionColumns 149
SymbolBitmapURL 145
SymbolSize 145
SymbolType 145

59

TabIndex 180, 182 s.


TABLE 185
TableFilter 149
TableTypeFilter 149
Tabstop 179 s., 182 s.
Tag 180, 182 s.
TargetFrame 180
TargetURL 180
Temporary 168
Text 172, 183
TEXT 100
TextAutoGrowHeight 124
TextAutoGrowWidth 124
TextBreak 143
TextCanOverlap 143
TextColor 180 ss.
TextHorizontalAdjust
124
TextLeftDistance
124
TextLowerDistance
124
TextRightDistance
124
TextRotation 139, 143
TextUpperDistance
124
TextVerticalAdjust
124
TextWrap 82
Time 39
Title 138
TopBorder 108
TopBorderDistance 108
TopMargin 84, 87, 107
Transparency 131

Unicode 9
Universal Network Objects (UNO)
Unpacked (Boolean) 63
UP 102
UpdateCatalogName 150
updateRow() 156
UpdateSchemaName 150
UpdateTableName 150
URL 149, 180
UsePn 135
User 149

VALUE 100, 115


ValueItemList 183
VAR 114
variables 7
ix

49

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 pblicas 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 lmites 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, mximo 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
Y 166
VBA, ParamArray 28
Year 38
VBA, Parmetros 27
YoffSet 119
VBA, Range 75, 83, 103

Das könnte Ihnen auch gefallen