guía del programador basic - openoffice.org

204
OpenOffice.org Guía básica del programador Traducción Arturo Garro de “Basic Programmer's Guide” del StarOffice 6.0 Revisión de Julio 2003 Escrita en OpenOffice.org 643c (Windows) y 1.0.1 (Linux) Se terminó de escribir en OpenOffice.org 1.1.0 RC4 (Linux y Windows)

Upload: others

Post on 22-Nov-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Guía del programador BASIC - OpenOffice.org

OpenOffice.org

Guía básica del programador

Traducción Arturo Garro de“Basic Programmer's Guide” del StarOffice 6.0Revisión de Julio 2003Escrita en OpenOffice.org 643c (Windows) y 1.0.1 (Linux)Se terminó de escribir en OpenOffice.org 1.1.0 RC4 (Linux y Windows)

Page 2: Guía del programador BASIC - OpenOffice.org
Page 3: Guía del programador BASIC - OpenOffice.org

Copyrights y marcas registradas.Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is described in thisdocument. In particular, and without limitation, theseintellectual property rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or more additionalpatents 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, anddecompilation. No part of the product or of this documentmay 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 systemCopyright © 1995 by Lernout & Hauspie SpeechProducts N.V. All rights reserved.Sun, Sun Microsystems, the Sun logo, Java, Solaris, StarOffice, the Butterfly logo, the Solaris logo, and the StarOffice logo aretrademarks 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 Beansand Screen Beans clipart characters are registeredtrademarks 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 ANDWARRANTIES, INCLUDING ANY IMPLIED WARRANTY OFMERCHANTABILITY, FITNESS FOR FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED,EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS AREHELD TO BE LEGALLY INVALID.Sun Microsystems, Inc. a les droits de propriété intellectuels relatants à la technologie incorporée dans ce produit. En particulier, et sansla limitation, ces droits de propriété intellectuelspeuvent inclure un ou plus des brevets américains énumérés à http://www.sun.com/patents et un ou les brevets plus supplémentaires oules applications de brevet en attente dans les Etats -Unis et les autres pays.Ce produit ou document est protégé par un copyright et distribué avec des licences qui en restreignent l'utilisation, la copie, ladistribution, et la décompilation. Aucune partie de ce produitou document ne peut être reproduite sous aucune forme, par quelque moyen que ce soit, sans l'autorisation préalable et écrite de Sun etde ses bailleurs de licence, s'il y ena.Le logiciel détenu par des tiers, et qui comprend la technologie relative aux polices de caractères, est protégé par un copyright etlicencié par des fournisseurs de Sun.Ce produit repose en partie sur le travail de l’Independent JPEG Group et de The FreeType Project.Portions Copyright 2000 SuSE, Inc. Word for Word Copyright © 1996 Inso Corp. Système de correction orthographique InternationalCorrectSpell Copyright © 1995 de Lernout & HauspieSpeech Products N.V. Tous droits réservés.Sun, Sun Microsystems, le logo Sun, Java, Solaris, StarOffice, le logo Butterfly, le logo Solaris et le logo StarOffice sont des marquesde fabrique ou des marques déposées de SunMicrosystems, Inc. aux Etats-Unis et dans d'autres pays.UNIX est une marque déposée aux Etats-Unis et dans d'autres pays et licenciée exlusivement par X/Open Company, Ltd.Les Screen Beans et les objets graphiques prédessinés Screen Beans sont des marques déposées de A Bit Better Corporation.Acquisitions fédérales : logiciel commercial ; les utilisateurs gouvernementaux sont soumis aux conditions générales standard de lalicence.LA DOCUMENTATION est fournie « TELLE QUELLE » et TOUTES LES CONDITIONS, REPRÉSENTATIONS ET GARANTIESEXPRESSES OU TACITES, Y COMPRIS TOUTE GARANTIETACITE CONCERNANT LA QUALITÉ MARCHANDE, L'APTITUDE À UN USAGE PARTICULIER OU LA NON-VIOLATIONDE DROITS DE TIERS SERONT REJETÉES, EXCEPTÉDANS LE CAS OÙ L'EXCLUSION OU LA LIMITATION DE TELLES GARANTIES NE SERAIT PAS AUTORISÉE PAR LALÉGISLATION EN VIGUEUR.

Traducción Arturo Garro. Realizado especialmente para la comunidad en español de OpenOffce.org. e-mail: [email protected] esta traducción a mi esposa y mis hijos. Porque me comprendieron y me dieron el tiempo necesario para poder terminarla.Gracias Rebeca por llevarme comida mientras trabajaba en esto. A Jose Ricardo y Ariana, por dejar de jugar en la computadora ycedermela para poder trabajar. Y sobre todo por el tiempo que no les dediqué por este proyecto.

i

Page 4: Guía del programador BASIC - OpenOffice.org

Acerca de OpenOffice.org Basic 1Posibles usos de OpenOffice.org Basic 2Uso de OpenOffice.org Basic 2Estructura de esta guía 2Más información 3

Un vistazo de la programación en OpenOffice.org Basic. 5

Líneas de programación 5Comentarios 6Marcadores 6

Trabajado con variables 7Declaración implicita de variables 7Declaración explícita de variables 7

Cadenas (string) 8De un conjunto de caracteres ASCII a Unicode 9Variables de cadenas 9Especificación de cadenas específica. 10

Números 10Variables de enteros 10Variables de entero largo 11Variables sencillas 11Variables dobles 11Variables de moneda 11Especificación explícita de números 12

Falso y verdadero 13Variables boleanas 13

Detalles sobre la hora y la fecha 14Variables de fecha 14

Campos de datos 14Matrices simples 14Especificando un valor para el índice inicial 15Campos de datos multi-dimensionales 15Cambios dinámicos en las dimensiones de los campos de datos 16

Alcance y tiempo de vida de las variables 17Variables locales 17Variables públicas 17Variables globales 18Variables privadas 18

Constantes 19Operadores 19

Operadores matemáticas 19Operadores lógicos 20

ii

Page 5: Guía del programador BASIC - OpenOffice.org

Operadores de comparación 20Control de flujo 20

If ... Then ... Else 20Select ... Case 21

Ciclos 22For ... Next 22Do ... Loop 23Ejemplo de programación: Ordenando con ciclos anidados. 24

Procedimientos y funciones 25Procedimientos 25Funciones 25Terminando procedimientos y funciones prematuramente 26Pasando parámetros 26Parámetros opcionales 27

Manejo de errores 28La Instrucción On Error 28El comando Resume 28Consultas referentes a la información de errores 29Consejos para el manejo de errores estructurado 29

Funciones de conversión 31

Conversiones de tipo implícito y explícito 31Verificando el contenido de las variables 33

Cadenas 34Trabajando con conjuntos de caracteres 34Accesando partes de una cadena 35Búsqueda y reemplazo 35Formateando cadenas 36

Fecha y hora 37Especicación de los detalles de fecha y hora dentro del código del programa 37Extrayéndo detalles de fecha y hora. 38Accesando la fecha y la hora del sistema 39

Archivos y directorios 40Administrando archivos 40

Escribiendo y leyéndo archivos de texto 43Otras funciones 47

Beep 47Shell 47Wait 47Environ 48

Red de Objetos Universal (UNO) 49Propiedades y métodos 50

Propiedades 50Métodos 50

iii

Page 6: Guía del programador BASIC - OpenOffice.org

Módulos, servicios e interfaces 51Herramientas para el trabajo con UNO 51

El método supportsService 52Propiedades de depuración 52Referencia API 52

Un vistazo de algunas interfaces centrales. 52Creando objetos dependientes del contexto 53Acceso por nombre a objetos subordinados 53Acceso basado en índices a objetos subordinados 55Acceso iteractivo a objetos subordinados 55

El StarDesktop 57

Información básica acerca de los documentos en OpenOffice.org 58Crear, abrir e importar documentos 59Objetos de documentos 61

Pantillas 65Detalles sobre varias opciones de formato 66

La estructura de los documentos de texto 67

Párrafos y porciones de párrafos 68Editando documentos de texto 74

El TextCursor 75Búscando porciones de texto 79Reemplazando porciones de texto 81

Documentos de texto: más que sólo texto 82Tablas 83Marcos de texto 87Campos de texto 89Marcadores 92

La estructura de documentos basados en tablas (Hojas de cálculo) 95

Hojas de cálculo 95Filas y columnas 96Celdas 98Formateado 103

Editando las hojas de cálculo de manera eficiente 113Rangos de celdas 113Buscando y reemplazando contenidos de las celdas 115

La estructura de los dibujos 116Páginas 116Propiedades elementales de los objetos de dibujo 118Un vistazo a varios objetos de dibujo 126Agrupando objetos 132

iv

Page 7: Guía del programador BASIC - OpenOffice.org

Rotando y recorte de objetos de dibujo 133Búsqueda y reemplazo 133

Presentaciones 134Trabajando con presentaciones 134

Usando diagramas en hojas de cálculo. 137La estructura de los diagramas 138

Los elementos individuales de un diagrama 138Ejemplo 144

Tipos de diagramas 145Diagramas de líneas 145Diagramas de área 145Diagramas de barras 145Diagramas de pastel 146

SQL: un lenguaje de consultas 147Tipos de acceso a bases de datos 148Fuentes de datos 148

Consultas 150Vínculos y formularios de bases de datos 151

Acceso a bases de datos 151Interacción de las tablas 152Métodos específicos-al-tipo para obtener datos 153Las variantes a ResultSet 154Métodos de navegación en ResultSets 155Modificando registro de datos 155

Tabajando con diálogos 157

Creando diálogos 157Cerrando diálogos 157Accesando elementos de control individuales 158Trabajando con el modelo de diálgos y los controles de elementos 158

Propiedades 159Nombre y título 159Posición y tamaño 159Foco y secuencia del tabulador 160Diálogos de multi-página 160

Eventos 163Parámetros 165Eventos del Mouse 166Eventos del teclado 167Eventos de foco 168Eventos específicos de los elementos de control 168

v

Page 8: Guía del programador BASIC - OpenOffice.org

Elementos de control de los diálogos en detalle 169Botones (buttom) 170Botones de opciones (Option button) 170Cajas de verficación (Checkboxes) 171Campos de texto (text fields) 172Cajas de listas (List Boxes) 173

Trabajar con formularios 175

Determinando los objetos de formularios 175Tres aspectos de los elementos de control de un formulario 176Accesando el Modelo de los elementos de contro de los formularios 176Accesando la vista de los elementos de control de los formularios 177Accesando el objeto formas de los formularios de elementos de control 178

Elementos de control de formularios en detalle 179Botones 179Botones de opción 180Cajas de chequeo (Checkboxes) 181Campos de texto 182Cajas de listas 183

Formularios de bases de datos 184Tablas 185

vi

Page 9: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Esta guía provee una introducción a la programación con OpenOffice.org Basic e indica lasposibles aplicaciones provistas al usar OpenOffice.org Basic en OpenOffice.org. Para obtenerlo mejor de este libro, debería estar familiarizado con otros lenguajes de programación.

Varios ejemplos son provistos para ayudarle a desarrollar sus propios programas enStarBasic.

Un número de consejos de migración para los programadores de Microsoft Visual Basic o para aquellosque han trabajado con versiones menores de StarOffice, son provistos atraves de esta guía. Estánindicados por un pequeño símbolo en el borde de la página. El apéndice de esta guía contiene un índice deconsejos de migración de manera que pueda navegar fácilmente al consejo que desea leer.

Acerca de OpenOffice.org BasicEl lenguaje de programación OpenOffice.org Basic ha sido desarrollado especialmente paraOpenOffice.org (OpenOffice.org) y está firmemente integrado en el paquete de oficina.

Como el nombre lo sugiere, OpenOffice.org Basic es un lenguaje de programación de lafamilia Basic. Cualquiera que haya trabajado previamente con otros lenguajes de Basic – enparticular con Visual Basic o Visual Basic para Aplicaciones (VBA) de Microsoft – puedeacostumbrarse fácilmente a OpenOffice.org Basic.

Grandes secciones de las construcciones básicas de OpenOffice.org Basic son compatiblescon Visual Basic.

El lenguaje de programación OpenOffice.org Basic puede ser dividido en cuatro secciones:

• : Define las construcciones lingüisticas elementales,or ejemplo, declaraciones de variables, ciclos, y funciones.

• : Provee funciones estandares que no tienen referenciacon OpenOffice.org, por ejemplo, funciones para edición de números, cadenas, valores defecha, y archivos.

• : Permite el acceso adocumentos de OpenOffice.org y permite que sean creados, salvados, modificados eimpresos.

• : Crea ventanas de diálogo presonalizadas y provee un entorno paraagregar elementos de control y manejadores de eventos.

Capítulo 1 Introducción

Page 10: Guía del programador BASIC - OpenOffice.org

Capítulo 1 Introducción

La compatibilidad entre OpenOffice.org Basic y VBA está relacionada con el lenguaje del OpenOffice.orgBasic y con las librerías en tiempo de ejecución. La API de OpenOffice.org y el editor de diálogos no soncompatibles con VBA (estandarizar estas interfaces haría que muchos de los conceptos provistos porOpenOffice.org sean imposibles)

Posibles usos de OpenOffice.org BasicEl fuerte de las aplicaciones de OpenOffice.org Basic inicia cuando las funciones estadard deOpenOffice.org terminan. Tareas rutinarias pueden ser automatizadas en OpenOffice.orgBasic, vínculos a otros programas – por ejemplo, servidores de bases de datos – y actividadesmás complejas pueden ser realizadas el presionar un botón usando scripts predefinidos.

OpenOffice.org Basic ofrece acceso completo a todas las funciones de OpenOffice.org,soporta todas las funciones, modifica tipos de documentos, y provee opciones para crearventanas de diálogo personalizadas.

Uso de OpenOffice.org BasicEl OpenOffice.org Basic puede ser usado por cualquier OpenOffice.org u OpenOffice.org sinnecesidad de programas adicionales o ayudas especiales.

En la instalación standar, OpenOffice.org Basic tiene los componentes necesarios para crearsus propias macros de Basic, incluyéndo:

• que provee un editor para crear y probar lasmacros.

• el cual es necesario para ejecutar las macros.

• a varias aplicaciones de OpenOffice.org, que permite el acceso directo alos documentos de Office.

Estructura de esta guía Los primeros tres capítulos introducen al lector al OpenOffice.org Basic:

• Capítulo 2: El lenguaje de OpenOffice.org Basic.

• Capítulo 3: La librería de tiempo de ejecución de OpenOffice.org Basic.

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

Estos tres capítulos ofrecen un vistaso del OpenOffice.org Basic y puede ser leído porcualquiera que intente escribir programas en OpenOffice.org Basic.

Los capítulos restantes describen componentes individuales de la API de OpenOffice.org conmás detalle y pueden ser leídos selectivamente según lo requiera.

• Capítulo 5: Trabajando con documentos de OpenOffice.org

• Capítulo 6: Documentos de texto.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 11: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• Capítulo 7: Dibujos y Presentaciones.

• Capítulo 8: Diagramas (Gráficos)

• Capítulo 9: Acceso a base de datos.

• Capítulo 10: Diálogos.

• Capítulo 11: Formularios.

Más informaciónLos componentes de OpenOffice.org API que están discutidos en esta guía fueronseleccionados basados en el beneficio práctico para el programador de OpenOffice.org Basic.En general, sólo las partes referentes a las interfaces son discutidas. Para más detalle, vea lareferencia a las API que está disponible en Internet en:

http://api.openoffice.org/common/ref/com/sun/star/module-ix.html

La Guía del Desarrollador describe las API de OpenOffice.org con más detalle que esta guía,pero está principalmente orientada a los programadores de Java o C++. Cualquiera que estérealmente familiarizado con la programación en OpenOffice.org Basic puede encontrarinformación adicional en la Guía del Desarrollador en OpenOffice.org Basic y programaciónde OpenOffice.org. Puede descargar la Guía del Desarrollador desde Internet desde:

http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html

Los programadores que deseen trabajar directamente en Java y C++ en lugar deOpenOffice.org Basic deben consultar la Guía del Desarrollador de OpenOffice.org en lugarde esta guía. La programación de OpenOffice.org con Java o C++ es considerablemente máscompleja que la programación con OpenOffice.org Basic.

Capítulo 1 Introducción

Page 12: Guía del programador BASIC - OpenOffice.org
Page 13: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

El OpenOffice.org Basic pertenece a la familia de lenguajes de Basic. Muchas partes sonidénticas a Microsoft Visual Basic para Aplicaciones y a Microsoft Visual Basic. Cualquieraque haya trabajado con estos lenguajes puede rápidamente acostumbrarse a OpenOffice.orgBasic.

Programadores de otros lenguajes – como Java, C++, o Delphi – pueden encontrar fácilfamiliarizarse por sí mismos con OpenOffice.org Basic. OpenOffice.org Basic es un lenguajede programación totalmente desarrollado a procedimientos y no usa estructuras de controlrudimentarias como GoTo y GoSub.

También puede beneficiarse de las ventajas de un lenguaje orientado a objetos desde que lainterface en OpenOffice.org Basic permite el uso de librerias de objetos externos. La API deOpenOffice.org Basic está enteramente basada en estas interfaces, que están descritas conmás detalle en los siguientes capítulos de este documento.

Este capítulo provee un vistazo en los elementos primarios y constructores del lenguajeOpenOffice.org Basic, también el ambiente en el que estas aplicaciones y librerías estánorientadas al OpenOffice.org Basic.

Un vistazo de la programación enOpenOffice.org Basic.

OpenOffice.org Basic es un lenguaje interpretado. A diferencia de C++ o TurboPascal, elcompilador de OpenOffice.org Basic no crea un ejecutable o archivos autoextraibles capacesde ejecutarse automáticamente. En cambio, puede ejecutar un programa en OpenOffice.orgBasic al presional un botón. El código es primero verificado de errores obvios y ejecutadolínea por línea.

Líneas de programaciónEl Interprete de Basic está orientado a la ejecución de líneas y esto es una diferencia primariaentre Basic y otros lenguajes de programación. Mientras la posición de puntos deinterrupción en el código fuente de Java, C++ o Delphi es irrelevante, cada línea de código enun programa Basic es una unidad auto-contenida. Las llamadas a funciones, expresionesmatemáticas, u otros elementos lingüisticos, como las funciones y encabezados de ciclos,pueden ser completados en la misma línea en la que empezaron.

Si no hay suficiente espacio, o resulta en líneas muy largas, entonces varias líneas pueden serunidas al agregar rayabajos _ (underscore). El siguiente ejemplo muestra cómo cuatro líneasde una expresión matemática pueden ser unidas:

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 14: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

LongExpressión = (expresion1 + expresion2 ) + _(expresion3 + expresion4 ) + _(expresion5 + expresion5 ) + _(expresion6 + expresion7 )

La rayabajo debe ser siempre el último carácter de la línea unida y no debe ir seguida de unespacio o tabulación, de lo contrario el código generará un error.

Adicionalmente a unir líneas individuales, OpenOffice.org Basic, puede usar dos puntos (:)para dividir una línea en cada sección si hay espacio suficiente para cada expresión. Lasasignaciones:

a = 1a = a + 1a = a + 1

Puede ser escrita como sigue:

a = 1 : a = a + 1 : a = a + 1

ComentariosAdicionalmente al código del programa que puede ser ejecutado, la programación enOpenOffice.org Basic puede contener comentarios que expliquen partes individuales delprograma y proveer más información que puede ser de ayuda para puntos posteriores.

OpenOffice.org Basic provee dos métodos para insertar comentarios en el código delprograma:

• Todas las letras que sigan a un apóstrofe (') son tratadas como comentarios:

Dim A 'Este es un comentarios para la variable A

• La palabra clave rem, seguida por el comentario:

Rem Este comentario está dentro de la palabra clave Rem

Un comentario usualmente incluye todos los caracteres desde el inicio hasta el final de lalínea. OpenOffice.org Basic interpreta la siguiente línea como una instrucción normal denuevo. Si un comentario cubre varias líneas, cada línea debe ser identificada como uncomentario:

Dim B ' Este comentario para la variable B es algo' largo y comprende varias líneas. El' carácter de comentario deberá ser repetido' en cada línea.

MarcadoresUn programa de OpenOffice.org Basic puede contener, docenas, cientos y hasta algunosmiles de marcadores, los cuales son nombres de variables, constantes, funciones y demás.

Cuando seleccione un nombre para un marcador, se aplicarán las siguientes reglas:

• Los marcadores sólo pueden contener letras latinas, números y rayabajo (_).

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 15: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• El tamaño máximo de un marcador es de 255 caracteres.

• No hay distinción entre mayúsculas y minúsculas. El marcador OneTestVariable, porejemplo, define la misma variable para onetestvariable y ONETESTVARIABLE.

Sin embargo hay una excepción a esta regla: hay una distición hecha entre mayúsculas yminúsculas para las constantes UNO-API. Más información acerca de UNO es presentadaen el capítulo 4.

Las reglas de marcadores son diferentes para OpenOffice.org Basic y VBA. Por ejemplo, OpenOffice.orgBasic no permiten caracteres especiales en los marcadores, porque pueden presentar problemas enproyectos internaciones.

Algunos ejemplos de marcadores correctos e incorrectos:

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

Trabajado con variables

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

a = b + c

Declarar variables implícitamente no es una buena práctica de programación porque puederesultar en la introducción de una nueva variable como resultado de un error tipográfico. Enlugar de generar un error, el intérprete inicializa el error tipográfico como una nueva variablecon un valor de 0. Puede ser bastante dificil encontrar errores de esta naturaleza en su código.

Declaración explícita de variablesPara prevenir errores causadas por la declaración implícita de variables, OpenOffice.orgBasic provee una instrucción llamada:

Option Explicit

Esto debe ser la primera línea de programa de cada módulo y asegura que un mensaje deerror será desplegado si una de las variables usadas no está declarada. La instrucciónOption Explicit debe ser incluida en todos los módulos de Basic.

En su forma más simple, el comando para una declaración explícita de una variable es:

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 16: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Dim MiVariable

Este ejemplo declara una variable con el nombre de MiVariable y del tipo Variant. Untipo Variant en una variable universal que puede grabar todos los valores posibles,incluyéndo cadenas (string), números, figuras de punto flotante, y valores boleanos(boolean). Aquí hay algunos ejemplos de variables Variant:

MiVar = "Hola Mundo!" ' Asigna una cadena.MiVar = 1 ' Asigna un número.MiVar = 1.0 ' Asigna un número de punto flotante.MiVar = True ' Asigna un valor boleano.

Las variables declaradas en el ejemplo anterior pueden ser usadas para diferentes tipos devariables en el mismo programa. Aunque esto provee una flexibilidad considerable, es mejorrestringir una variable a un solo tipo de variable. Cuando OpenOffice.org Basic encuentrauna variable de un tipo incorrectamente definido en un contexto particular, un mensaje deerror es generado.

Use el siguiente estilo cuando desee hacer una declaración de una variable de un tipoespecífico:

Dim MiVar As Integer ' Declara una variable del tipo entero.

La variable es declarada como un entero y no puede registrar cualquier tipo de números.También puede usar el siguiente estilo para declarar una variable del tipo entero:

Dim MiVar%' Declara una variable del tipo entero.

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

Dim MiVar1, MiVar2

Si desea asignar a las variables un tipo permanente, debe separar las definiciones para cadavariable:

Dim MiVar1 As Integer, MiVar2 As Integer

Si no desea declarar el tipo para cada variable, OpenOffice.org Basic asigna el tipoVariant a cada variable. Por ejemplo, en la siguiente declaración de de variables, MiVar1llegará a ser Variant y MiVar2 llegará a ser Integer (Entero).

Dim MiVar1, MiVar2 As Integer

Las siguientes secciones listan los tipos de variables que están disponibles en OpenOffice.orgBasic y describe como pueden ser usadas y declaradas.

Cadenas (string)Cadenas, junto con los números, forma uno de los tipos más importantes y básicos deOpenOffice.org Basic. Una cadena consiste en una secuencia consecutiva de caracteresindividuales. La computadora salva internamente como una secuencia de números dondecada número representa un carácter especifico.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 17: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

De un conjunto de caracteres ASCII a UnicodeLos conjuntos de caracteres en una cadena concuerdan con el código correspondiente(números y caracteres) en una tabla que describe como la computadora desplegará la cadena.

Conjunto de caracteres ASCIIEl conjunto de caracteres ASCII es un juego de caracteres que representan números,caracteres, y símbolos especiales en un byte. Los códigos ASCII 0 a 127 corresponden alalfabeto y los símbolos comunes (como puntos, paréntesis y comas), también y algunoscódigos especiales de pantalla e impresora. El conjunto de caracteres ASCII es el máscomúnmente usado para transferir datos entre computadoras.

Sin embargo, este conjunto de caracteres no incluye un rango de caracteres especiales usadosen Europa, como â, ä y î, asi como otros formatos de caracteres, como el alfabeto Cirílico.

Conjunto de caracteres ANSIMicrosoft baso sus productos Windows en el conjunto de caracteres del Instituto AmericanoNacional de Standares (ANSI1), el cual fue gradualmente extendido para incluir los caracteresque fueron omitidos por el conjunto de caracteres ASCII.

Códigos de páginaEl conjunto de caracteres ISO8859 provee un standar internacional. Los primeros 128caracteres del conjunto ISO corresponden al conjunto de caracteres ASCII. El standar ISOintroduce nuevos conjuntos de caracteres (Códigos de página) de esta manera más lenguajespueden ser correctamente desplegados. Sin embargo, como un resultado, el mismo valor delcarácter puede representar diferentes caracteres en diferentes lenguajes.

UnicodeUnicode incrementa el tamaño de un carácter a cuatro bytes y combina diferentes conjuntosde caracteres para crear un standar que se ajuste al mayor número de lenguajes del mundo. Laversión 2.0 de Unicode está soportada por muchos programas – incluyéndo OpenOffice.org yOpenOffice.org Basic.

Variables de cadenasOpenOffice.org Basic salva las cadenas como cadenas de variables en Unicode. Una variablede cadena puede guardar más de 65535 caracteres. Internamente, OpenOffice.org Basic salvael valor Unicode asociado a cada carácter. La memoria de trabajo necesaria para cadavariable de cadena depende del tamaño de la cadena.

Ejemplo de una declaración de variable de cadena:

Dim Variable As String

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

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

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 18: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Dim Variable$

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

Especificación de cadenas específica.Para asignar una cadena específica a una variable de cadena, encierre la cadena en comillasdobles (").

Dim MiCadena As StringMiCadena = "Esto es una prueba"

Para dividir una cadena en dos líneas, agregue un signo de más al final de la primera línea:

Dim MiCadena As StringMiCadena = "Esta cadena es tan larga que " + _

"que se dividió en dos líneas."

Para incluir una comilla doble (“) dentro de una cadena, ingresela doble en el punto en quedesea que aparezca:

Dim MiCadena As StringMiCadena = "una ""- comilla doble" ' produce una "- comilla doble

NúmerosOpenOffice.org Basic soporta cinco tipos básicos para procesar números.

• Enteros (Integer)

• Entero Largo (Long Integer)

• Flotante (Float)

• Doble (Double)

• Moneda (Currency)

Variables de enterosLas variables de enteros pueden guardar cualquier número entre -32768 y 32768. Unavariable de entero puede tomar dos bytes de memoria. El símbolo de tipo de declaración es%. Los cálculos para usar las variables de enteros son muy rápidas y son particularmenteútiles para contadores de ciclos. Si asigna un número de punto flotante a una variable deentero, el número será redondeado hacia arriba o hacia abajo al entero más cercano.

Ejemplo de declaración para variables de enteros:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 19: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim MiVar As IntegerDim MiVar%

Variables de entero largoLas variables de entero largo pueden guardar cualquier número entre -2147483648 y2147483648. Una variable de entero largo puede tomar cuatro bytes de memoria. El símbolodel tipo de declaración es &. Los cálculos con variables de enteros largos son muy rápidos yson particularmente útiles para contadores de ciclos. Si asigna un número de punto flotante auna variable de entero largo, el número es redondeado hacia arriba o hacia abajo al enteromás cercano.

Ejemplos de declaraciones de enteros largos

Dim Variable As LongDim Variable&

Variables sencillasLas variables sencillas pueden guardar cualquier número de punto flotante positivo onegativo entre 3.402823 x 1038 y 1.401298 x 10-45. Una variable sencilla puede tener cuatrobytes de memoria. El símbolo del tipo de declaración es !.

Originalmente, las variables sencillas fueron usadas para reducir el tiempo para calcularnúmeros más precisos de las variables dobles. Sin embargo, las consideraciones de velocidadya no se aplican, reduciendo la necesidad de las variables sencillas.

Ejemplos de declaraciones de variables sencillas.

Dim Variable As SingleDim Variable!

Variables doblesLas variables dobles pueden guardar cualquier número positivo o negativo de punto flotanteentre 1.79769313486232 x 10308 y 4.94065645841247 x 10-324. Una variable doble puede tenerocho bytes de memoria. Las variables dobles son usadas para cálculos más precisos. Elsímbolo para el tipo de declaración es #.

Ejemplos de declaraciones de variables dobles:

Dim Variable As DoubleDim Variable#

Variables de monedaLas variables de moneda difieren de las demás por la forma en que maneja los valores. Elpunto decimal es fijo y está limitado a cuatro posiciones decimales. La variable puedecontener más de 15 números después del punto decimal. Puede guardar cualquier valor entre–922337203685477.5808 y +922337203685477.5807 tomando ocho bytes de memoria. Elsímbolo para el tipo de declaración es @.

Las variables de moneda son más usadas para cálculos de negocios que evitan redondeos no

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 20: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

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

Ejemplo de declaraciones de variables de moneda:

Dim Variable As CurrencyDim Variable@

Especificación explícita de númerosLos números pueden ser representados de muchas maneras, por ejemplo, en formato decimalo en notación científica, o en cualquier base diferente al sistema decimal. Las siguientesreglas aplican a los caracteres numéricos en OpenOffice.org Basic:

Números enterosEl método más simple es trabajar con cualquier número entero. Estos son listados en el textofuente sin los separadores de miles:

Dim A As IntegerDim B As Float

A = 1210B = 2438

Los números pueden estar precedidos por el signo positivo (+) y/o negativo (-) (con o sinespacios en medio):

Dim A As IntegerDim B As Float

A = + 121B = - 243

Números decimalesCuando use un número decimal, use el punto (.) como separador de punto decimal. Esta reglaasegura que los textos fuentes pueden ser transferidos de un país a otro sin necesidad deconversión.

Dim A As IntegerDim B As IntegerDim C As Float

A = 1223.53 ' Es redondeadoB = - 23446.46 ' Es redondeadoC = + 3532.76323

También puede usar los signos positivos (+) o negativo (-) antes de los números decimales.(de nuevo, con o sin espacios).

Si un número decimal es asignado a una variable entera, OpenOffice.org Basic redondea elnúmero hacia arriba o hacia abajo.

Estilo de escritura exponencialOpenOffice.org Basic permite que los números sean escritos en el estilo de escrituraexponencial, por ejemplo, puede escribir 1.5e-10 para el número 1.5 × 10-10 (0.00000000015).La letra “e” puede ser en mayúsculas o en minúsculas con o sin el signo positivo (+) comoprefijo.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 21: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Aquí hay unos cuantos ejemplos correctos o incorrectos del formato exponencial:

Dim A As Double

A = 1.43E2' CorrectoA = + 1.43E2 ' Correcto (espacio entre el positivo y el número)A = - 1.43E2 ' Correcto (especio entre el negativo y el número)A = 1.43E-2 ' Correcto (exponente negativo)

A = 1.43E -2 'Incorrecto (No se permiten espacios en el número)A = 1,43E-2 'Incorrecto (La coma no es separador decimal)A = 1.43E2.2 'Incorrecto (Exponente debe ser un número simple)

Nótese que los ejemplos incorrectos primero y tercero no generarán mensaje de error, sinoque las variables tendrán valores incorrectos. La expresión

A = 1.43E -2

es interpretada como 1.43 menos 2, que corresponde al valor -0.57. Sin embargo, el valor1.43 * 102 (correspondiente a 0.0143) fue el valor que se buscaba. Con el valor:

A = 1.43E2.2

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

A = 1.43E2

Valores hexadecimalesEn el sistema hexadecimal (sistema base 16), un número de dos dígitos correspondeprecisamente a un byte. Esto permite que los números sean manejados de una manera querefleja de una forma más cercana la arquitectura de la computadora. En el sistemahexadecimal, los números del 0 al 9 y las letras de la A a la F son usadas como números. UnaA es el standard para el número decimal 10, mientras la F representa el número decimal 15.OpenOffice.org Basic le permite usar los valores hexadecimales, si están precedidos por &H.

Dim A As Long

A = $HFF ' Valor hexadecimal para el número decimal 255A = $H10 ' Valor hexadecimal para el número decimal 16

Valores octalesOpenOffice.orgOpenOffice.org Basic también entiende el sistema octal (sistema base 8), elcual usa los números del 0 al 7. Puede representar estos números son el prefijo &O.

Dim A As Long

A = &O77 ' Valor octal para el número decimal 63A = &O10 ' valor octal para el número decimal 8

Falso y verdadero

Variables boleanasLas variables boleanas sólo pueden contener dos valores: Verdadero o Falso. Son útilespara especificaciones binarias que solamente pueden adoptar dos estados. Un valor boleano

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 22: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

en guardado internamente como un entero de dos bytes, donde 0 corresponde a Falso ycualquier otro valor corresponde a Verdadero. No hay simbolo de declaración para lasvariables boleanas. La declaración puede realizarse simplemente usando As Boolean.

Ejemplo de una declaración de una variable boleana:

Dim Variable As Boolean

Detalles sobre la hora y la fecha

Variables de fechaLas 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 operacionesmatemáticas en los valores de hora y fecha. No hay símbolo de declaración para las variablesde fecha. La declaración puede realizarse usando el suplemento As Date.

Ejemplo de una declaración de variable de fecha:

Dim Variable As Date

Campos de datosAdicionalmente a las variables simples (scalars), OpenOffice.org Basic soporta tambiéncampos de datos (arrays2). Un campo de datos contiene varias variables, las cuales puedenser direccionadas atraves de un índice.

Matrices simplesLa declaración de una matriz es similar a la declaración de una variable simple. Sin embargo,a diferencia de la declaración de la variable, el nombre de la matriz está seguido de paréntesisque contiene la especificación del número de elementos. La expresión:

Dim MiMatriz(3)

declara una matriz con cuatro variables del tipo Variant, llamadas MiMatriz(0),MiMatriz(1), MiMatriz(2), MiMatriz(3).

También se pueden declarar variables de un tipo específico para una matriz. Por ejemplo, lasiguiente línea declara una matriz con cuatro elementos enteros:

Dim MiMatriz(3) As Integer

En los ejemplos previos, el índice para la matriz siempre inicia con el valor standar de cero.Como una alternativa, un rango de validación con valores de inicio y final pueden serespecificados en la declaración deñ campo de datos. El siguiente ejemplo declara un campode datos con seis valores enteros que pueden ser direccionados usando los índices del 5 al 10:

2 N.T. El término en español es arreglos o matrices. Arreglos es una traducción más literal y matrices es unatraducción que corresponde más al concepto matemático. Usaremos matrices de ahora en adelante.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 23: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim MiMatriz(5 to 10)

Los índices no necesitan ser valores positivos. El siguiente ejemplo también muestra unaforma correcta de declaración, pero con límites del campo de datos negativos:

Dim MiMatriz(-10 to -5)

Declara un campo de datos del tipo entero con seis valores que pueden ser direccionadosusando los índices -10 al -5.

Hay tres límites que debe observar cuando defina los índices de los campos de datos:

• El índice más pequeño posible es -32768.

• El índice más grande posible es 32767.

• El número máximo de elementos (dentro de una dimensión de campo de datos) es 16368.

Otros valores de limites aplican para los índices de datos en VBA. Lo mismo aplica al máximo número deelementos posibles por dimensión. Los valores válidos pueden ser encontrados en la documentaciónrelevante a VBA.

Especificando un valor para el índice inicialEl índice inicial usualmente inicia con el valor 0. Alternativamente, puede cambiar el índiceinicial para todas las declaraciones de campos de datos al valor de 1 usando la siguientellamada:

Option Base 1

La llamada puede ser incluida en el encabezado de un módulo si desea que se aplique entodas las declaraciones de matrices en el módulo. Sin embargo, esto no afecta las secuenciasUNO que estén definidas por medio del API de OpenOffice.org, cuyos índices siempreinician con 0. Para no afectar la claridad, debería evitar el uso del Option Base 1.

El número de elementos en una matriz no es afectado si usa Option Base 1, solamente elíndice inicial cambia. La declaración:

Option Base 1' ...Dim MiMatriz(3) As Integer

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

En OpenOffice.org Basic, la expresión Option Base 1 no afecta el número de elementos en un arreglo,como si sucede en VBA. Es el índice inicial el que se mueve en OpenOffice.org Basic. Mientras que ladeclaración MiMatriz(3) crea tres valores enteros en VBA con los índices del 1 al 3, la misma declaraciónen OpenOffice.org Basic crea cuatro valores enteros con los índices del 1 al 4.

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

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 24: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Dim MiMatrizInt(5, 5)

define una matriz del tipo entero con dos dimensiones, cada una con 6 índices (que puedenser direccionados del 0 al 5). La matriz completa puede grabar un total de 6 x 6 = 36 valoresenteros.

Aunque puede definir cientos de dimensiones de matrices en OpenOffice.org Basic; sinembargo, la cantidad disponible de memoria limita el número de dimensiones que puedetener.

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

ReDim MiMatriz(10)

A diferencia de VBA, donde puede solo dimensionar matrices dinámicas por el uso de Dim MiMatriz(),OpenOffice.org Basic le permite cambiar matrices dinámicas y estáticas con el uso de ReDim.

El siguiente ejemplo cambia las dimensiones de la matriz inicial de manera que puedaguardar 11 o 21 valores:

Dim MiMatriz(4) As Integer 'Declaración con cinco valores

'...

Redim MiMatriz(10) As Integer 'Incrementa a 11 elementos

'...

Redim MiMatriz(20) As Integer 'Incrementa a 21 elementos

Cuando restaura las dimensiones de una matriz, puede usar cualquiera de las opcionespresentadas en las secciones previas. Esto incluye campos de datos multi-dimensionales yespecificar los valores de inicio y final. Cuando las dimensiones de un campo de datos soncambiados, todo su contenido se pierde. Si desea mantener los valores originales, use elcomando Preserve:

Dim MiMatriz(10) As Integer 'Define la dimensión inicial

' ...

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

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 25: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

A diferencia de VBA, donde solamente el límite superior de la última dimensión puede ser cambiado pormedio de Preserve, OpenOffice.org Basic le permite cambiar las otras dimensiones también.

Si usa Redim con Preserve, debe usar el mismo tipo de datos que el especificado en la declaración originaldel campo de datos.

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

Variables localesLas variables que son declaradas en una función o procedimiento son llamadas variableslocales.

Sub PruebaDim MiVar As Integer

' ...End Sub

Las variables locales solamente permanecen el tiempo en que se ejecuta la función o elprocedimiento, y luego son puestas de nuevo en cero. Cada vez que la función es llamada, losvalores que fueron generados anteriormente ya no están disponibles.

Para mantener los valores previos, puede definir una variable como Static:

Sub PruebaStatic MiVar As Integer

' ...End Sub

A diferencia de VBA, OpenOffice.org Basic se asegura que el nombre de una variable local no es usadasimultáneamente como global y privada en el encabezado del módulo. Cuando porte aplicaciones VBA aOpenOffice.org Basic, debe cambiar los nombres de variables duplicados.

Variables públicasLas variables públicas son definidas en la sección del encabezado de un módulo con lapalabra clave Dim. Estas variables están disponibles para todos los módulos de su librería.

Módulo A

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 26: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Dim A As Integer

Sub PruebaFlipFlop

En Sub

Sub FlipA = A + 1

En Sub

Módulo B

Sub FlopA = A – 1

End Sub

El valor de la variable A no es cambiado en la función Prueba, pero es incrementado en lafunción Flip y decrementado en la función Flop. Ambos cambios son hechos a la variablepública.

También puede usar la palabra clave Public en lugar del Dim para declarar variablespúblicas:

Public A As Integer

Las variables públicas solamente están disponibles a la macro que están asociadas durante suejecución y luego la variable es restaurada.

Variables globalesEn cuanto a su función, las variables globales son similares a las variables públicas, exceptoque sus valores son retenidos aún después de que la macro ha sido ejecutada. Las variablesglobales son definidas en el encabezado del módulo usando la palabra clave Global:

Global A As Integer

Variables privadasLas variables privadas están solo disponibles en el módulo en el cual está definida. Use lapalabra clave Private para definir la variable:

Private MiEntero As Integer

Si varios módulos contienen variables privadas con el mismo nombre, OpenOffice.org Basiccrea una variable diferente para cada ocurrencia del nombre. En el siguiente ejemplo, ambosmódulos A y B tienen una variable privada llamada C. La función Prueba define unavariable privada en el módulo A y una privada en el módulo B.

Módulo A:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 27: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Private C As Integer

Sub PruebaAsigModuloA ' Asigna la variable C del módulo AAsigModuloB ' Asigna la variable C del módulo B

MuestraVarA ' Muestra la variable C del módulo AMuestraVarB ' Muestra la variable C del módulo B

End Sub

Sub AsigModuloAC = 10

End Sub

Sub MuestraVarAMsgbox C

End Sub

Módulo B:

Private C As Integer

Sub AsigModuloBC = 10

End Sub

Sub MuestraVarBMsgbox C

End Sub

ConstantesEn OpenOffice.org Basic, use la palabra clave Const para declarar una constante:

Const A = 10

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

Const B As Double = 10

OperadoresOpenOffice.org Basic comprende los operadores matemáticos, lógicos, y de comparación.

Operadores matemáticasLos operadoras matemáticos pueden ser aplicados a todos los tipos numéricos, sin embargo,el operador + puede ser también usado para concatenar cadenas.

+ Suma de números y valores de fecha, concatenar cadenas.

- Resta de números y valores de fecha.

* Multiplicación de números.

/ División de números.

\ División de números con números enteros (redondeo)

^ Elevación a exponente.

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 28: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

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

Operadores lógicosLos operadores lógicos permiten concatenar elementos de acuerdo al álbegra boleana. Si losoperadores son aplicados sobre valores boleanos, el vínculo provee el resultado ruqueridodirectamente. Si lo usa en conjunto con valores enteros y entero largo, el vínculo será hecho anivel de bits.

AND vínculo AND

OR vínculo OR

XOR Vínculo OR exclusivo.

NOT Negación

EQV prueba equivalente (ambas partes Verdadero o Falso)

IMP Implicación (Si la primera parte es verdadera, entonces la segunda parte también debeser verdadera)

Operadores de comparaciónLos operadores de comparación pueden ser aplicados a todos los tipos de variableselementales (números, fecha, cadenas, y valores boleanos)

= Igualdad entre fechas, números y cadenas.

<> Diferencia entre fechas, números y cadenas.

> Mayor que para números, fechas y cadenas.

>= Mayor que o igual para números, fechas y cadenas.

< Menor que para números, fechas y cadenas.

<= Menor que o igual para números, fechas y cadenas.

OpenOffice.org Basic no soporta el operador Like de VBA

Control de flujoLas instrucciones de control de flujo restringen la ejecución de bloques de código mientrasuna condición particular sea satisfecha.

If ... Then ... ElseLa instrucción más común del control de flujo es la instrucción If, como se muestra en elsiguiente ejemplo:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 29: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

If A > 3 ThenB = 2

End If

La asignación B = 2 solamente ocurre cuando el valor de la variable A es mayor que tres.Una variación de la instrucción If es la cláusula If/Else:

If A > 3 ThenB = 2

ElseB = 0

End If

En este ejemplo, la variable B es asignada al valor 2 cuando A es mayor que 3, de otra formaa B le es asignado el valor 0.

Para instrucciones más complejas, puede hacer cascadas de la instrucción If, por ejemplo:

If A = 0 ThenB = 0

ElseIf A < 3 ThenB = 1

ElseB = 2

End If

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

Select ... CaseLa instrucción Select ... Case es una alternativa a la instrucción If en cascada y esusada cuando necesita verificar un valor contra varias condiciones.

Select Case DiaSemanaCase 1:

Nombre = "Domingo"Case 2:

Nombre = "Lunes"Case 3:

Nombre = "Martes"Case 4:

Nombre = "Miércoles"Case 5:

Nombre = "Jueves"Case 6:

Nombre = "Viernes"Case 7:

Nombre = "Sábado"End Select

En este ejemplo, el nombre del día de la semana corresponde a un número, de manera que lavariable Nombre se le asigna el valor de “domingo” para el valor de 1, “Lunes” para el valorde 2, y así consecutivamente.

El comando Select no está restringido a asignaciones simples de 1:1 – También puedeespecificar operadores de comparación o listas de expresiones en el control de flujo Case. Elsiguiente ejemplo muestra las variaciones de sintaxis más importantes.

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 30: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Select Case VarCase 1 To 5

' ...Var está entre los números 1 y cinco

Case 6, 7, 8

' ...Var es 6, 7, u 8

Case Var > 8 And Var < 11

' ...Var es mayor que 8 y menor que 11

Case Else

' Cualquier otra ocurrencia

End Select

CiclosUn ciclo ejecuta un bloque de código el número de pasos que sea especificado. Tambiénpueden definirse ciclos con un número indeterminado de pasos.

For ... NextEl ciclo For ... Next tiene un número fijo de pasos. El contador de ciclos define elnúmero de veces que el ciclo será ejecutado. En el siguiente ejemplo,

Dim I

For I = 1 to 10

' ... Parte central del ciclo

Next I

la variable I es el contador de ciclo, con un valor inicial de 1. El contador es incrementado enuno al final de cada paso. Cuando la variable I sea igual a 10, el ciclo se detiene.

Si desea incrementar el contador de ciclos en otro valor distinto de 1 al final de cada paso,use la función Step:

Dim I

For I = 1 To 10 Step 0.5

' ... Parte central del ciclo.

Next I

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

También puede usar valores de pasos negativos:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 31: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim I

For I = 10 to 1 Step -1

' ... Parte central del ciclo.

Next I

En este ejemplo, el contador inicia con 10 y el valor es reducido en uno en cada paso, hastaque el contador es 1.

La instrucción Exit For le permite salir de un ciclo For prematuramente. En el siguienteejemplo, el ciclo es terminado en el quinto paso:

Dim I

For I = 1 To 10

If I = 5 ThenExit 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 ... LoopEl Do ... Loop no está vinculado a un número determinado de pasos. En cambio, elDo ... Loop es ejecutado hasta que cierta condición sea cumplida. Hay cuatro variantesdel Do ... Loop (en el siguiente ejemplo, A > 10 representa cualquier condición):

1. Variante Do ... Loop

Do While A > 10 ' Cuerpo del cicloLoop

verifica que la condición sea satisfecha antes de cada paso y sólo después se ejecuta elciclo.

2. Variante Do Until ... Loop

Do Until A > 10 'Cuerpo del cicloLoop

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

3. Variante Do ... Loop While

Do 'Cuerpo del cicloLoop While A > 10

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

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 32: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

4. Variante Do ... Loop Until

Do ' Cuerpo el cicloLoop Until A > 10

También verifica su condición despues del primer paso, pero trabaja el ciclo hasta que lacondición no sea satisfecha.

Como en los ciclo For ... Next, el Do ... Loop también está provisto de unainstrucción de terminación.El comando Exit Do puede hacer salir del ciclo en cualquierpunto dentro del ciclo.

DoIf A = 4 Then

Exit DoEnd If

' Cuerpo del cicloWhile A > 10

Ejemplo de programación: Ordenando con ciclos anidados.Hay muchas formas de usar ciclo, por ejemplo, para buscar en listas, valores de retorno, opara ejecutar tareas matemáticas complejas. El siguiente ejemplo es un algoritmo que usa losciclos para ordenar una lista de nombres:

Sub OrdenDim Entrada(1 To 10) As StringDim Contador As IntegerDim Contador2 As IntegerDim Temp As String

Entrada(1) = "Patricia"Entrada(2) = "José"Entrada(3) = "Tomás"Entrada(4) = "Miguel"Entrada(5) = "David"Entrada(6) = "Consuelo"Entrada(7) = "Susana"Entrada(8) = "Eduardo"Entrada(9) = "Cristina"Entrada(10) = "Juan"

For Contador = 1 To 10For Contador2 = 1 To 10

If Entrada(Contador) > Entrada(Contador2) ThenTemp = Entrada(Contador)Entrada(Contador) = Entrada(Contador2)Entrada(Contador2) = Temp

End IfNext Contador2

Next Contador

For Contador = 1 To 10Print Entrada(Contador)

Next ContadorEnd Sub

Los valores son intercambiados en pares tantas veces mientras sean ordenados en ordenascendente. Como las burbujas, los valores gradualmente van emigrando a la posición

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 33: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

correcta. Por esta razón, este algoritmo es conocido como 3.

Procedimientos y funcionesLos procedimientos y funciones son puntos fundamentales de la estructura de un programa.Proveen la estructura para dividir problemas complejos en varias sub-tareas.

ProcedimientosUn procedimiento ejecuta una acción práctica sin proveer un valor explícito. Su sintaxis es:

Sub Prueba' aquí coloca el código del procedimiento

End Sub

El ejemplo define un procedimiento llamado Prueba y contiene el código que puede seraccesado desde cualquier punto del programa. La llamada es hecha al ingresar el nombre delprocedimiento en cierto punto del programa:

' ... código del programaPrueba' ... código del programa

FuncionesUna función, como un procedimiento, combina un bloque de programas para que seanejecutados como una unidad lógica. Sin embargo, a diferencia del procedimiento, unafunción retorna un valor.

Function Prueba

' ... aquí va el código de esta función

Prueba = 123End Function

El valor de retorno es asignado usando una simple asignación. La asignación nonecesariamente tiene que estar ubicada al final de la función, puede ser hecha en cualquierlugar de la función.

La función precedente puede ser llamada dentro de un programa de la siguiente manera:

Dim A

A = Prueba

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

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

3 N.T. Deje la expresión en inglés, porque muchos libros de informática conocen este algoritmo con este nombre,aun las traducciones al español. La traducción sería ordenamiento de burbuja.

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 34: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

Function Prueba

Prueba = 12

'...

Prueba = 123End Function

En este ejemplo, el valor de retorno es 123.

Si una asignación es detenida, la función retorna un valor cero (Número 0 para valoresnuméricos y un blanco para cadenas).

El valor de retorno de una función puede ser de cualquier tipo. El tipo es declarado de lamisma manera que una variable:

Function Prueba As Integer

' ... Código de la función

End Function

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

Terminando procedimientos y funciones prematuramenteEn OpenOffice.org Basic, puede usar los comandos Exit Sub y Exit Function paraterminar un procedimiento o una función prematuramente, por ejemplo, para el manejo deerrores. Estos comandos detienen el procedimiento o la función y regresar el programa en elpunto en el cual el procedimiento o función fue llamado.

El siguiente ejemplo muestra como termina la implementación cuando la variableOcurrioError tiene el valor de Verdadero.

Sub PruebaDim OcurrioError As Boolean

' ...

If OcurrioError ThenExit Sub

End If

' ...

End Sub

Pasando parámetrosLas funciones y procedimientos pueden recibir uno o más parámetros. Los parámetros debenser encerrados entre paréntesis después del nombre de la función o procedimiento. Elejemplo:

Sub Prueba (A As Integer, B As String)End Sub

define un procedimiento que espera un entero para A y una cadena para B como parámetros.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 35: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Normalmente los parámetros en OpenOffice.org Basic son pasados por . Loscambios hechos a las variables son retenidos cuando la función o el procedimiento haterminado.

Sub PruebaDim A As IntegerA = 10CambiaValor(A)' El parámetro A ahora tiene el valor de 20

End SubSub CambiaValor(ElValor As Integer)

ElValor=20End Sub

En este ejemplo, el valor A que está definido en la función Prueba, es pasado como unparámetro en la función CambiaValor. El valor en cambiado a 20 y pasado a ElValor, elcual es retenido cuando se sale de la función.

También se puede pasar un parámetro como un si no desea los cambios subsecuentesque afectan al valor originalmente pasado del parámetro. Para especificar que un parámetroes pasado como valor, asegurese que la palabra clave ByVal precede la declaración de lavariable en el encabezado de la función.

En el ejemplo anterior, si reemplazamos la función CambiaValor con:

Sub CambiaValor(ByVal ElValor As Integer)ElValor=20

End Sub

la variable A permanece sin afectarse por este cambio. Después de llamar a la funciónCambiaValor, la variable A mantiene el valor de 10.

El método de pasar parámetros a los procedimientos y funciones es virtualmente identico a VBA. Pordefecto, los parámetros son pasados por referencia. Para pasar los parámetros como valores, use lapalabra clave ByVal. En VBA, deberá también usar la palabra clave ByRef para forzar que un parámetrosea pasado por referencia. OpenOffice.org Basic no soporta esta palabra clave porque ya es unprocedimiento por defecto en OpenOffice.org Basic.

Como una regla, funciones y procedimientos en OpenOffice.org Basic son públicos. Las palabras clavesPublic y Private usadas en VBA no son soportadas en OpenOffice.org Basic.

Parámetros opcionalesLas funciones y procedimientos solamente pueden ser llamados cuando todos los parámetrosnecesarios son pasados durante la llamada.

OpenOffice.org Basic le permite definir parámetros como , esto es, si el parámetrocorrespondiente no está incluido dentro de la llamada, OpenOffice.org Basic lo pasa como unparámetro vacío. En el ejemplo:

Sub Prueba(A As Integer, Optional B As Integer)

End Sub

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

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 36: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

La función IsMissing verifica cuando un parámetro ha sido pasado y cuando está ausente.

Sub Prueba(A As Integer, Optional B As Integer)Dim B_Local As Integer

' Verifica si el parámetro B está presente.If Not IsMissing (B) Then

B_Local = B ' Parámetro B está presente.Else

B_Local = 0 ' Parámetro B no está. 0 es el valor por defectoEnd If' código de la función

End Sub

El ejemplo primero verifica cuando el parámetro B ha sido pasado y, si es necesario, pasa elmismo valor a la variable interna B_Local. Si el parámetro correspondiente no está presente,entonces un valor por defecto (en este caso, el valor 0) es pasado a B_Local en lugar delparámetro pasado.

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

La palabra clave ParamArray presente en VBA no está soportada en OpenOffice.org Basic.

Manejo de erroresEl correcto manejo de las situaciones de errores es una de las tareas que más tiempo deprogramación consumen. OpenOffice.org Basic provee un rango de tareas para simplificar elmanejo de errores.

La Instrucción On ErrorLa instrucción On Error es la llave para cualquier manejo de errores:

Sub PruebaOn Error Goto ManejoError

' Tareas en las que puede ocurrir un error.

Exit Sub

ManejoError:'Código individualizado para el manejo del error.

End Sub

La línea On Error Goto ManejoError define cómo OpenOffice.org Basic procede enun evento de error. El Goto ManejoError asegura que OpenOffice.org Basic salga de laactual línea de programación y luego ejecute el código en ManejoError:

El comando ResumeEl comando Resume Next continúa el programa en el línea siguiente a la que ocurrió elerror en el programa después del código en el manejador de errores ha sido ejecutado:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 37: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

ManejoError:' ... código para el manejo del error.

Resume Next

Use el comando Resume Proceed para especificar un punto de salto para continuar elprograma después del manejo de errores:

ManejoError:' ... código para el manejo del error.

Resume Proceed

Proceed:

' El programa continúa aquí después del error.

Para continuar el programa sin ningún mensaje cuando ocurre un error, use el siguienteformato:

Sub PruebaOn Error Resume Next' Tareas en las que puede ocurrir un error.

End Sub

use el comando On Error Resume Next con cuidado porque sus efectos son globales.Para más información, vea

Consultas referentes a la información de erroresEn el manejo de errores, es útil tener descripción del error, cómo, cuando y por qué ocurre elerror:

• La variable Err contiene el número de errores que han ocurrido.

• La variable Error$ contiene una descripción del error.

• La variable Erl contiene la línea en la cual ocurrió el error.

La llamada

MsgBox "Error " & Err & ": " & Error$ & " (línea : " & Erl & ")"

muestra cómo la información de error puede ser desplegada en una ventana de mensajes.

Mientras VBA sumariza los mensajes de error es un objeto estatistico llamado Err, OpenOffice.org Basicprovee las variables Err, Error$, y Erl.

El estado de la información se mantiene válida hasta que el programa encuentre un Resumeo un comando On Error, entonces la información es reseteada o restaurada.

En VBA, el método Err.clear o el objeto Err reinicia los estados del error después de que ocurre unerror. En OpenOffice.org Basic, esto se cumple con los comandos On Error o Resume.

Consejos para el manejo de errores estructuradoTanto el comando On Error, como el comando de retorno Resume, son variantes de la

Capítulo 2 El lenguaje de OpenOffice.org Basic

Page 38: Guía del programador BASIC - OpenOffice.org

Capítulo 2 El lenguaje de OpenOffice.org Basic

construcción Goto.

Si desea estructurar su código limpiamente para prevenir la generación de errores cuando usaestas construcciones, no use comandos de salto sin monitorizarlos.

Tanga cuidado cuando use el comando On Error Resume Next porque omite todos losmensajes de error emitidos.

La mejor solución es el uso de un único acceso para el manejo de errores dentro del programa– mantiene manejo de errores separado del código del programa actual y no salta de nuevo alcódigo original después de que el error ocurre.

El siguiente es un ejemplo de un procedimiento de manejo de errores:

Sub Ejemplo' Define el manejador de errores al inicio de la funciónOn Error Goto ErrorHandler

' Desactiva el manejo de erroresOn Error Goto 0

' Final de la implementación regular del programa.Exit Sub

' Inicio del manejador de erroresErrorHandler:

' Chequea cual error se esperabaIf Err = NumeroError Then

' ... Proceso de manejo del error Else

' ... Advertencia para error inesperadoEnd If

On Error Goto 0 ' Desactiva el manejador de erroresEnd Sub

Este procedimiento inicia con la definición del manejador de errores, seguido del código delprograma actual. Al final del código del programa el manejador de errores es desactivadomediante la llamada a On Error Goto 0 y la implementación del procedimientotermina con el comando Exit Sub (no se confunda con End Sub)

El ejemplo primero verifica que el número de error corresponda a un número esperado (comoel guardado en la constante imaginaria NumeroError) y que maneja el error de maneraadecuada. Si otro error ocurre, el sistema genera una advertencia. Es importante verificar elnúmero de error para que puedan ser detectados errores no anticipados.

La llamada a On Error Goto 0 al final del código restaura el estado de la información delerror (el código de error en las variables de sistema Err) de esta manera un error que ocurradespués puede ser claramente reconocido.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 39: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

La siguiente sección presenta las funciones centrales de la librería de tiempo de ejecución.

Funciones de conversiónEn muchas situaciones, las circunstancias hacen que una variable de un tipo tenga que sercambiado a una variable de otro tipo.

Conversiones de tipo implícito y explícitoLa manera más fácil de cambiar una variable de un tipo a otro es mediante el uso de unaasignación

Dim A As StringDim B As Integer

B = 101A = B

En este ejemplo, la variable A es una cadena, y la variable B es un entero. OpenOffice.orgBasic se asegura que la variable B sea convertida a una cadena durante la asignación de lavariable A. Esta conversión es mucho más elaborada de lo que parece: El entero Bpermanece en la memoria de trabajo en la forma de un byte doble de entero largo. A, encambio, es una cadena, y la computadora guarda como un o dos bytes de largo para cadacarácter (cada número). Por eso, antes de copiar el contenido de B en A, B tiene que serconvertido al formato interno de A.

A diferencia de otros lenguajes de programación, Basic realiza este tipo de conversionesautomáticamente. Sin embargo, esto puede tener consecuencias fatales. Después de unainspección detallada, la siguiente secuencia de código:

Dim A As StringDim B As IntegerDim C As Integer

B = 1C = 1A = B + C

que a primera vista parece correcto, finalmente prueba que es una trampa. El intérprete deBasic primero calcula el resultado del proceso de la suma y luego la convierte en cadena, locual, como su resultado, produce la cadena "2".

Si, de otra forma, el intérprete de Basic primero convierte los valores iniciales B y C en unacadena y aplica el operador de suma para el resultado, esto produce la cadena "11".

Lo mismo aplica cuando se usan variables del tipo Variant:

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

Page 40: Guía del programador BASIC - OpenOffice.org

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

Dim A Dim BDim C

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

Desde que las variables pueden contener números y letras, no es claro que será asigando a lavariable A si el número 2 o la cadena "11".

El error de las fuentes notados por las conversiones implícitas solamente pueden ser evitadaspor la programación cuidadosa. Por ejemplo, evitando el uso del tipo de datos variant.

Para evitar otros errores resultantes de la conversión implicita de valores, OpenOffice.orgBasic ofrece un rango de de funciones de conversión, las cuales puede usar para definir eltipo de datos a que debe convertir en una operación:

• CStr(Var) – convierte cualquier tipo de datos en una cadena.

• CInt(Var) – convierte cualquier tipo de datos en un valor entero.

• CLng(Var) – convierte cualquier tipo de datos en un valor entero largo.

• CSng(Var) – convierte cualquier tipo de datos en un valor sencillo.

• CDbl(Var) – convierte cualquier tipo de datos en un valor doble.

• CBool(Var) – convierte cualquier tipo de datos en un valor booleano.

• CDate(Var) – convierte cualquier tipo de datos en un valor de fecha.

Puede usar estas funciones de conversión para definir como OpenOffice.org Basic deberealizar las operaciones de conversión:

Dim A As StringDim B As IntegerDim C As Integer

B = 1C = 1

A = CStr(B + C)' B y C primero son sumandos, luego convertidos' (produce el número 2)

A = Cstr(B) + Cstr(C) ' B y C son convertidos en cadena, y luego' combinados (produce la cadena "11"

Durante la primera suma en el ejemplo, OpenOffice.org Basic primero suma los valoresenteros y luego convierte el resultado en una cadena de caracteres. Se le asigna a A la cadena2. En segunda instancia, las variables enteras son primero convertidas en dos cadenas y luegovinculadas una con otra con el resultado de la asignación. Entonces a A le es asiganda lacadena "11".

Las funciones de conversión numéricas CSng y CDbl también aceptan números decimales.El símbolo del punto decimal a usar es el correspondiente a la definición del país específico.

Para conversión, el método CStr usa las especificación seleccionada del país específicocuando formatea números, fechas y detalles de hora.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 41: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

La función Val es diferente de los métodos Csng, Cdbl, y Cstr. El convierte una cadenaen un número; sin embargo siempre espera un punto para ser usado como seperados decimal.

Dim A As StringDim B As Double

A = "2.22"V = Val(A)'Convierte el número sin importar la configuración local.

Verificando el contenido de las variablesEn algunas instancias, la fecha no puede ser convertida:

Dim A As StringDim B As Date

A = "Test"B = A 'Genera un mensaje de error.

En el ejemplo mostrado, la asignación de la cadena test a la variable de fecha no tienesentido, por eso el intérprete de Basic genera un error. Lo mismo aplica cuando se intentaasignar una cadena a una variable boleana:

Dim A As StringDim B As Boolean

A = "Test"B = A 'Genera un mensaje de error.

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

Estos mensajes de error pueden ser evitados al verificar el programa antes de una asignación,para establecer cuando el contenido de una variable a ser asignada concuerda con el tipo de lavariable destino.

OpenOffice.org Basic provee las siguientes funciones de verificación para este propósito:

• IsNumeric(Valor) – verifica cuando el valor es un número.

• IsDate(Valor) – verifica cuando el valor es una fecha.

• IsArray(Valor) – verifica cuando el valor es una matriz.

Estas funciones son especialmente útiles cuando se requiera entrada del usuario. Por ejemplo,puede verificar que el valor que se ha digitado es un número o fecha válido.

If IsNumeric(EntradaUsuario) ThenEntradaValida = EntradaUsuario

ElseEntradaValida = 0Msgbox "Entrada no válida."

End If

En el ejemplo anterior, si la variable EntradaUsuario contiene un valor numérico válido,entonces es asignado a la variable EntradaValida. Si EntradaUsuario no contieneun número válido, se le asigna el valor 0 a EntradaValida y un mensaje de error esregresado.

Mientras existen las funciones para verificar números, detalles de fechas y matrices en Basic,no existe una función para verificar valores boleanos. Sin embargo, esta funcionalidad puede

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

Page 42: Guía del programador BASIC - OpenOffice.org

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

ser imitada con la función IsBoolean:

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

Temporal = Valor

IsBoolean = TrueOn Error Goto 0

Exit Sub

ErrorBoleano:IsBoolean = FalseOn Error Goto 0

End Function

La función IsBoolean define una variable interna del tipo boleano para ayudarse, y tratade asignarle el valor del parámetro. Si la asignación es satisfactoria, la función retornaVerdadero. Si esta falla, se produce un error en tiempo de ejecución, el cual es interceptadopor la función de error de la función.

Si una cadena en OpenOffice.org Basic contiene un valor no-numérico y esto es asignado a un número,OpenOffice.org Basic no produce un mensaje de error, pero transfiere el valor 0 a la variable. Esteprocedimiento difiere de VBA. Ahi, un error es disparado la implementación del programa terminada si unaasignación correspondiente es ejecutada.

Cadenas

Trabajando con conjuntos de caracteresCuando administre cadenas, OpenOffice.org Basic usa el conjunto de caracteres Unicode.Las funciones Asc y Chr permite el valor Unicode perteneciente al carácter establecido y/oel correpondiente carácter encontrado para el valor Unicode. Las siguientes expresionesasignan varios valores Unicode a la variable Codigo:

Codigo = Asc("A") 'Letra latina A. (Valor Unicode 65)Codigo = Asc("€") 'Caracter Euro. (Valor Unicode 8364)Codigo = Asc("Æ") 'Letra cirilica A. (Valor Unicode 1083)

Por conversión, la expresión

MiCadena = Chr(13)

asegura que "MiCadena" es inicializada con el valor del número 13, el cual es el standar delsalto de línea.

El comando Chr es a menudo usado en lenguajes Basic para insertar caracteres de controldentro de las cadenas.

La asignación

MiCadena = Chr(9) + "Esto es una prueba" + Chr(13)

se asegura que que el texto sea precedido por una tabulación (Unicode valor 9) y un salto delínea (Unicode valor 13) sea agregado al final.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 43: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Accesando partes de una cadenaOpenOffice.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 deMiCadena desde la posición Inicio.

• Len(MiCadena) – retorna el número de caracteres de MiCadena.

Aquí hay algunos ejemplos de llamadas a estas funciones:

Dim MiCadena As StringDim MiResultado As StringDim MiTamano As String

MiCadena = "Esto es una prueba"

MiResultado = Left(MiCadena, 5) ' Devuelve la cadena "Esto "MiResultado = Right(MiCadena, 5) ' Devuelve la cadena "prueba"Miresultado = Mid(MiCadena, 8, 5) ' Devuelve la cadena "una p"MiLargo = Len(MiCadena) ' Devuelve el valor 18

Búsqueda y reemplazoOpenOffice.org Basic provee la función InStr para buscar cadenas parciales dentro de otracadena:

CadenaResultado = InStr (CadenaBuscar, MiCadena)

El parámetro CadenaBuscar especifica la cadena que será buscada en MiCadena. La funciónretorna un número que contiene la posición en la cual CadenaBuscar aparece dentro deMiCadena. Si desea encontrar otras ocurrencias para la cadena, la función también provee laoportunidad de especificar opcionalmente la posición inicial desde la cual OpenOffice.orgBasic empezará la búsqueda. En este caso la sintaxis de la función es:

CadenaResultado = InStr (PosicionInicial, CadenaBuscar, MiCadena)

En los ejemplos previo, InStr omite los caracteres en mayúscula o minúscula. Para cambiarlas búsquedas de manera que InStr sea sentitivo a mayúsculas/minúsculas, agrege elparámetro 0, como se muestra en el siguiente ejemplo:

CadenaResultado = InStr (CadenaBuscar, MiCadena, 0)

Usando las funciones anteriores para editar cadenas, los programadores pueden buscar yreemplazar una cadena por otra:

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

Page 44: Guía del programador BASIC - OpenOffice.org

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

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

Dim Resultado As StringDim PosInicia As StringDim PosActual As String

Resultado = ""PosInicia = 1PosActual = 1

If Buscar = "" ThenResultado = CadFuente

ElseDo While PosActual <> 0 Then

PosActual = InStr(PosInicia, CadFuente, CadBuscar)If PosActual <> 0 Then

Resultado = Resultado + Mid(CadFuente, PosInicia, _PosActual – PosInicia)

Resultado = Resultado + NuevParteElse

Resultado = Resultado + Len(CadBuscar)End If ' PosActual <> 0

LoopEnd IfReemplazar = Resultado

End Function

La función busca dentro de la cadena transferida CadBuscar en un ciclo por significadodentro del término original CadFuente. Si encuentra el término de búsqueda, toma la parteantes de la expresión y la escribe dentro de la variable temporal Resultado. Agrega lasección NuevParte en el punto del término de búsqueda en Busqueda. Si no seencuentran más ocurrencias del término de búsqueda, la función establece qué parte de lacadena permanece intacta y se agrega a la variable temporal de retorno. Retorna la cadenaproducida de esta manera como el resultado del proceso de reemplazo.

Desde que el reemplazo de partes de las secuencas de caracteres es una de las funciones másusadas, la función Mid en OpenOffice.org Basic ha sido extendida de manera que haga estatarea automáticamente. El siguiente ejemplo:

Dim MiCadena As String

MiCadena = "Esto era mi texto"MiCadena = Mid(MiCadena, 6, 3, "es")

reemplaza tres caracteres con la cadena "es" desde la sexta posición de la cadenaMiCadena.

Formateando cadenasLa función Format formatea los números como una cadena. Para hacer esto, la funciónFormat espera una expresión para ser especificada, la cual es usada como plantilla paraformatear los números. Cada posicionador dentro de la planilla asegura que este seaformateado de acuerdo al valor de salida. Los posicionadores más importantes dentro de unaplanilla son el cero (0), numeral (#), punto (.), coma (,), y el signo de dólar ($).

El carácter cero dentro de la plantilla, asegura que ese número siempre sea puesto en laposición correspondente. Si no es provisto un número, 0 es desplegado en su lugar.

Un punto se coloca para el símbolo de punto decimal definido en las especificaciones del país

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 45: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

en el sistema operativo.

El ejemplo de abajo muestra cómo los caracteres cero y punto pueden definir los dígitosdespués del punto decimal en una expresión:

MiFormato = "0.00"

MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1579,80"MiCadena = Format(1579.8, MiFormato) ' Guarda "1579,80"MiCadena = Format(0.4, MiFormato) ' Guarda "0,40"MiCadena = Format(0.434, MiFormato) ' Guarda "0,43"

De la misma manera, pueden agregarse ceros al frente de un número para archivar con elformato deseado:

MiFormato = "0000.00"

MiCadena = Format(-1579.8, MiFormato) ' Guarda "-1579,80"MiCadena = Format(1579.8, MiFormato) ' Guarda "1579,80"MiCadena = Format(0.4, MiFormato) ' Guarda "0000,40"MiCadena = Format(0.434, MiFormato) ' Guarda "0000,43"

Una coma representa, el carácter que el sistema operativo usa como el separador de miles, yel signo numeral mantiene un dígito o lugar que solamente es desplegado cuando se requiereen la cadena de salida:

MiFormato = "#,##0.00"

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

En el lugar del signo de dólar, la función Format desplegará el símbolo de moneda definidoen el sistema.

MiFormato = "#,##0.00 $"

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

Las instrucciones de formateo usadas en VBA para formatear fechas y horas no están soportadas en VBA.

Fecha y horaOpenOffice.org Basic provee el tipo de datos Date, el cual salva la fecha y la hora enformato binario.

Especicación de los detalles de fecha y hora dentro delcódigo del programaPuede asignar una fecha a una variable de fecha mediante la asignación de una simplecadena.

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

Page 46: Guía del programador BASIC - OpenOffice.org

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

Dim MiFecha As Date

MiFecha = "1.1.2002"

Esta asignación puede funcionar apropiadamente porque OpenOffice.org Basic convierte losvalores definidos de fecha como una cadena dentro de la variable de fecha. Este tipo deasignación, sin embargo, puede causar errores, porque los valores de fecha y hora sondefinidos y desplegados de diferentes formas en los diferentes países.

Desde que OpenOffice.org usa la configuración especifica del país del sistema operativocuando convierte una cadena en un valor de fecha, la expresión mostrada anteriormentesolamente funciona con las configuraciones especificas que concuerden con la expresión decadena.

Para evitar este problema, la función DateSerial debe ser usada para asignar un valor fijoa una variable de fecha:

Dim MiFecha As Date

MiFecha = DateSerial(2001, 1, 1)

Los parámetros de la función debe estar en esta secuencia: año, mes, día. La función seasegura que la variable sea asignada correctamente con el valor correcto obviando lasespecificaciones específicas de un país.

La función TimeSerial formatea los detalles de la hora, de la misma manera que lafunción DateSerial formatea fechas:

Dim MiFecha As Date

MiFecha = TimeSerial(11, 23, 45)

Sus parámetros deben ser especificados en esta secuencia: horas, minutos y segundos.

Extrayéndo detalles de fecha y hora.Las siguientes funciones forman parte de la familia de las funciones DateSerial yTimeSerial:

• Day(MiFecha) – Retorna el día del mes desde MiFecha.

• Month(MiFecha) – Retorna el mes desde MiFecha.

• Year(MiFecha) – Retorna el año desde MiFecha.

• Weekday(MiFecha) – Retorna el número del día de la semana desde MiFecha.

• Hour(MiHora) – Retorna la hora desde MiHora.

• Minute(MiHora) – Retorna los minutos desde MiHora.

• Second(MiHora) – Retorna los segundos desde MiHora.

Estas funciones extraen secciones de la fecha y hora desde una variable de fecha específica.El ejemplo:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 47: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim MiFecha As Date

' ... inicializa MiFecha

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

End If

verifica que la fecha guardada en MiFecha este en el año 2004. De la misma manera, elejemplo:

Dim MiHora As Date

' ... Inicializacion de MiHora

If Hour(MiHora) >= 12 And Hour(MiFecha) < 14 Then

' ... La hora especificada esta entre las 12 y las 14 horas

End If

Verifica cuando MiHora esta entre 12 y 14 horas.

La función Weekday retorna el número del día de la semana de una fecha dada:

Dim MiFecha As DateDim Nombre As String

' ... Inicializa el valor de MiFecha

Select Case Weekday(MiFecha)Case 1:

Nombre = "Domingo"Case 2:

Nombre = "Lunes"Case 3:

Nombre = "Martes"Case 4:

Nombre = "Miércoles"Case 5:

Nombre = "Jueves"Case 6:

Nombre = "Viernes"Case 7:

Nombre = "Sábado"End Select

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

Accesando la fecha y la hora del sistemaLas siguientes funciones están disponibles en OpenOffice.org Basic para recuperar la fecha yla hora del sistema:

• Date – retorna la fecha actual.

• Time – retorna la hora actual.

• Now – retorna el punto presente en el tiempo (fecha y hora como un valor combinado)

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

Page 48: Guía del programador BASIC - OpenOffice.org

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

Archivos y directoriosTrabajar con archivos es una de las principales básicas de una aplicación. El API deOpenOffice.org Basic le provee un amplio rango de objetos por las cuales puede crear, abriry modificar documentos. Estos están presentados con detalle en el capítulo 4. Apesar de esto,en algunos casos deberá accesar directamente el sistema de archivos, buscar por losdirectorios o editar archivos de texto. La librería de tiempo de ejecución de OpenOffice.orgBasic provee algunas funciones básicas para realizar estas tareas.

Algunas funciones especificas de archivos y directorios del DOS no están provistas en OpenOffice.org, o sufunción es limitada. Por ejemplo, el soporte para las funciones ChDir, ChDrive y CurDir no estásoportada. Algunas propiedades especificas del DOS no están usadas en las funciones que esperan losarchivos como parámetros (por ejemplo, para diferenciar entre archivos ocultos y sistemas de archivos).Estos cambios son necesarios para asegurar un mayor nivel de independencia de la plataforma enOpenOffice.org.

Administrando archivosBuscando por los directoriosLa función Dir en OpenOffice.org Basic es la responsable de buscar por los directorios a losarchivos y sub-directorios. Cuando se solicita por primera vez, una cadena conteniendo laruta de los directorios debe ser asignado a Dir como el primer parámetro. El segundoparámetro de Dir especifica el archivo o directorio que se debe buscar. OpenOffice.orgBasic retorna el nombre de la primera entrada de directorio encontrada. Para recuperar lasiguiente entrada, la función Dir debe ser llamada sin parámetros. Si la función Dir noencontra más entradas, retorna una cadena vacía.

El siguiente ejemplo muestra como la función Dir puede ser usada para recuperar todos losarchivos localizados en un directorio. El procedimiento guarda los nombres individuales en lavariable Archivos y luego despliega un cuadro de mensaje.

Sub VerArchivosDim Siguiente As StringDim Archivos As String

Archivos = ""Siguiente = Dir("C:\",0)

While Siguiente <> ""Archivos = Archivos & Chr(13) & Siguiente Siguiente = Dir

Wend

Msgbox ArchivosEnd Sub

El 0 es usado como segundo parámetro en la función Dir para asegurarse que la funciónsolamente retorne nombres de archivos y los directorios son ignorados. Los siguientesparámetros pueden ser especificados:

• 0 : retorna archivos normales

• 16 : sub-directorios.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 49: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

El siguiente ejemplo es virtualmente el mismo que el ejemplo anterior, pero la función Dir,pero se le dio un 16 como parámetro, el cual retornará los sub-directorios de a carpeta enlugar de los nombres.

Sub VerArchivosDim Siguiente As StringDim Archivos As String

Archivos = ""Siguiente = Dir("C:\",0)

While Siguiente <> ""Archivos = Archivos & Chr(13) & Siguiente Siguiente = Dir

Wend

Msgbox ArchivosEnd Sub

Cuando se consulta en OpenOffice.org Basic, a diferencia de VBA, usando el parámetro 16 en la funciónDir retornará solamente los subdirectorios. En VBA, la función también retorna los nombres de losarchivos de manera que una verificación posterior es necesaria para recuperar solamente los directorios.

Las opciones provistas por VBA para buscar por los directorios por archivos específicos con laspropiedades oculto, archivo de sistema, archivado, y nombre de volumen no existen en OpenOffice.orgBasic porque corresponden a funciones del sistema de archivos que no están disponibles en todos lossistemas operactivos.

Las especificaciones de la ruta listada en Dir puede usar los comodines "*" y "?" tanto en VBA como enOpenOffice.org Basic. El OpenOffice.org Basic sin embargo el comodín "*" puede ser el último carácter deun nombre de archivo o de una extensión, lo cual no es válido en VBA.

Creando y borrando directoriosOpenOffice.org Basic provee la función MkDir para la creación de directorios

MkDir ("C:\Subdir")

Esta función crea directorios y subdirectorios. Todos los directorios que se necesitan dentrode una jerarquía también son creados, si se requiere. Por ejemplo, Si sólo existeC:\SubDir1, entonces puede llamar:

MkDir ("C:\SubDir1\SubDir2\SubDir3")

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

La función RmDir borra directorios:

RmDir ("C:\SubDir1\SubDir2\SubDir3")

si el directorio contiene sub-directorios o archivos, estos también serán borrados, por esotenga cuidado con la función RmDir.

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

Page 50: Guía del programador BASIC - OpenOffice.org

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

En VBA, las funciones MkDir y RmDir actuan solamente con el directorio actual. En OpenOffice.org Basicpor 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 ysus archivos son borrados

Copiando, renombrando, borrando y verificando la existencia dearchivosLa llamada

FileCopy (Fuente, Destino)

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

Con la ayuda de la función

Name ViejoNombre As NuevoNombre

puede renombrar el archivo ViejoNombre con NuevoNombre. La sintaxis de palabraclave As, y el hecho de que no es usada la coma, regresa a las raices del lenguaje Basic.

La llamada

Kill (NombreArchivo)

borra el NombreArchivo archivo. Si desea borrar un directorio (incluyéndo sus archivos)use la función RmDir.

La función FileExist puede ser usada para verificar la existencia de un archivo:

If FileExist(NombreArchivo) ThenMsgBox "El archivo existe"

End If

Leyéndo y cambiando propiedades de archivosCuando se trabaja con archivos, en ocasiones es importante poder establecer las propiedadesde los archivos, la fecha y hora del último cambio y el tamaño del mismo.

La llamada

Dim Atributos As IntegerAtributos = GetAttr(NombreArchivo)

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

• 1 : archivo de sólo-lectura.

• 16 : nombre de un directorio.

El ejemplo

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 51: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Atributos As IntegerDim 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 = "" ThenDescripcion = " Normal"

End If

Msgbox Descripcion

determina la máscara de bits del archivo prueba.txt y verifica si es de sólo lectura o si esun 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 devolumen no están soportadas por OpenOffice.org Basic porque son específicas de Windows y no estándisponibles en otros sistemas operativos o sólo parcialmente.

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

SetAttr("prueba.txt",1)

puede ser usada para asignarle el status de sólo lectura a un archivo. Si ya hay un status desólo lectura puede ser borrado con la siguiente llamada

SetAttr("prueba.txt",0)

La fecha y la hora de la última modificación de un archivo esta provista por la funciónFileDateTime. La fecha está formateada de acuerdo con las especificaciones del paísusado en su sistema.

FileDateTime("prueba.txt") 'Provee la fecha de la última modificación

la función FileLen determina el tamaño del archivo en bytes (como un entero largo)

FileLen("prueba.txt") ' provee el tamaño del archivo en bytes.

Escribiendo y leyéndo archivos de textoOpenOffice.org Basic provee un amplio rango de métodos para leer y escribir en archivos detexto. Las siguientes explicaciones están relacionadas para el trabajo con archivos de texto(no documentos de texto).

Escribiéndo archivos de textoAntes de que un archivo sea accesado, primero debe ser abierto. Para hacer esto, se necesitaun manejador de archivo, el cual identifica el archivo en los siguientes accesos.

La función FreeFile es usada para crear un manejador de archivo disponible. Elmanejador es usado como un parámetro para la instrucción Open, la cual abre el archivo.

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

Page 52: Guía del programador BASIC - OpenOffice.org

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

Para abrir un archivo este puede ser especificado como un archivo de texto, la llamada Openes:

Open NombreArchivo For OutPut As #NumArchivo

NombreArchivo es una cadena conteniendo el nombre del archivo. NumArchivo es elmanejador creado con la función FreeFile.

Una vez que el archivo está abierto, la instrucción Print puede ser descrito línea por línea:

Print #NumArchivo, "Esto es una línea de prueba."

NumArchivo también es el manejador de archivo aquí. El segundo parámetro especifica eltexto que será guardado como una línea en el archivo de texto.

Una vez que el proceso de escritura ha sido completado, el archivo debe ser cerrado usandola 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 IntegerDim LineaActual As StringDim NombreArchivo As String

NombreArchivo = "c:\datos.txt" ' Define el nombre del archivo NumArchivo = FreeFile ' Establece el manejador de archivo libre

Open NombreArchivo For OutPut As #NumArchivo 'Abre el archivo para 'escritura

Print #NumArchivo, "Es una línea de texto" ' Guarda la línea Print #NumArchivo, "Otra línea de texto" ' Guarda la líneaClose #NumArchivo ' Cierra el archivo

Leyéndo archivos de textoLos archivos de texto son leídos de la misma manera en que ellos son escritos. La instrucciónOpen usada para abrir el archivo contiene la expresión For Input en lugar de la expresiónFor Output, en lugar del comando Print para escribir datos, la instrucción LineInput se usa para leer los datos.

Finalmente, cuando llama un archivo de texto, la instrucción

eof(NumArchivo)

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

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 53: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim NumArchivo As IntegerDim LineaActual As StringDim Archivo As StringDim Msg As String

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

' Establece el manejador de archivo libre.NumArchivo = FreeFile

' Abre el archivo (modo de lectura)Open NombreArchivo For Input As NumArchivo

' Verifica cuando se ha alcanzado el final del archivo Do While not eof(NumArchivo)

' Lee una línea Line Input #NumArchivo, LineaActualIf LineaActual <> "" Then

Msg = Msg & LineaActual & Chr(13)End If

Loop

' Cierra el archivo Close #NumArchivo

Msgbox Msg

Las líneas individuales son recuperadas en el ciclo Do While, guardándolo en la variableMsg, y desplegada al final en un diálogo de mensaje.

Mensajes y cuadro de diálogo de entradaOpenOffice.org Basic provee las funciones Msgbox e Inputbox para las comunicacionesbásicas con el usuario.

Desplegando mensajesMsgbox despliega un cuadro de información básico, el cual puede tener uno o más botones.En su forma más simple

MsgBox "Esta es una prueba de información"

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

La apariencia del cuadro de información puede ser cambiada usando un parámetro. Elparámetro provee una opción para agregar botones, definir los botónes pre-asignados, yagregar un símbolo de información. Los valores para seleccionar los botón son:

• 0 – botón Aceptar.

• 1 – botones de Aceptar y Cancelar.

• 2 – botones de Cancelar y Reintentar.

• 3 – botones de Si, No y Cancelar.

• 4 – botones de Si y No.

• 5 – botones de Reintentar y Cancelar.

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

Page 54: Guía del programador BASIC - OpenOffice.org

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

Para poner un botón por defecto, agregue uno de los siguientes valores al valor del parámetrode la lista de botones. Por ejemplo, para crear los botones de Si, No y Cancelar (valor 3) yque Cancelar sea el botón por defecto (valor 512), el valor del parámetro es 3 + 512 = 515.

• 0 – primer botón por defecto.

• 256 – segundo botón por defecto.

• 512 – tercer botón por defecto.

Finalmente, los siguientes símbolos de información están disponibles y también pueden serdesplegados agregando el valor relevante al parámetro:

• 16 – signo de detenerse.

• 32 – signo de pregunta.

• 48 – signo de exclamación.

• 64 – signo de Tip.

La llamada

Msgbox "¿Desea continuar?", 292

despliega un diálogo de información con los botones de Si – No (valor 4), en el cual elsegundo botón (No) es el botón por defecto (valor 256) y también despliega un signo depregunta (valor 32), 4+256+32= 292.

Si un cuadro de información contiene varios botones, un valor de retorno debe ser preguntadopara saber cual botón ha sido presionado. Los siguientes valores de retorno están disponiblesen esta instancia:

• 1 – Aceptar.

• 2 – Cancelar.

• 4 – Reintentar.

• 5 – Ignorar.

• 6 – Si.

• 7 – No.

En el ejemplo previo, puede verificar los valores de retorno de esta manera:

If Msgbox ("Desea continuar?", 292) = 6 Then' Fue presionado el botón SI.

Else' Fue presionado el botón NO.

End If

Adicionalmente al texto de información y el parámetro que arregla el cuadro de información,Msgbox también permite un tercer parámetro, que define el texto para el título del cuadro:

Msgbox "Desea continuar?", 292, "Pregunta del sistema"

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 55: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Cuadro de entrada para obtener cadenas simplesLa función Inputbox pregunta cadenas simples al usuario. Es sin embargo una alternativasimple a configurar un diálogo. Inputbox recibe tres parámetros normales:

• Un texto de información,

• un título para el cuadro de diálogo,

• El valor por defecto que será agregado en el area de entrada.

Valor = Inputbox("Ingrese un valor: ", "Prueba", "Valor por defecto")

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

Otras funciones

BeepLa función Beep causa que el sistema haga un sonido que puede ser usada para advertir alusuario de una acción incorrecta. Beep no tiene parámetros.

Beep ' genera un sonido informativo.

ShellProgramas externo pueden ser iniciados usando la función Shell.

Shell (Ruta, EstiloVentana, Parametro)

Ruta define la ruta de el programa a ser ejecutado. Estiloventana define la ventana enla que el programa será iniciado. Los siguientes valores son posibles:

• 0 – El programa recibe el foco y es iniciado en una ventana oculta.

• 1 – El programa recibe el foco y es iniciado en una ventana de tamaño normal.

• 2 – El programa recibe el foco y es iniciado en una ventana minimizada.

• 3 – El programa recibe el foco y es iniciado en una ventana maximizada.

• 4 – El programa es iniciado en una ventana de tamaño normal sin recibir el foco.

• 6 – El programa es iniciado en una ventana minimizada y el foco se mantiene en laventana actual.

• 10 – El programa es iniciado en modo de pantalla completa.

El tercer parámetro, Parametro, permite que parámetros de la línea de comando seantransferidos al programa a ser iniciado.

WaitLa función Wait termina la ejecución del programa por un tiempo especifico. El periodo deespera está especificado en milisegundos. El comando

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

Page 56: Guía del programador BASIC - OpenOffice.org

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

Wait 2000

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

EnvironLa función Environ retorna las variables de ambiente del sistema operativo. Dependiendo delsistema operativo y su configuración, diferentes tipos de datos son guardados aquí. Lallamada

Dim DirTemporal

DirTemporal = Environ("TEMP")

determina la varible de ambiente para el directorio de archivos temporal es para el sistemaoperativo.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 57: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

La API de OpenOffice.org es una interface universal de programación para accesar elOpenOffice.org. Puede usar la API de OpenOffice.org para crear, abrir, modificar e imprimirdocumentos de OpenOffice.org. Esto provee la opción de extender el rango personal deOpenOffice.org a través de macros personales y escribir diálogos personalizados.

La API de OpenOffice.org no solamente puede ser usada en OpenOffice.org Basic, sinotambién en otros lenguajes de programación como Java o C++. Una técnica llamada Red deObjetos Universal (UNO4) la cual provee ua interface que hace posible una interface convarios lenguajes de programación.

Este capítulo se centra en cómo OpenOffice.org puede ser usado en OpenOffice.org Basiccon la ayuda de UNO. Describe los conceptos principales de UNO desde el punto de vista deun programador de OpenOffice.org Basic. Detalles sobre cómo trabajar con varias partes dela API OpenOffice.org se pueden encontrar en los capítulos siguientes.

Red de Objetos Universal (UNO)OpenOffice.org provee una interface de programación en la forma de Red de ObjetosUniversal (UNO). Esta es una interface de programación orientada a objetos la cualOpenOffice.org sub-divide en varios objetos por medio de la cual asegura el accesocontrolado por programa al paquete de Office.

Desde que OpenOffice.org Basic es un lenguaje de programación por procedimientos,necesitará la declaración de una variable para el objeto asociado. La declaración es hechausando la instrucción Dim (vea capítulo 2). El tipo Object debe ser usado para declarar lavariable 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 puedeser hecho usando la función CreateUnoService:

Obj = createUnoService("com.sun.star.frame.Desktop")

Esta llamada asigna la variable Obj una referencia al objeto creado recientemente.

com.sun.star.frame.Desktop se asemeja a un objeto; sin embargo en la terminología de UNOes llamado un "servicio" en lugar de un tipo. De acuerdo a la filosofía de UNO, Obj esdescrito como una referencia a un objeto que soporta el serviciocom.sun.star.frame.Desktop. El término "servicio" es usado en OpenOffice.orgBasic y corresponde a los términos tipo y clase en otros lenguajes de programación.

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

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

Page 58: Guía del programador BASIC - OpenOffice.org

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

Sin embargo, hay una diferencia importante: la Red de Objetos Universal puede soportarvarios servicios al mismo tiempo. Algunos servicios UNO en turno soportan otros serviciosen si mismos, por medio de un objeto, está provisto con un amplio rango de servicios. Porejemplo, en el objeto mencionado, el cual esta basado en el serviciocom.sun.star.frame.Desktop, también puede incluir otros servicios para guardar documentosy terminar el programa.

Mientras la estructura de un objeto en VBA está definido por la clase a la cual pertenece, enOpenOffice.org Basic la estructura esta definida por medio de los servicios a la cual pertenece. Un objetoVBA está siempre asignada precisamente a una clase individual. Un objeto OpenOffice.org Basic, sinembargo, soporta varios servicios.

Propiedades y métodosUn objeto OpenOffice.org Basic provee un rango de propiedades y métodos los cualespueden ser llamados por los significados de el objeto.

PropiedadesLas propiedades son como las propiedades de un objeto; por ejemplo, Filename y titlepara un objeto documento.

Las propiedades son puestas por simple asignación:

Documento.title = "Guia del programador de OpenOffice.org Basic"Documento.Filename = "Progman.sxv"

Una propiedad, como una variable normal, tiene un tipo que define cuales valores son los quepuede guardar.

Las propiedades anteriores Filename y title son del tipo cadena.

Propiedades reales y propiedades imitadasMuchas de las propiedades de un objeto en OpenOffice.org Basic están definidas en ladescripción del servicio UNO. Adicionalmente a estas propiedades "reales", también haypropiedades las cuales consisten en dos métodos al nivel de UNO. Uno de estos es usado parapreguntar el valor de una propiedad y el otro es dada para asignarla (métodos get y set ).La propiedad ha sido virtualmente imitada por estos dos métodos. Los objetos carácter porejemplo, proveen los métodos getPosition y setPosition por medio de los cuales elpunto de llave asociado puede ser llamado y cambiado. El programador OpenOffice.orgBasic puede accesar los valores por medio de la propiedad position. A pesar de esto, losmétodo originales también están disponibles (en nuestro ejemplo, getPosition ysetPosition).

MétodosLos métodos son entendidos como funciones relacionadas directamente con un objeto através de los cuales este objeto es llamado. El objeto anterior Documento, por ejemplo,provee el método Save, el cual puede ser llamado de esta manera:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 59: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Documento.Save()

los métodos, como las funciones, pueden contener parámetros y retornar valores. La sintaxisde la llamada a este método está orientada a las funciones clásicas. La llamada:

Ok = Documento.Save(True)

también especifica un parámetro True para el objeto documento cuando llama al métodoSave. Una vez que el método ha sido completado, Save retorna un valor en la variable Ok.

Módulos, servicios e interfacesOpenOffice.org provee cientos de servicios. Para proveer un vistazo de estos servicios, estoshan sido combinados en módulos. Los módulos no tienen otra importancia funcional para losprogramadores de OpenOffice.org Basic. Cuando se especifica un nombre de servicio, solo elnombre del módulo tiene importancia porque va incluido dentro del nombre del servicio. Elnombre completo de un servicio consiste en la expresion com.sun.star, que especificaque es un servicio en OpenOffice.org, seguido del nombre del módulo, como frame, yfinalmente el nombre actual del servicio, como Desktop. El nombre completo del ejemplonombrado sería:

com.sun.star.frame.Desktop

Adicionalmente a los términos de módulos y servicios, UNO introduce el término"interface". Mientras este término es familiar para los programadores de Java, no es usado enBasic.

Una interface combina varios métodos. En el sentido estricto de la palabra, un servicio UNOno soporta métodos, sino mas bien interfaces, dentro de las cuales se proveen diferentesmétodos. En otras palabras, los métodos son asignados (como combinaciones) a los serviciosen interfaces. Este detalle puede ser de interes en especial para los programadores de C++ yJava, porque en estos lenguajes, se necesita una interface para llamar a un método. EnOpenOffice.org Basic, esto es irrelevante. Aquí, los métodos son llamados directamente porel significado del objeto relevante.

Sin embargo, para una comprensión de la API, es útil tener a mano la asignación de losmétodos a varias interfaces, porque varias interfaces son usadas en los diferentes servicios. Siestá familiarizado con una interface, entonces puede trasferir su conocimiento de un servicioa otro.

Algunas de las interfaces centrales son usadas frecuentemente y que están mostradas al finalde este capítulo, disparadas por diferentes servicios.

Herramientas para el trabajo con UNOLa pregunta que permanece es a cuales objetos – o servicios si vamos a mantener laterminología de UNO – soportan cuales propiedades, métodos e interfaces y cómo pueden serdeterminadas. Adicionalmente a esta guía, puede obtener más información acerca de losobjetos de las siguientes fuentes: el método supportsService, los métodos dedepuración asi como la guía del desarrollador, y la referencia API.

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

Page 60: Guía del programador BASIC - OpenOffice.org

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

El método supportsServiceUn número de objetos UNO soportan el método supportsService, el cual puedeestablecer 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 serviciocom.sun.star.text.Paragraph.

Propiedades de depuraciónCada objeto UNO en OpenOffice.org Basic conoce que propiedades, métodos e interfacescontiene. Esto provee propiedades que los retornan en forma de lista. Las propiedadescorrespondientes son:

DBG_properties – retorna una cadena conteniendo todas las propiedades de un objeto.

DBG_methods – retorna una cadena conteniendo todos los métodos de un objeto.

DBG_supportedInterfaces – retorna una cadena conteniendo todas las interfaces quesoporta un objeto.

El siguiente código muestra cómo pueden ser usados DBG_properties y DBG_methodsen aplicaciones reales. Primer se crea el servicio com.sun.star.frame.Desktop yluego despliega las propiedades y métodos soportados en cuadros de mensages.

Dim Obj as ObjectObj = createUnoService("com.sun.star.frame.Desktop")

Msgbox Obj.DBG_PropertiesMsgbox Obj.DBG_Methods

Cuando se usa DBG_properties, hay que notar que la función retorna todas las propiedadesde un servicio particular que puede soportar teóricamente. Sin embargo, no hay completaseguridad ya que estos pueden ser usados en el objeto en cuestión. Después de llamar laspropiedades, deberá usar la función IsEmpty para verificar si está realmente disponible.

Referencia APISe puede encontrar más información sobre los servicios disponibles, y sus interfaces,métodos, y propiedades en la referencia API para la API de OpenOffice.org. Esto puede serencontrado 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 deOpenOffice.org. Definen conjuntos de métodos para tareas abstractas las cuales pueden seraplicadas a varios problemas. Aquí encontrará un vistazo de las más comunes de estasinterfaces.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 61: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

El origen de losobjetos está explicado más adelante en esta guía. En este punto, solamenteson discutidos algunos aspectos abstractos de los objetos, por medio de los cuales la API deOpenOffice.org provee algunas de las interfaces centrales.

Creando objetos dependientes del contextoLa API de OpenOffice.org provee dos opciones para crear objetos. Uno puede ser encontradoen la función mencionada al inicio de este capítulo createUnoService.CreateUnoService crea un objeto que puede ser usado universalmente. Estos objetostambién son llamados servicios independientes del contexto.

Adicionalmente a los servicios independientes del contexto, también están los serviciosdependientes del contexto estos objetos solamente son útiles cuando son usadosconjuntamente con otro objeto. Un objeto de dibujo para un documento de hoja de cálculo,por ejemplo, solamente puede existir conjuntamente con este documento.

La interface com.sun.star.lang.XMultiServiceFactoryLos objetos dependientes del contexto generalmente son creados por significados de unmétodo de un objeto, del cual el objeto depende. El método createInstance, el cual estádefinido en la interface XmultiServiceFactory, es usado en particular en estos objetosde documentos.

El objeto de dibujo antes mencionado puede ser creado, por ejemplo, de la siguiente manera,usado un objeto de hoja de cálculo:

Dim Rectangulo As Object

Rectangulo = _SpreadSheet.createInstance("com.sun.star.drawing.RectangleShape")

Una plantilla de párrafo en un documento de texto puede ser creada dela misma manera:

Dim Estilo As ObjectEstilo = _

TextDocument.createInstance("com.sun.star.style.ParagraphStyle")

Acceso por nombre a objetos subordinadosLas interfaces XNameAccess y XNameContainer son usados en objetos que contienenobjetos subordinados, los cuales pueden ser direccionados usando un lenguaje natural.

Mientras que XNameAccess permite accesar objetos individuales, XNameContainertoma la inserción, modificación y borrado de elementos.

La interface com.sun.star.container.XNameAccessUn ejemplo del uso de XnameAccess es provisto por los objetos de hoja de un libro decálculo. Esto combina todas las páginas dentro de un libro de cálculo. Las páginasindividuales son accesadas usando el método getByName de XNameAccess:

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

Page 62: Guía del programador BASIC - OpenOffice.org

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

Dim Sheets As ObjectDim Sheet As Object

Sheets = SpreadSheet.SheetsSheet = Sheets.getByName("Sheet1")

El método getElementNames provee un vistazo de los nombres de todos los elementos.Como resultado, retorna un campo de datos conteniendo los nombres. El siguiente ejemplomuestra como todos los nombres de los elementos de una hoja de cálculo pueden serdeterminados y desplegados en un ciclo:

Dim Sheets As ObjectDim SheetNamesDim I As Integer

Sheets = SpreadSheet.SheetsSheetNames = Sheets.getElementNames

For I = Lbound(SheetNames) To Ubound(SheetNames)Msgbox SheetNames(I)

Next I

El método hasByName de la interface XNameAccess revela los objetos subordinadosexistentes en un objeto básico con un nombre particular. El siguiente ejemplo despliega unmensaje que informa al usuario cuando el objeto SpreadSheet contiene una página con elnombre 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.XNameContainerLa interface XNameContainer toma la inserción, borrado y modificación de elementossubordinados en un objeto básico. Las funciones responsables de esto son insertByName,removeByName y replaceByName.

El siguiente es un ejemplo práctico de esto. Llama un documento, que contiene un objetoStyleFamilies y lo usa para cambiar las plantillas de los párrafos (ParagraphStyles) enel documento actual.

Dim StyleFamilies As ObjectDim ParagraphStyles As ObjectDim NewStyle As Object

StyleFamilies = Textdoc.StyleFamiliesParagraphStyles = StyleFamilies.getByName("ParagraphStyles")ParagraphStyles.insertByName("NewStyle", NewStyle)ParagraphStyles.replaceByName("ChangingStyle", NewStyle)ParagraphStyles.removeByName("OldStyle")

La línea insertByName agrega el estilo NewStyle bajo el nombre de el mismo nombreen el objeto ParagraphStyles. La línea replaceByName cambia el objeto anterior aChangingStyle dentro de NewStyle. Finalmente, la llamada a removeByNameremueve el objeto detrás de OldStyle desde ParagraphStyles.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 63: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Acceso basado en índices a objetos subordinadosLas interfaces XIndexAccess y XIndexContainer son usadas en objetos quecontienen objetos subordinados que pueden ser direccionados usando un índice.

XIndexAccess provee los métodos para el acceso de objetos individuales.

XIndexContainer provee los métodos para insertar y remover elementos.

La interface com.sun.star.container.XIndexAccessXIndexAccess provee los métodos getByIndex y GetCount para llamar los objetossubordinados. GetByIndex provee un objeto con un índice particular. GetCount retornacuantos objetos están disponibles.

Dim Sheets As ObjectDim Sheet As ObjectDim I As Integer

Sheets = SpreadSheet.Sheets

For I = 0 To Sheets.getCount() - 1Sheet = Sheets.getByIndex(I)' Editar la hoja

Next I

El ejemplo muestra un ciclo que corre entre todos los elementos de las hojas uno después delotro y guarda una referencia a cada uno en la variable de objeto Sheet. Cuando trabaja coníndices, note que getCount retorna el número de elementos. Los elementos engetByIndex sin embargo están numerados empezando por el 0. Por eso la variable delcontador del ciclo se ejecuta desde 0 hasta getCount() - 1.

La interface com.sun.star.container.XIndexContainerLa interface XIndexContainer provee las funciones insertByIndex yremoveByIndex. Los parámetros están estructurados de la misma forma a sus funcionescorrespondientes en XnameContainer.

Acceso iteractivo a objetos subordinadosEn algunas instancias, un objeto pueden contener una lista de objetos subordinados que nopueden ser accesados por un nombre o por un índice. En estas situaciones, son apropiadas lasinterfaces XEnumeration y XEnumerationAccess. Ellas proveen un mecanismo pormedio del cual todos los elementos subordinados de un objeto pueden ser pasados, paso apaso, sin tener que usar un direccionamiento directo.

Las interfaces com.sun.star.container.XEnumeration yXEnumerationAccessEl objeto básico debe proveer la interface XenumerationAccess, la cual sólo contiene elmétodo CreateEnumeration. Esto retorna un objeto auxiliar, el cual provee la interfaceXenumeration con los métodos hasMoreElements y NextElement. Por medio deestos, se tendrá accesso a los objetos subordinados.

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

Page 64: Guía del programador BASIC - OpenOffice.org

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

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

Dim ParagraphEnumeration As ObjectDim Paragraph As Object

ParagraphEnumeration = Textdoc.Text.createEnumeration

While ParagraphEnumeration.hasMoreElements()Paragraph = ParagraphEnumeration.nextElement()

Wend

El ejemplo primero crea el objeto auxiliar ParagraphEnumeration. Este retornagradualmente los párrafo individuales del texto en un ciclo. El ciclo es terminado tan prontocomo el método hasMoreElements retorna el valor Falso, señalando que el final del textoha sido encontrado.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 65: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

La API de OpenOffice.org ha sido estructurada de manera que muchas de sus partes hacenposible que sean usadas para diferentes tareas. Esto incluye las interfaces y servicios paracrear, abrir, salvar, convertir e imprimir documentos y la administración de plantillas. Desdeque estas areas de funciones están disponibles en todos los tipos de documentos, estánexplicadas de primero en este capítulo.

El StarDesktopCuando trabaje con documentos, hay dos servicios que son usados más frecuentemente:

• El servicio com.sun.star.frame.Desktop, el cual es similar al servicio central deOpenOffice.org. Provee las funciones para el objeto Frame de OpenOffice.org, dentro delcual están clasificadas todas las ventanas de documentos. Los documentos pueden sercreados, abiertos e importados usando este servicio.

• La funcionalidad básica para objetos de documentos individuales están provistos por elservicio com.sun.star.document.OfficeDocument. Esto provee los métodospara salvar, exportar e imprimir documentos.

El servicio com.sun.star.frame.Desktop abre automáticamente cuandoOpenOffice.org es iniciada. Para hacer esto, OpenOffice.org crea un objeto que puede serbuscado por significado con el nombre global de StarDesktop.

La interface más importante de el StarDesktop escom.sun.star.frame.XComponentLoader. Esto básicamente cubre el métodoloadComponentFromURL, el cual es el responsable de la creación, importación yapertura de documentos.

El nombre de StarDesktop data de la versión StarOffice 5, el la cual todos los documentos estaban juntosen una sola aplicación común llamada StarDesktop. En la presente versión de OpenOffice.org, no se usamás un StarDesktop. Sin embargo, el nombre de StarDesktop aun existe para para el marco del objetoporque indica claramente que este es un objeto básico para toda la aplicación.El objeto StarDesktop asume asume la posición de sucesor del objeto Application de StarOffice 5 elcual era aplicado al objeto principal. Sin embargo, la diferencia con objeto Application es que eraprimariamente responsable de abrir nuevos documentos. Las funciones residentes en el anterior objetoApplication para controlar la presentación en pantalla de StarOffice (por ejemplo, FullScreen,FunctionBarVisible, Heigth, Width, Top, Visible) ya no se usan más.

Capítulo 5 Trabajando con documentos OpenOffice.org

Page 66: Guía del programador BASIC - OpenOffice.org

Capítulo 5Trabajando con documentos OpenOffice.org

De la misma manera que el documento activo de Word es accesado por medio de Application.ActiveDocument y en Excel por medio de Application.ActiveWorkBook, enStarOffice, StarDesktop es el responsable de esta tarea. En OpenOffice.org el documento activo esaccesado por medio de la propiedad StarDesktop.CurrentComponent.

Información básica acerca de los documentos enOpenOffice.orgCuando se trabaja con documentos de OpenOffice.org, es útil entender los puntos básicos dela administración de documentos en OpenOffice.org. Esto incluye la forma en que estánestructurados los nombres de archivos para los documentos de OpenOffice.org, también elformato en que estos archivos están salvados.

Nombres de archivos en notación URLDesde que OpenOffice.org es una aplicación independiente de las plataformas, usa lanotación URL (la cual es independiente del sistema operativo), como está definida enInternet Standard RFC 1738 para los nombres de archivos. El estandar de nombres dearchivos en este sistema empiezan con el prefijo

file:///

seguido de la ruta local. Si el nombre del archivo contiene subdirectorios, están separados porun slash sencillo hacia adelante, no el backslash usado normalmente bajo Windows. Lasiguiente ruta hace referencia al archivo prueba.sxw en el directorio doc en la unidad C:

file:///C:/doc/prueba.sxw

Para convertir los nombres locales a una URL, OpenOffice.org provee la funciónConvertToURL. Para convertir una URL en un nombre de archivo local, OpenOffice.orgprovee la función ConvertFromURL:

Msgbox ConvertToURL("C:\doc\prueba.sxw")' devuelve file:///C:/doc/prueba.sxw

Msgbox ConvertFromURL("file:///C:/doc/prueba.sxw")' devuelve (bajo Windows) c:\doc\prueba.sxw

El ejemplo convierte el nombre de un archivo local en una URL, y despliega un cuadro demensaje. Luego convierte una URL a un nombre de archivo local y también lo despliega.

El Internet Standard RFC 1738, en el cual está basado, permite el uso de los caracteres 0-9,a-z y A-Z. Todos los demás caracteres son incluidos con la codificación de escape en lasURL's. Para hacer esto, son convertidos en sus valores hexadecimales del conjunto decaracteres ISO8859-1 (ISO-Latin) precedidos por el signo de porcentaje. Por eso, porejemplo, un espacio en un nombre de un archivo local se convierte en %20 en la URL.

Formato de archivos XMLDesde la versión 6.0, StarOffice provee un formato de archivos basado en XML. A traves deluso de XML, el usuario tiene la opción también de abrir y editar archivos en otros programas.

Compresión de archivos

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 67: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Desde que el XML está basado en archivos de texto standard, los archivos resultantes sonusualmente muy grandes. Sin embargo OpenOffice.org los comprime y salva en un formatoZIP.

Mediante la opción del método storeAsURL, el usuario puede guardae el archivo XMLoriginal directamente. Vea las opciones del método StoreAsURL en la página 79.

Crear, abrir e importar documentosLos documentos son abiertos, importados y creados usando el método

StarDesktop.LoadComponentFromURL(URL, Frame, _SearchFlags, FileProperties)

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

El segundo parámetro espera el nombre para el objeto marco de la ventana queOpenOffice.org crea internamente para su administración. El nombre predefinido _blank esel usado normalmente aquí, y se asegura de que OpenOffice.org cree una nueva ventana.Alternativamente, también se puede especificar _hidden, asegura que el documentocorrespondiente sea cargado, pero que no permanezca visible.

Usando estos parámetros, el usuario puede abrir un documento OpenOffice.org, y comodines(valores tontos) pueden ser asignados a los dos últimos parámetros.

Dim Doc As ObjectDim Url As StringDim Dummy()

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

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

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

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

StarDesktop.loadComponentFromURL suprime los métodos Documents.Add y Documents.Open de laantigua StarOffice API.

Reemplazando el contenido de una ventana de documentoLos valores de los nombres _blank y _hidden para el parámetro Frame se asegura queOpenOffice.org crea una nueva ventana para cada llamada de loadComponentFromURL.En algunas situaciones, es útil reemplazar el contenido de una ventana existente. En estecaso, el marco del objeto para la ventana debe contener un nombre explícito. Nótese que estenombre no empieza con rayabajo (underscore). De la misma forma, el parámetro debe serpuesto de manera al correspondiente espacio de trabajo creado, si este aun no existe. Laconstante 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 serreemplazado con la ayuda del parámetro de marco y SearchFlags:

Capítulo 5 Trabajando con documentos OpenOffice.org

Page 68: Guía del programador BASIC - OpenOffice.org

Capítulo 5Trabajando con documentos OpenOffice.org

Dim Doc As ObjectDim Dummy()Dim URL As StringDim 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 demarco MyFrame. Una vez que el cuadro de mensaje ha sido confirmado, se reemplaza elcontenido de la ventana con el del archivo prueba2.sxw.

Opciones del método loadComponentFromURLEl cuarto parámetro de la función loadComponentFromURL es el campo de datosPropertyValue, el cual provee en OpenOffice.org varias opciones para abrir o creardocumentos. El campo de datos debe proveer a PropertyValue la estructura para cadaopción en la que el nombre de la opción es guardada como una cadena también con el valorasociado.

• AsTemplate (Boolean) – si es verdadero, carga un documento nuevo, sin título,para la URL dada. Si es falso, la plantilla es cargada para edición.

• CharacterSet (String) – Define en cual conjunto de caracteres está basado eldocumento.

• FilterName (String) – Especifica un filtro especial para la funciónloadComponentFromURLLos nombres de filtros están disponibles en el archivo\share\config\registry\instance\org\openoffice\office\TypeDetection.xml.

• FilterOptions (String) – define opciones adicionales para los filtros.

• JumpMask (String) – una vez que el documento ha sido abierto, salta a la posicióndefinida 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 abiertoen OpenOffice.org Calc usando la opción FilterName.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 69: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim FileProperties(0) As New com.sun.star.beans.PropertyValuesDim 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 unaopción.

La propiedad FilterName define cuando OpenOffice.org usa un filtro de texto enOpenOffice.org Calc para abrir archivos.

Creando nuevos documentosOpenOffice.org crea automáticamente un nuevo documento si el documento especificado enla URL es una plantilla.

Alternativamente, si sólo se necesita un documento vacío sin ninguna adaptación, puede serespecificada una URL private:factory.

Dim Dummy()Dim Url As StringDim 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 documentosLa función vista anteriormente loadComponentFromURL vista en la sección previa,retorna un objeto de documento. Esta soporta el serviciocom.sun.star.document.OfficeDocument, el cual se divide en dos interfacescentrales:

• la interface com.sun.star.frame.XStorable, la cual es la responsable de salvardocumentos y

• la interface com.sun.star.view.XPrintable, la cual contiene los métodos paraimprimir documentos.

Cuando se cambie a OpenOffice.org, notará que la funcionalidad de los objetos de documentos ha sidomantenida en gran parte. Los objetos de documentos, por ejemplo, aun proveen métodos para salvar eimprimir documentos. Sin embargo, los nombres y parámetros de los métodos han cambiado.

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

Capítulo 5 Trabajando con documentos OpenOffice.org

Page 70: Guía del programador BASIC - OpenOffice.org

Capítulo 5Trabajando con documentos OpenOffice.org

Doc.Store()

Esta llamada está provista para el documento que ya ha sido asignado a un espacio dememoria. Este no es el caso para documentos nuevos. En este caso, se usa el métodostoreAsURL. Este método también está definido encom.sun.star.frame.XStorable y puede ser usado para definir la dirección deldocumento:

Dim Url As StringDim Dummy()

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

Doc.StoreAsURL(Url, Dummy())

Adicionalmente a los métodos anteriores, com.sun.star.frame.XStorable tambiénprovee algunos métodos de ayuda que pueden ser útiles a la hora de guardar documentos.Estos son:

• hasLocation() - especifica cuando el documento ya tiene asignada una URL.

• IsReadOnly() - especifica cuando el documento tiene la protección de sólo lectura.

• IsModified() - especifica cuando un documento ha sido cambiado desde la última vezque fue gardado.

El código para salvar un documeto se puede extender por estas opciones de manera que eldocumento sea salvado solamente si ha sido modificado y que el nombre de archivo seapreguntado solamente cuando se requiere.

If (Doc.IsModified) ThenIf (Doc.HasLocation And (Not Doc.isReadOnly)) Then

Doc.StoreElse

Doc.StoreAsURL(URL, Dummy())End If

End If

El ejemplo primero verifica que el documento actual haya sido modificado desde la últimavez que fue salvado. Continúa con el proceso de salvado solamente en este caso. Si eldocumento ya tiene asignada una URL y no es de sólo lectura, es salvado bajo la URLexistente. Si no tiene una URL o ha sido abierto en el estado de sólo lectura, es salvado bajouna URL nueva.

Opciones del método storeAsURLAsi como el método loadComponentFromURL, algunas opciones también pueden serespecificadas en la forma de un campo de datos PropertyValue usando el métodostoreAsURL. Esto determina el procedimiento que usará OpenOffice.org cuando salva undocumento. StoreAsURL provee las siguientes opciones.

• CharacterSet (string) – define en cual conjunto de caracteres estará basado undocumento.

• FilterName (string) – espcifica un filtro especial para la funciónloadComponentFromURL. Los nombres de filtros disponibles están definidos en elarchivo

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 71: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

\share\config\registry\instance\org\openoffice\office\TypeDetection.xml.

• FilterOptions (String) – define opciones adicionales para los filtros.

• Overwrite (Boolean) – Permite que un archivo existente sea sobreescrito sinninguna pregunta adicional.

• Password (String) – transfiere la clave para un archivo protegido.

• Unpacked (Boolean) – salva el documento (no comprimido) en subdirectorios.

El siguiente ejemplo muestra como la opción Overwrite puede ser usada conjuntamentecon storeAsURL:

Dim Doc As Object Dim FileProperties(0) As New com.sun.star.beans.PropertyValuesDim 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 esenombre.

Imprimiendo documentosSimilar a salvar, los documentos son impresos directamente por los significados de losobjetos de documento. El método Print de la interfacecom.sun.star.view.Xprintable esta provista para este propósito.

En su forma más simple, la llamada a Print es:

Dim Dummy()

Doc.Print(Dummy())

Como en el caso del método loadComponentFromURL, el parámetro Dummy es uncampo de datos PropertyValue por medio del cual OpenOffice.org puede especificaralgunas opciones para la impresión.

Las opciones del método PrintEl método Print espera un campo de datos PropertyValue como un parámetro, querefleja los parámetros del cuadro de diálogo de impresión de OpenOffice.org

• CopyCount (Integer) – especifica el número de copias a imprimir.

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

• Collate (Boolean) – advierte a la impresora que ordene las páginas de las copias.

• Sort (Boolean) – Ordena las páginas cuando se imprimen varias copias(CopyCount>1).

Capítulo 5 Trabajando con documentos OpenOffice.org

Page 72: Guía del programador BASIC - OpenOffice.org

Capítulo 5Trabajando con documentos OpenOffice.org

• Pages (String) – contiene la lista de las páginas que se van a imprimir (la sintáxis escomo la especificada en el diálogo de impresión)

El siguiente ejemplo muestra como varias páginas de un documento se imprimen usando laopción Pages:

Dim Doc As ObjectDim PrintProperties(0) As New com.sun.star.beans.PropertyValue

PrintProperties(0).Name = "Pages"PrintProperties(0).Value = "1-3; 7; 9"

Doc.Print(PrintProperties())

Selección de impresora y parámetrosLa interface com.sun.star.view.XPrintable provee una propiedad Printer, lacual selecciona la impresora. Esta propiedad recibe un campo de datos PropertyValuecon las siguientes configuraciones:

• Name (String) – especifica el nombre de la impresora.

• PaperOrientation (enum) – especifica la orientación de papel (El valorcom.sun.star.view.PaperOrientation.PORTAIT para impresión vertical, yel valor com.sun.star.view.PaperOrientation.LANDSCAPE para el formatohorizontal)

• PaperFormat (Enum) – especifica el formato del papel (por ejemplo,com.sun.star.view.PaperFormat.A4 para el formato A4 ocom.sun.star.view.PaperFormat.Letter para el tamaño carta)

• PaperSize (Size) – Especifica el tamaño del papel en centésimas de milímetro.

El siguiente ejemplo muestra como se puede cambiar de impresora y puesto el tamaño delpapel con la ayuda de la propiedad Printer:

Dim Doc As ObjectDim PrinterProperties(1) As New com.sun.star.beans.PropertyValueDim PaperSize As New com.sun.star.awt.Size

PaperSize.Width=20000 ' corresponde a 20 cm.PaperSize.Heigth=20000 ' Corresponde a 20 cm

PrinterProperties(0).Name="Name"PrinterProperties(0).Value="HP Deskjet 400 (Monochrome)"

PrinterProperties(1).Name="PaperSize"PrinterProperties(1).Value=PaperSize

Doc.Printer=PrinterProperties()

El ejemplo define un objeto llamado PaperSize del tipo com.sun.star.awt.Size.Esto es necesario para especificar el tamaño del papel. También crea dos campos de datospara PropertyValues llamadas PrinterProperties. Este campo de datos esinicializado con los valores que se le van a asignar a la propiedad Printer. Desde el puntode vista de UNO, Printer no es una propiedad real sino imitada.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 73: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

PantillasLas plantillas son llamadas listas que contienen atributos de formatos. Ellas se mueven entretodas las aplicaciones de OpenOffice.org y ayudan significativamente a simplificar elformateado. Si un usuario cambia uno de los atributos de la plantilla, entoncesOpenOffice.org automáticamente ajusta todas las secciones de documentos que dependen deese atributo. El usuario puede, por ejemplo, cambiar el tipo de fuente de todos los niveles deuno de los encabezados por medio de una modificación central en el documento.Dependiendo del tipo de documento, OpenOffice.org reconoce un rango de diferentes tiposde plantillas.

OpenOffice.org Writer soporta:

• plantillas de caracteres,

• plantilla de párrafos,

• plantilla de marcos,

• plantillas de páginas y

• plantillas de números

OpenOffice.org Calc soporta

• plantillas de celdas

• plantillas de páginas

OpenOffice.org Impress soporta

• plantillas de elementos de caracteres

• plantillas de presentaciones

En la terminología de OpenOffice.org, las diferentes plantillas son llamadasStyleFamilies para concordar con el serviciocom.sun.star.style.StyleFamily en el cual esta basado.

Las StyleFamilies son accesadas por medio del objeto de documento:

Dim Doc As ObjectDim Sheet As ObjectDim StyleFamilies As ObjectDim CellStyles As Object

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesCellStyles = StyleFamilies.getByName("CellStyles")

El ejemplo usa la propiedad StyleFamilies de una hoja de cálculo para establecer unalista que contiene todas las plantillas de celdas disponibles.

Las plantillas individuales pueden ser accesadas directamente por medio de un índice:

Capítulo 5 Trabajando con documentos OpenOffice.org

Page 74: Guía del programador BASIC - OpenOffice.org

Capítulo 5Trabajando con documentos OpenOffice.org

Dim Doc As ObjectDim Sheet As ObjectDim StyleFamilies As ObjectDim CellStyles As ObjectDim CellStyle As Object Dim I As Integer

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesCellStyles = StyleFamilies.getByName("CellStyles")

For I = 0 To CellStyles.Count – 1CellStyles = CellStyle(I)Msgbox CellStyle.Name

Next I

El ciclo agregado al ejemplo anterior despliega los nombres de todas las plantillas de celdasuna después de otra en un cuadro de mensaje.

Detalles sobre varias opciones de formatoCada tipo de plantilla provee un rango de propiedades individuales de formato. Aquí hay unvistazo de las propiedades de formateo más importantes y los puntos en las que estánexplicadas:

• Propiedades de caracteres, capítulo 6, documentos de textoservicio com.sun.star.style.CharacterProperties

• Propiedades de párrafos, capítulo 6, documentos de texto servicio com.sun.star.text.Paragraph

• Propiedades de celdas, capítulo 7, documentos de cálculoservicio com.sun.star.table.CellProperties

• Propiedades de páginas, capítulo 7, documentos de cálculoservicio com.sun.star.style.PageStyle

• Propiedades de elementos de caracteres, capítulo 7, documentos de cálculoVarios servicios

Las propiedades de formato no significan que están restringidas a las aplicaciones en las queestán explicadas, sino que pueden ser usadas universalemente. Por ejemplo, muchas de laspropiedades de páginas están descritas en el capítulo 7, y pueden ser usadas no sólo enOpenOffice.org Calc, sino también en OpenOffice.org Writer.

Para más información acerca de trabajar con plantillas puede ser encontrada en la secciónValores por defecto para las propiedades de carácter y párrafo en el capítulo 6, Documentosde Texto.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 75: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Adicionalmente a cadenas de caracteres, los documentos de texto también contieneninformación sobre los formatos. Estos puede aparecer en cualquier punto del texto. Laestructura es un poco más complicada en las tablas. Esto no solamente incluye cadenas dedimensiones sencillas, sino también campos de dos dimensiones. Muchos programas deprocesamiento de texto actualmente proveen la opción de de colocar objetos de dibujos,marcos de texto, y otros objetos dentro del texto. Esto puede estar fuera del flujo del texto yser colocados en cualquier parte de la página.

Este capítulo presenta las principales interfaces y servicios para los documentos de texto. Laprimera sección detalla la anatomía de los documentos de texto y se concentra en cómo unprograma OpenOffice.org Basic puede ser usado para tomas pasos iteractivos a traves deldocumento OpenOffice.org. Se enfoca en párrafos, porciones de párrafos y sus formatos.

La segunda sección se enfoca en el trabajo eficiente con documentos de texto. Para estepropósito, OpenOffice.org ofrece varios objetos de ayuda, como el objeto TextCursor, el cualse extiende más allá de la especificación de la primera sección.

La tercera sección va más allá del trabajo con textos. Se concentra en tablas, marcos de texto,campos de texto, marcadores, contenidos de directorio y más.

La información sobre cómo crear, abrir, salvar e imprimir documentos está descrita en elcápitulo 5, porque no solamente puede ser usada para documentos de texto, sino también conotros tipos de documentos.

La estructura de los documentos de textoUn documento de texto básicamente puede contener cuatro tipos de información:

• el texto actual

• plantillas para formatear caracteres, párrafos y páginas

• elementos no-texto, como tablas gráficos y objetos de dibujo

• configuración global para el documento de texto

Esta sección se concentra especialmente en el texto y las opciones de formato asociadas.

Capítulo 6 Documentos de texto

Page 76: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

El diseño de la API de OpenOffice.org para OpenOffice.org Writer difiere de las versiones previas. Laversión API anterior concentraba el trabajo en el objeto Selection, el cual estaba muy orientado a la ideade la interface del usuario para el usuario final, enfocado en el trabajo del resaltado controlado por elmouse (ratón).La API de OpenOffice.org ha reemplazado estas conecciones entre la interface del usuario y la interface delprograma. Ahora el programador tiene acceso paralelo a todas las partes de una aplicación y puedetrabajar con diferentes sub secciones de un documento al mismo tiempo. El antiguo objeto Selection yano está más disponible.

Párrafos y porciones de párrafosEl corazón de un documento de texto consiste en una secuancia de párrafos. Estos no estánnombrados o indexados y por eso no hay forma posible de accesar directamente párrafosindividuales. Sin embargo, los párrafos pueden ser atravesados secuancialmente con la ayudadel objeto Enumeration descrito en el capítulo 4. Esto permite que los párrafos seaneditados.

Cuando se trabaja con el objeto Enumeration, un escenario especial puede ser, sin embargo,notado: esto no sólo retorna párrafos, sino también tablas (estrictamente hablando, enOpenOffice.org Writer, una tabla es una forma especial de párrafo). Antes de accesar unobjeto retornado, deberá verificar cuando el objeto retornado soporta el serviciocom.sun.star.text.Paragraph para los párrafos o el serviciocom.sun.star.text.TextTable para las tablas.

El siguiente ejemplo atraviesa el contenido de un documento de texto en un ciclo y usa unmensaje en cada instancia para informar al usuario si el objeto en cuestión es un párrafo ouna tabla:

Dim Doc As ObjectDim Enum As ObjectDim TextElement As Object

' Crea un nuevo objeto de documentoDoc = StarDesktop.CurrentComponent

' Crea un objeto de enumeraciónEnum = Doc.Text.Enumeration

' Ciclo que recorre los elementos de textoWhile Enum.hasMoreElements

TextElement = Enum.NextElement

If TextElement.supportsService("com.sun.star.text.TextTable") ThenMsgbox "el bloque actual contiene una tabla"

End If

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

Wend

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 77: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

PárrafosEl servicio com.sun.star.text.Paragraph garantiza el acceso al contenido de unpárrafo. El texto de un párrafo puede ser obtenido y modificado usando la propiedadString:

Dim Doc As ObjectDim Enum As ObjectDim TextElement As Object

Doc = StarDesktop.CurrentComponentEnum = Doc.Text.Enumeration

While Enum.hasMoreElements TextElement = Enum.nextElement

If TextElement.supportsService("com.sun.star.text.Paragraph") Then TextElement.String = Replace(TextElement.String, "you", "U")

TextElement.String = Replace(TextElement.String, "too", "2")TextElement.String = Replace(TextElement.String, "for", "4")

End IfWend

El ejemplo abre el documento de texto actual y pasa por medio de él con la ayuda del objetoEnumeration. Este usa la propiedad TextElement.String en todos los párrafos para accesar lospárrafos relevantes y reemplaza las cadenas, "you", "too" y "for" con los caracteres "U", "2"y "4". La función Replace es usada para reemplazar no cae dentro del alcance lingüísticostandard del OpenOffice.org Basic. Esto es una instancia de ejemplo de función descrita en elcapítulo 3, en la sección Búsqueda y reemplazo.

El contenido del procedimiento descrito aquí para el acceso de párrafos de un texto es comparable con ellistado Paragraphs usado en VBA, el cual está provisto por los objetos Range y Document disponiblesaquí. Mientras en VBA los párrafos son accesados por su número (por ejemplo mediante la llamada Paragraph(1)), en OpenOffice.org Basic, el objeto Enumeration se decribió previamente cómo debeusarse.No hay contraparte directa en OpenOffice.org Basic, para las listas Characters, Sentences, y Wordsprovistas en VBA. Sin embargo, tiene la opción puede cambiar a TextCursor el cual permite lanavegación a nivel de caracteres, frases y palabras. (refierase a TextCursor)

Porciones de párrafosEn el ejemplo previo se pudo cambiar texto, según se requiera, pero algunas veces también sepuede destruir un formato.

Esto es porque el párrafo de turno consiste en sub objetos individuales. Cada uno de estos subobjetos consiste en su propia información de formateado. Si se centra un párrafo, porejemplo, contiene una palabra escrita en negrita, entonces esto es representado enOpenOffice.org por tres porciones de párrafos: La porción antes de la negrita, luego lapalabra en negrita, y finalmente la porción después de la negrita, que de nuevo es puestacomo normal.

Si el párrafo es cambiado usando la propiedad del párrafo String, entonces OpenOffice.orgprimero borra las viejas porciones de párrafo e inserta una nueva porción de párrafo. Elformateo de las secciones previas es borrado.

Para prevenir este efecto, el usuario puede accesar las porciones de párrafo asociadas en lugar

Capítulo 6 Documentos de texto

Page 78: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

del párafo entero. Los párrafos proveen su propio objeto Enumeration para este propósito. Elsiguiente ejemplo muestra un ciclo doble que pasa por todos los párrafos del documento detexto y las porciones de párrafos que contienen y aplica el proceso de reemplazamiento delejemplo previo:

Dim Doc As ObjectDim Enum1 As ObjectDim Enum2 As Object Dim TextElement As ObjectDim TextPortion As Object

Doc = StarDesktop.CurrentComponentEnum1 = Doc.Text.Enumeration

'Ciclo por todos los párrafosWhile Enum1.hasMoreElements

TextElement = Enum1.nextElementIf TextElement.supportsService("com.sun.star.text.Paragraph") Then

'Ciclo por los sub párrafosWhile Enum2.hasMoreElements

TextPortion = Enum2.nextElementMsgbox = "'" & TextPortion.String & "'"TextElement.String = Replace(TextPortion.String, "you", "U")TextElement.String = Replace(TextPortion.String, "too", "2")TextElement.String = Replace(TextPortion.String, "for", "4")

WendEnd If

Wend

El ejemplo corre por el documento de texto en un ciclo doble. El ciclo de afuera se refiere alos párrafos del texto. El ciclo interno procesa las pociones de párrafos en estos párrafos. Elejemplo de código modifica el contenido en cada una de las porciones de párrafo, usando lapropiedad String de la cadena, como en el caso del ejemplo para los párrafos. Sin embargo,como las porciones de párrafo son editadas directamente, la información del formato esretenida cuando se reemplazan las cadenas.

FormateandoHay varias formas para el formateado del texto. La forma más simple es asignar laspropiedades directamente a la secuencia de texto. Esto es llamado formateo directo. Elformateo directo es usado en particular con documentos cortos, porque estos formatos puedenser asignados por el usuario con el mouse. Se puede, por ejemplo, marcar cierta palabradentro de un texto usando la negrita o centrar una línea.

Adicionalmente al formateo directo, también puede formatear usando plantillas. Esto esllamado formateo indirecto. Con el formateo indirecto, el usuario asigna plantillas predefinidas a ciertas partes del texto. Si el esquema del texto es cambiado posteriormente, elusuario solamente tiene que cambiar la plantilla. OpenOffice.org cambia la forma de todaslas porciones de texto que usan esa plantilla.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 79: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

En VBA, las propiedades de formateado de un objeto está normalmente por encima de los sub objetos (porejemplo, Range.font, Range.Borders, Range.Shading, Range.ParagraphFormat). Las propiedadesson accesados por significado de expresiones en cascada. (Por ejemplo, Range.Font.AllCaps). EnOpenOffice.org Basic, las propiedades de formateado por el contrario están disponibles directamente,usando los objetos adecuados (TextCursor, Paragraph, y asi). Puede encontrar un vistazo de laspropiedades de párrafo disponibles en las dos secciones siguientes

Propiedades de caracteresLas propiedades de formato que se refieren a caracteres individuales son llamadaspropiedades de caracteres. Estas incluyen la negrita y el tipo de fuente. Los objetos quepermiten esto, tienen que soportar el serviciocom.sun.star.style.CharacterProperties. OpenOffice.org reconoce unamplio rango de servicios que soportan este servicio. Estos incluyen los servicioscom.sun.star.text.Paragraph para los párrafos y también el serviciocom.sun.star.text.TextPortion para las porciones de párrafos.

El servicio com.sun.star.style.CharacterProperties no provee ningunainterface, pero en cambio, ofrece un rango de propiedades mediante las cuales laspropiedades de párrafos pueden ser definidas y llamadas. Una lista completa de todas laspropiedades de caracteres pueden ser encontradas en la referencia de la API deOpenOffice.org. La siguiente lista describe las propiedades más importantes.

• CharFontName (string) – nombre de la fuente seleccionada.

• CharColor (Long) – color del texto.

• CharHeight (Float) – tamaño de la fuente en puntos (pt).

• CharUnderline (Constant group) – tipo de subrayado (constantes en concordancia concom.sun.star.awt.FontUnderLine)

• CharWeight (Constant group) – ancho del carácter (constantes en concordancia concom.sun.star.awt.FontWeight)

• CharBackColor (Long) – color del fondo.

• CharKeepTogether (Boolean) – suprimir el salto de línea.

• CharStyleName (String) – nombre de la plantilla.

Propiedades de párrafosLa información de formatos que no se refiere a caracteres individuales, sino a un párrafoentero es considerada como una propiedad de párrafo. Esto incluye la distancia de un párrafoal borde de la página, y el espaciado de las líneas. Las propiedades de los párrafos estándisponibles desde el servicio com.sun.star.style.ParagraphProperties.

Las propiedades de los párrafos están disponibles desde varios objetos. Todos los objetos quesoporten el servicio com.sun.star.text.Paragraph también proveen soporte paralas propiedades de párrafo en el serviciocom.sun.star.style.ParagraphProperties.

Una lista completa de las propiedades de párrafos pueden ser encontradas en la referencia dela API de OpenOffice.org. Las propiedades de párrafos más comunes son:

Capítulo 6 Documentos de texto

Page 80: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

• ParaAdjust (enum) – orientación del texto vertical (constantes en concordancia concom.sun.star.style.ParagraphAdjust).

• ParaLineSpacing (struct) – Espaciado de las líneas (estructura en concordancia concom.sun.star.style.LineSpacing)

• ParaBackColor (Long) – color de fondo.

• ParaLeftMargin (Long) – margen izquierdo en centésimas de milímetro.

• ParaRightMargin (Long) – margen derecho en centésimas de milímetro.

• ParaTopMargin (Long) – margen superior en centésimas de milímetro.

• ParaBottomMargin (Long) – margen inferior en centésimas de milímetro.

• ParaTabStops (Array of struct) – tipo y posición de los tabuladores (matriz conestructura del tipo com.sun.star.style.TabStop).

• ParaStyleName (String) – nombre de la plantilla del párrafo.

Ejemplo: exportación a HTML simpleEl siguiente ejemplo demuestra cómo trabajar con el formateo de la información. Va pasandopor el documento de texto y crea un archivo HTML simple. Cada párafo es grabado con supropio elemento <P> para este propósito. Las pociones de párrafo son desplegadas en negritay marcadas usando el elemento HTML <B> cuando se exportan:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 81: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim FileNo As Integer, Filename As String, CurLine As StringDim Doc As ObjectDim Enum1 As Object, Enum2 As ObjectDim TextElement As Object, TextPortion As Object

Filename = "c:\text.html"FileNo = FreefileOpen Filename For Output As #FileNoPrint #FileNo, "<HTML><BODY>"

Doc = StarDesktop.CurrentComponentEnum1 = Doc.Text.createEnumeration

' Ciclo sobre todos los párrafos

While Enum1.hasMoreElementsTextElement = Enum1.nextElementIf TextElement.supportsService("com.sun.star.text.Paragraph") Then

Enum2 = TextElement.createEnumerationCurLine = "<P>"

' ciclo sobre las porciones de párrafosWhile Enum2.hasMoreElements

TextPortion = Enum2.nextElementIf TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN

CurLine = CurLine & "<B>" & TextPortion.String & "</B>"Else

CurLine = CurLine & TextPortion.StringEnd If

Wend

' Salida de la línea CurLine = CurLine & "</P>"Print #FileNo, CurLine

End If

Wend

' Escribe el pie del HTML

Print #FileNo, "</BODY></HTML>"

Close #FileNo

La estructura básica de el ejemplo está orientada a los ejemplo vistos de ejecutarse a travesde las porciones de párrafos de un texto que ya se ha discutido. Las funciones para escribir elarchivo HTML, también es una código de prueba del peso de la fuente de las porciones detexto correspondientes, y provee porciones de párrafos en negrita con su etiquetacorrespondiente en HTML, que ha sido agregada.

Valores por defecto para las propiedades de párrafo y carácterEl formateo directo siempre tiene prioridad sobre el formateo indirecto. En otras palabras, elformateado usando plantillas tiene asignado menor prioridad que el formateado directo en untexto.

Establecer cuándo una sección de un documento ha sido formateada directa o indirectamenteno es fácil. Las barras de símbolos provistas por OpenOffice.org muestran las propiedadescomunes de texto, como tipo de fuente, peso y tamaño. Sin embargo, los ajustescorrespondientes basados en plantillas o formateo directo en el texto, no están claros.

OpenOffice.org Basic provee el método getPropertyState, con el cual losprogramadores pueden verificar cómo cierta propiedad ha sido formateada. Como unparámetro, toma el nombre de la propiedad y retorna una constante que provee informaciónacerca del origen del formato. Las siguientes respuestas posibles, están definidas en la

Capítulo 6 Documentos de texto

Page 82: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

enumeración com.sun.star.beans.PropertyState:

• com.sun.star.beans.propertyState.DIRECT_VALUE – esta propiedad esdefinida directamente en el texto. (formateo directo).

• com.sun.star.beans.propertyState.DEFAULT_VALUE – esta propiedad esdefinida por una plantilla (formateo indirecto).

• com.sun.star.beans.propertyState.AMBIGUOS_VALUE – esta propiedad noestá clara. Este estado es levantado, por ejemplo, cuando se pregunta por la propiedadnegrita de un párrafo, que incluye palabras marcadas en negrita y palabras marcadas enfuente normal.

El siguiente ejemplo muestra como las propiedades del formato pueden ser editados enOpenOffice.org. Busca por el texto por porciones de párrafos que han sido marcados connegrita usando formateo directo. Si encuentra la porción de párrafo correspondiente, borra elformateo directo usando el método setPropertytoDefault y asigna el carácter deplantilla MyBold a la porción de párrafo correspondiente.

Dim Doc As ObjectDim Enum1 As ObjectDim Enum2 As ObjectDim TextElement As ObjectDim TextPortion As Object

Doc = StarDesktop.CurrentComponentEnum1 = Doc.Text.createEnumeration

' ciclo sobre todos los párrafos

While Enum1.hasMoreElementsTextElement = Enum1.nextElementIf TextElement.supportsService("com.sun.star.text.Paragraph") Then

Enum2 = TextElement.createEnumeration

' ciclo sobre todas las porciones de párrafoWhile Enum2.hasMoreElements

TextPortion = Enum2.nextElementIf TextPortion.CharWeight = _ com.sun.star.awt.FontWeight.BOLD AND _ TextPortion.getPropertyState("CharWeight") = _ com.sun.star.beans.PropertyState.DIRECT_VALUE Then

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

End IfWend

End If

Wend

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 83: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

com.sun.star.text.TextCursor para tareas más complicadas, que incluyenavegación en reversa en un documento o la navegación basada en frases y palabras en lugarde TextPortions.

El TextCursorEl TextCursor en la API de OpenOffice.org Basic es comparable con el cursor visible en undocumento OpenOffice.org. Marca cierto punto dentro de un documento de texto y puedenavegar en varias direcciones por medio del uso de comandos. El objeto TextCursordisponible en OpenOffice.org Basic, sin embargo, no debe ser confundido con el cursorvisible. Estas son dos cosas diferentes.

Advertencia! La terminología difiere de la usada en VBA: En términos de función de búsqueda, el objeto Range de VBA puede ser comparada con el objeto TextCursor en OpenOffice.org y no – como el nombreposiblemente indique – con el objeto Range de OpenOffice.org.El objeto TextCursor en OpenOffice.org, por ejemplo, provee métodos para la navegación y el cambio detexto que están incluidos en el objeto Range de VBA (por ejemplo, MoveStart, MoveEnd, InsertBefore, InsertAfter). La correspondientecontraparte del objeto TextCursor en OpenOffice.org están descritos enlas siguientes secciones.

Navegando dentro de un textoEl objeto TextCursor en OpenOffice.org Basic actua independientemente del cursor visibleen un documento de texto. La posición controlada por programa sobre el objetoTextCursor no tiene impacto sobre donde esté el cursor visible. Algunos objetosTextCursor pueden ser abiertos individualmente en el mismo documento en variasposiciones, las cuales son independientes unas de otras.

Un objeto TextCursor puede ser creado usando la llamada createTextCursor:

Dim Doc As ObjectDim Cursor As Object

Doc = StarDesktop.CurrentComponentCursor = TextDocument.Text.createTextCursor()

El objeto Cursor creado de esta manera soporta el serviciocom.sun.star.text.TextCursor, el cual retorna y provee un amplio rango demétodos para navegar dentro del documento de texto. El siguiente ejemplo primero mueve elTextCursor 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 enun punto del texto usando el mouse. El parámetro False en la función previa especificacuando 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 caracteresy las resalta. El área resaltada por el TextCursor entonces empieza después del séptimo

Capítulo 6 Documentos de texto

Page 84: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

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

Aquí están los principales métodos del servicio com.sun.star.text.TextCursorprovistos para la navegación:

• goLeft (Count, Expand) – salta el número de caracteres a la izquierda.

• goRight (Count, Expand) – salta el número de caracteres a la derecha

• gotoStart (Expand) – salta al inicio del documento

• gotoEnd (Expand) – salta al final del documento

• gotoRange (TextRange, Expand) – salta al objeto especificado en TextRange

• gotoStartOfWord (Expand) – salta al inicio de la palabra actual

• gotoEndOfWord (Expand) – salta al final de la palabra actual

• gotoNextWord (Expand) – salta al inicio de la siguiente palabra

• gotoPreviousWord (Expand) – salta al inicio de la palabra anterior

• isStarOfWord () - retorna verdadero si el TextCursor está al inicio de una palabra

• isEndOfWord () - retorna verdadero si el TextCursor está al final de una palabra

• gotoStartOfParagraph (Expand) – salta al inicio del párrafo actual

• gotoEndOfParagraph (Expand) – salta al final del párrafo actual

• gotoNextParagraph (Expand) – salta al inicio del siguiente párrafo

• gotoPreviousParagraph (Expand) – salta al inicio del párrafo anterior

• isStarOfParagraph () - retorna verdadero si el TextCursor está al inicio de unpárrafo

• isEndOfParagraph () - retorna verdadero si el TextCursor está al final de un párrafo

El texto está dividido en sentecias en la base de los símbolos de las sentecias. Los puntos son,por ejemplo, interpretados como símbolos que marcan el final de una sentencia.

El parámetro Expand es un valor booleano que especifica cuando el área por la que se pasadurante la nevegación va a ser resaltada. Todos los métodos de navegación retornan unparámetro el cual especifica cuando la navegación ha sido satisfactoria o cuando la acción hasido terminada por falta de texto.

La siguiente es una lista de algunos métodos para editar áreas resaltadas usandoTextCursor y las cuales soportan el servicio com.sun.star.text.TextCursor.

• CollapseToStart () - resetea el resaltado y posición del TextCursor al inicio delárea resaltada anterior.

• CollapseToEnd () - resetea el resaltado y posición del TextCursor al final del árearesaltada anterior.

• IsCollapsed () - retorna verdadero cuando el TextCursor no cubre ninguna árearesaltada actualmente.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 85: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Formateando texto con TextCursorEl servicio com.sun.star.text.TextCursor soporta todos los caracteres ypropiedades de párrafos que están presentes al inicio de este capítulo.

El siguiente ejemplo muestra cómo estos pueden ser usados conjuntamente con TextCursor.Pasa por el documento completo y formatea la primera palabra de cada sentencia con negrita.

Dim Doc As ObjectDim Cursor As ObjectDim Proceed As Boolean

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor

Do

Cursor.gotoEndOfWord(True)Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLDProceed = 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. Luegointeractúa con todo el texto, oración por oración, y resalta cada una de las primeras palabras yle pone un formato de negrita.

Obteniendo y modificando contenidos del textoSi un TextCursor contiene un área resaltada, entonces el texto está disponible porsignificado mediante la propiedad String del objeto TextCursor. El siguiente ejemplousa la propiedad String y despliega las primeras palabras de una oración en un cuadro demensajes:

Dim Doc As ObjectDim Cursor As ObjectDim Proceed As BooleanDoc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor

Do

Cursor.gotoEndOfWord(True)MsgBox Cursor.StringProceed = Cursor.gotoNextSentence(False)Cursor.gotoNextWord(False)

Loop While Proceed

La primera palabra de cada oración puede ser modificada de la misma manera usando lapropiedad String:

Capítulo 6 Documentos de texto

Page 86: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

Dim Doc As ObjectDim Cursor As ObjectDim Proceed As Boolean

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor

DoCursor.gotoEndOfWord(True)Cursor.String = "Ups"Proceed = Cursor.gotoNextSentence(False)Cursor.gotoNextWord(False)

Loop While Proceed

Si TextCursor contiene un area resaltada, una asignación a la propiedad Stringreemplaza esta con un texto nuevo. Si no hay área resaltada, el texto es insertado en laposición actual de TextCursor.

Insertando códigos de controlEn algunas situaciones, no es necesario cambiar el texto, pero si la estructura del documentolo que se necesita modificar. OpenOffice.org provee códigos de control para estos propósitos.Estos son insertados e influyen en la estructura. Los códigos de control están definidos en elgrupo de constantes com.sun.star.text.ControlCharacter. Los siguientescódigos de control están disponibles en OpenOffice.org:

• PARAGRAPH_BREAK – salto de párrafo.

• LINE_BREAK – salto de línea.

• SOFT_HYPEN – posible punto de sílaba.

• HARD_HYPEN – punto de sílaba obligatorio.

• HARD_SPACE – protege el espacio para que no sea ampliado o comprimido en lajustificación del texto.

Para insertar los códigos de control, neceritará no sólo el cursor, sino tambíen los objetos detexto asociados. El siguiente ejemplo inserta y párrafo después del vigésimo carácter de untexto.

Dim Doc As ObjectDim Cursor As ObjectDim Proceed as Boolean

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.CreateTextCursorCursor.goRight(20,False)

Doc.text.insertControlCharacter( Cursor, _com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)

El parámetro False en la llamada al método insertControlCharacter asegura queel área actualmente seleccionada por el TextCursor permanezca después de la operaciónde inserción. Si el parámetro True es pasado aquí, entonces elinsertControlCharacter reemplaza el área actual.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 87: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Búscando porciones de textoEn muchas circunstancias, el caso es que un texto es buscado para un término particular y enel punto correspondiente debe ser editado. Todos los documentos de OpenOffice.org proveenuna interface especial para este propósito, y esta interface funciona en concordancia con elmismo principio: antes del proceso de búsqueda, que es comúnmente referido como unSearchDescriptor que debe ser primeramente creado. Esto define que OpenOffice.orgdebe buscar en un documento. Un SearchDescriptor es un objeto que soporta elservicio com.sun.star.util.SearchDescriptor y es creado por significado delmétodo createSearchDescriptor de un documento:

Dim SearchDesc As ObjectSearchDesc = Doc.createSearchDescriptor

Una vez que el SearchDescriptor ha sido creado, recibe el texto que debe ser buscado:

SearchDesc.searchString = "Cualquier texto"

En términos de su función, el SearchDescriptor es comparable con el diálogo debúsqueda de OpenOffice.org. De la misma manera que en la ventana de búsqueda, losparámetros necesita una búsqueda que pueda ser asignada en el objetoSearchDescriptor.

Las propiedades están provistas por el serviciocom.sun.star.util.SearchDescriptor:

• SearchBackwards (boolean) – busca por el texto hacia atrás, en lugar de haciaadelante.

• SearchCaseSensitive (boolean) – toma en consideración las mayúsculas y lasminúsculas durante la búsqueda.

• SearchRegularExpression (boolean) – trata la expresión de búsqueda como unaexpresión regular.

• SearchStyles (boolean) – busca por el texto por una plantilla de párrafo especifica.

• SearchWords (boolean) – busca solamente palabras completas.

La función de OpenOffice.org SearchSimilarity (o "concordancia difusa") tambiénestá disponible en OpenOffice.org Basic. Con esta función, OpenOffice.org busca unaexpresión que pueda ser similar pero no exactamente igual a la expresión de búsqueda. Elnúmero de caracteres adicionales, borrados o modificados por esta expresión pueden serdefinidas individualmente. Aquí están las propiedades asociadas del serviciocom.sun.star.util.SearchDescriptor:

• SearchSimilarity (boolean) – realiza una búsqueda por similaridad.

• SearchSimilarityAdd (short) – número de caracteres que pueden ser agregados parauna búsqueda por similaridad.

• SearchSimilarityExchange (short) – número de caracteres que pueden serreemplazados como parte de una búsqueda por similaridad.

• SearchSimilarityRemove (short) – número de caracteres que pueden ser removidos

Capítulo 6 Documentos de texto

Page 88: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

como parte de una búsqueda por similaridad.

• SearchSimilarityRelax (boolean) – toma todas las reglas de desviación enconsideración al mismo tiempo para la expresión de búsqueda.

Una vez que el SearchDescriptor ha sido preparado según los requerimientos, puedeser aplicado al documento de texto. El documento OpenOffice.org provee los métodosfindFirst y findNext para este propósito:

Found = Doc.findFirst (SearchDesc)Do While Found

' Suchergebnis bearbeitenFound = Doc.findNext( Found.End, Search)

Loop

El ejemplo encuentra todas las concordancias en un ciclo y retorna un objeto TextRange, elcual hace referencia al pasaje de texto encontrado.

Ejemplo: búsqueda por similaridadEste ejemplo muestra como un texto puede ser buscado por la palabra "turnover" y losresultados formateados en negrita. Si una búsqueda por similaridad es usada no sólo seencuentra la palabra "turnover", sino también son encontradas el plural "turnovers" y lasdeclinaciones "turnover's". Las expresiones encontradas difieren por más de dos letras de laexpresión buscada:

Dim SearchDesc As ObjectDim Doc As Object

Doc = StarDesktop.CurrentComponent

SearchDesc = Doc.createSearchDescriptorSearchDesc.SearchString="turnover"SearchDesc.SearchSimilarity = TrueSearchDesc.SearchSimilarityAdd = 2SearchDesc.SearchSimilarityExchange = 2SearchDesc.SearchSimilarityRemove = 2SearchDesc.SearchSimilarityRelax = False

Found = Doc.findFirst (SearchDesc)

Do While FoundFound.CharWeight = com.sun.star.awt.FontWeight.BOLDFound = Doc.findNext( Found.End, Search)

Loop

La idea básica de búsqueda y reemplazo en OpenOffice.org es comparable a la usada en VBA. Ambasinterfaces están provistas por medio de un objeto, por medio del cual las propiedades de búsqueda yreemplazo pueden ser definidos. Este objeto entonces es aplicado al texto requerido para realizar laacción. De esta manera el objeto auxiliar responsable en VBA puede ser accesado mediante la propiedadFind del objeto Range, en OpenOffice.org Basic es creado por la llamada a createSearchDescriptor ocreateReplaceDescriptor del objeto de documento. Asi las propiedades y métodos disponible puedencambiar.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 89: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Como en la antigua API de OpenOffice.org, buscar y reemplazar texto en la nueva API también es usandoel objeto de documento. Mientras previamente había un objeto llamado SearchSettings especialmente paradefinir estas opciones, en el nuevo objeto las búsquedas son hechas usando un objeto SearchDescriptor oReplaceDescriptor para reemplazar texto automáticamente. Estos objetos cubren no solo las porciones,sino también el documento de texto actual, y si es necesario, el reemplazo de texto asociado. Losdescriptores del objeto son creados usando el objeto de documento, completados en concordancia con laspeticiones relevantes, y luego transferidas de nuevo al objeto de documento como un parámetro para losmétodos de búsqueda.

Reemplazando porciones de textoDe la misma forma que la función de búsqueda, la función de reemplazo de OpenOffice.orgtambién está disponible en OpenOffice.org Basic. Las dos funciones son manejadas demanera idéntica. Un objeto especial que graba los parámetros para el proceso también esnecesario para el proceso de reemplazo. Es llamado ReplaceDescriptor y soporta elservicio com.sun.star.util.ReplaceDescriptor. Por ejemplo, durante elproceso de reemplazo, las mayúsculas y minúsculas puede ser activado y desactivado, ybúsquedas por similaridad pueden ser realizadas.

El siguiente ejemplo demuestra el uso de ReplaceDescriptor para una búsqueda dentrode un documento OpenOffice.org:

Dim I As LongDim Doc As ObjectDim Replace As ObjectDim BritishWords(5) As StringDim USWords(5) As String

BritishWords() = Array("colour", "neighbour", "centre", "behaviour", _"metre", "through")

USWords() = Array("color", "neighbor", "center", "behavior", _"meter", "thru")

Doc = StarDesktop.CurrentComponentReplace = Doc.createReplaceDescriptor

For O = 0 To 5Replace.SearchString = BritishWords(I)Replace.ReplaceString = USWords(I)Doc.replaceAll(Replace)

Next n

La expresión para búsqueda y reemplazo es puesta usando las propiedades SearchStringy ReplaceString del ReplaceDescriptors. El proceso actual de reemplazo esfinalmente implementado usando el método replaceAll del objeto de documento, el cualreemplaza todas los casos de la expresión buscada.

Ejemplo: búsqueda y reemplazo de texto con expresiones regularesLa función de reemplazo de OpenOffice.org es particularmente efectiva si se usa en conjuntocon expresiones regulares. Esto provee la opción de definir expresiones de búsquedavariables con comodines y caracteres especiales en lugar de valores fijos.

Las expresiones regulares soportadas por OpenOffice.org están desccritas con detalle en lasección de ayuda en línea para OpenOffice.org. Aquí hay unos cuantos ejemplos:

• Un punto dentro de una expresión de búsqueda reemplaza cualquier carácter. La expresiónde búsqueda sh.rt entonces puede encontrar shirt y short.

Capítulo 6 Documentos de texto

Page 90: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

• El carácter ^ marca el inicio de un párrafo. Todas las ocurrencias del nombre Pedro queestén al inicio de un párrafo pueden ser encontradas usando la expresión de búsqueda^Pedro.

• El carácter $ marca el final de un párrafo. Todas los casos del nombre Pedro que están alfinal de un párrafo pueden ser encontrados usando la expresión de búsqueda Pedro$.

• Un * indica que el carácter precedente puede ser repetido cualquier número de veces.Puede ser combinado con el punto como un comodín para cualquier carácter. La expresióntemper.*a, por ejemplo, puede encontrar las palabras temperancia ytemperatura.

El siguiente ejemplo muestra cómo todas las líneas vacías en un documento de texto puedenser removidas con la ayuda de las expresiones regulares ^$:

Dim Doc As ObjectDim Replace As ObjectDim I As Long

Doc = StarDesktop.CurrentComponentReplace = Doc.createReplaceDescriptorReplace.SearchRegularExpression = TrueReplace.SearchString = "^$"Replace.ReplaceString = ""

Doc.replaceAll(Replace)

Documentos de texto: más que sólo textoMás adelante, este capítulo fue solamente con párrafos de texto y sus porciones. Pero losdocumentos de texto también pueden contener otros objetos. Esto incluye tablas, dibujos,campos de texto y directorios. Todos estos objetos pueden ser anclados en cualquier puntodentro de un texto.

Gracias a estas características comunes, todos estos objetos en OpenOffice.org soportan unservicio básico llamado com.sun.star.text.TextContent. Esto provee lassiguientes propiedades:

• AnchorType (Enum) – detemina el tipo de ancla de un objeto TextContent (los valorespor defecto de acuerdo con la enumeracióncom.sun.star.text.TextContentAnchorType)

• AnchorTypes (Enum) – Enumeración de todas las AnchorTypes que soportan unobjeto especial TextContent.

• TextWrap (Enum) – determina el tipo de ajuste de texto alrededor de un objetoTextContent (los valores por defecto de acuerdo con la enumeracióncom.sun.star.text.WrapTextMode)

El objeto TextContent también comparten algunos métodos – en particular, aquellos parala creación, inserción y borrado de objetos.

• Un objeto TextContent nuevo es creado usando el método CreateInstance de unobjeto de documento.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 91: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• Los objetos TextContent son borrados usando el método removeTextContent.

Encontrará un rango de ejemplos de estos métodos en las siguientes secciones.

TablasEl siguiente ejemplo crea una tabla con la ayuda de el método createInstance descritopreviamente.

Dim Doc As ObjectDim Table As ObjectDim Cursor As Object

Doc = StarDesktop.CurrentComponent

Cursor = Doc.Text.createTextCursor()

Table = Doc.createInstance("com.sun.star.text.TextTable")

Table.initialize(5, 4)

Doc.Text.insertTextContent(Cursor, Table, False)

Una vez creado, la tabla es puesta con el número de filas y columnas requeridas usando lallamada initialize y luego insertada en el documento de texto usandoinsertTextContent.

Como puede ver en el ejemplo, el método insertTextContent espera no solo el objetocontent que va a ser insertado, sino también dos parámetros:

• Un objeto Cursor que determina la posición de insertado.

• Una variables boolean que especifica cuando el objeto Content va a reemplazar laselección actual del cursor (valor verdadero) o va a ser insertado antes de la selecciónactual en el texto (valor falso).

Cuando crea o inserta tablas en un documento de texto, los objetos disponibles en VBA son similares enOpenOffice.org Basic: El objeto de documento TextCursor en OpenOffice.org Basic o la contraparte Range en VBA. Mientras el método Document.Tables.Add toma la tarea de crear y ajustar una tabla enVBA, este es creado en OpenOffice.org Basic en concordancia con el ejemplo previo usandoCreateInstance, inicializando el documento por medio de insertTextContent.

Las tablas insertadas en un documento de texto pueden ser determinadas usando un simpleciclo. El método del documento de texto getTextTables() es usado para este propósito:

Dim Doc As ObjectDim TextTables As ObjectDim Table As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponentTextTables = Doc.getTextTables()

For I = 0 to TextTables.count – 1Table = TextTables(I)' Editando la tabla

Next I

Capítulo 6 Documentos de texto

Page 92: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

Las tablas de texto están disponibles en OpenOffice.org por medio de la lista TextTables del objeto dedocumento. Esto tiene lugar de la lista de tablas formadas provistas por el objeto Selection. El ejemploprevio muestra cómo una tabla de texto puede ser creada. Las opciones para accesar una tabla de textoestán descritas a continuación.

Editando tablasUna tabla consiste en filas individuales. Estas por vez contienen varias celdas. Estrictamentehablando, no hay columnas en las tablas de OpenOffice.org. Estas son producidassimplemente por el arreglo de filas (una bajo la otra) unas juntas a otras. Para simplificar elacceso a las tablas, OpenOffice.org provee algunos métodos con los que se pueden operar lascolumnas. Estos son útiles si no hay celdas combinadas en la tabla.

Primero tomemos las propiedades de la tabla misma. Estas están definidas en el serviciocom.sun.star.text.TextTable. Aquí están las propiedades más importantes delobjeto tabla:

• BackColor (Long) – Color de fondo de la tabla.

• BottomMargin (Long) – margen inferior en centésimas de milímetro.

• LeftMargin (Long) – margen izquierdo en centésimas de milímetro.

• RightMargin (Long) – margen derecho en centésimas de milímetro.

• TopMargin (Long) – margen superior en centésimas de milímetro.

• RepeatHeadline (boolean) – el encabezado de la tabla es repetido en cada página.

• Width (Long) – ancho absoluto de la tabla en centésimas de milímetro.

FilasUna tabla consiste en una lista de filas. El siguiente ejemplo muestra como las filas de unatabla pueden ser obtenidas y formateadas:

Dim Doc As ObjectDim Table As ObjectDim Cursor As ObjectDim Rows As ObjectDim Row As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponentCursor = 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() - 1Row = Rows.getByIndex(I)Row.BackColor = &HFF00FF

Next

El ejemplo primero crea una lista conteniendo todas las filas usando la llamadaTable.getRows. Los métodos getCount y getByIndex permiten que la lista seaprocesada posteriormente y pertenece a la interfacecom.sun.star.table.XtableRows. El método GetByIndex retorna el objeto fila,y soporta el servicio com.sun.star.text.TextTableRow.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 93: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Aquí están los métodos principales de la interfacecom.sun.star.table.XtableRows:

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

• GetCount () - retorna el número de objetos de fila.

• InsertByIndex (Index, Count) – inserta las filas especificadas en Count en laposición Index.

• RemoveByIndex (Index, Count) – borras las filas especificadas en Count en laposición Index.

Mientras los métodos getByIndex y getCount están disponibles en todas las tablas, losmétodos insertByIndex y removeByIndex solamente pueden ser usados en tablasque no contengan celdas combinadas.

El servicio com.sun.star.text.textTableRow provee las siguientes propiedades:

• BackColor (long) – color de fondo de la fila.

• Height (Long) – alto de la linea en centésimas de milímetro.

• IsAutoHeight (boolean) – el alto de la fila es adaptado dinámicamente al contenido.

• VertOrient (const) – orientación vertical del marco de texto – los detalles sobre laorientación vertical del texto en una tabla. (valores de acuerdo concom.sun.star.text.VertOrientation)

ColumnasLas columnas son accesadas de la misma forma que las filas, usando los métodosgetByIndex, getCount, insertByIndex y removeByIndex en el objeto Column,el cual es accesado por medio de getColumns. Sin embargo, estos pueden ser usados entablas que no contengan celdas combinadas. Las celdas no pueden ser formateadas porcolumna en OpenOffice.org Basic. Para hacer eso, debe usarse el método de formateo deceldas individuales.

CeldasCada celda en un documento OpenOffice.org tiene un nombre único. Si el cursor deOpenOffice.org está en una celda, entonces el nombre de la celda puede verse en la barra deestado. La celda superior izquierda es llamada A1, y la fila inferior derecha es normalmentellamada Xn, donde X es la letra de la columna y n el número de la última fila. Los objetosceldas están disponibles por medio del método getCellByName() del objeto de tabla. Elsiguiente ejemplo muestra como un ciclo pasa por todas las celdas de una tabla e introduce elnúmero correspondiente de celda y columna dentro de la celda:

Capítulo 6 Documentos de texto

Page 94: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

Dim Doc As ObjectDim Table As ObjectDim Cursor As ObjectDim Rows As ObjectDim RowIndex As IntegerDim Cols As ObjectDim ColIndex As IntegerDim CellName As StringDim Cell As Object

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor()Table = Doc.createInstance("com.sun.star.text.TextTable")Table.initialize(5, 4)Doc.Text.insertTextContent(Cursor, Table, False)

Rows = Table.getRowsCols = Table.getColumns

For RowIndex = 1 To Rows.getCount()

For ColIndex = 1 To Cols.getCount()CellName = Chr(64 + ColIndex) & RowIndexCell = 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 interfaceTextCursor para crear un objeto TextCursor asociado.

CellCursor = Cell.createTextCursor()

Todas las opciones de formato para caracteres individuales y párrafos quedanautomáticamente disponibles.

El siguiente ejemplo busca por todas las tablas de texto y aplica el formato de alineaciónderecha a todas las celdas con valores numéricos mediante significado de la propiedad depárrafo correspondiente.

Dim Doc As ObjectDim TextTables As ObjectDim Table As ObjectDim CellNamesDim Cell As ObjectDim CellCursor As ObjectDim I As IntegerDim J As Integer

Doc = StarDesktop.CurrentComponentTextTables = Doc.getTextTables()

For I = 0 to TextTables.count – 1Table = TextTables(I)CellNames = Table.getCellNames()

For J = 0 to Ubound(CellNames)Cell = Table.getCellByName(CellNames(J))If IsNumeric(Cell.String) Then

CellCursor = Cell.createTextCursor()CellCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT

End IfNext

Next

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 95: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

recorriendo mediante el ciclo. OpenOffice.org Entonces crea una lista de los nombres deceldas asociados para cada una de estas tablas. Estas son recorridas mediante un ciclo. Si unacelda contiene un valor numérico, entonces el ejemplo cambia el formato correspondiente.Para hacer esto, primero crea un objeto TextCursor que hace referencia al contenido de lacelda de la tabla y entonces adapta las propiedades del párrafo de la celda de la tabla.

Marcos de textoLos marcos de texto son considerados objetos TextContent, como las tablas y gráficos.Estos pueden esecialmente consisten en texto standard, pero pueden ser puestos en cualquierposición en una página y no están incluidas en el flujo del texto.

Como con los objetos TextContent, también es hecha una distinción con marcos de textoentre la actual creación e inserción en el documento.

Dim Doc As ObjectDim TextTables As ObjectDim Cursor As ObjectDim Frame As Object

Doc = StarDesktop.CurrentComponent

Cursor = Doc.Text.createTextCursor()

Frame = Doc.createInstance("com.sun.star.text.TextFrame")

Doc.Text.insertTextContent(Cursor, Frame, False)

El marco de texto es creado usando el método createInstance del objeto de documento.El marco de texto creado de esta manera puede ser insertado en el documento usando elmétodo insertTextContent de el objeto Text. Para hacerlo, el nombre propio delservicio com.sun.star.text.textFrame debe ser especificado.

El punto de inserción del marco de texto está determinado por el objeto Cursor, el cualtambién es ejecutado cuando se inserta.

Los marcos de texto son la contraparte a los marcos de posición usados en Word. Mientras VBA usa elmétodo Document.Frames.Add para este propósito, la creación en VBA es hecha usando el elprocedimiento anterior también con la ayuda de el TextCursor y de el método createInstance delobjeto de documento.

Los objetos de marco de texto proveen un rango de propiedades con las cuales la posición yel comportamiento del marco pueden ser cambiados. La mayoría de estas propiedades estándefinidas en el servicio com.sun.star.text.BaseFrameProperties, el cualtambién está soportado por cada servicio TextFrame. Las principales propiedades son:

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

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

• LeftMargin (Long) – márgen izquierdo en centécimas de milímetro.

• RightMargin (Long) – márgen derecho en centécimas de milímetro.

• TopMargin (Long) – márgen superior en centécimas de milímetro.

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

Capítulo 6 Documentos de texto

Page 96: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

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

• HoriOrient (const) – orientación horizontal del marco de texto (de acuerdo concom.sun.star.text.HoriOrientation)

• VertOrient (const) orientación vertical del marco de texto (de acuerdo concom.sun.star.text.VertOrientation)

El siguiente ejemplo crea un marco de texto usando las propiedades descritas anteriormente:

Dim Doc As ObjectDim TextTables As ObjectDim Cursor As ObjectDim Frame As Object

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor()Cursor.gotoNextWord(False)Frame = Doc.createInstance("com.sun.star.text.TextFrame")

Frame.Width = 3000Frame.Height = 3000Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTERFrame.topMargin = 0Frame.BottomMargin = 0Frame.LeftMargin = 0Frame.RightMargin = 0Frame.BorderDistance = 0Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONEFrame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP

Doc.Text.insertTextContent(Cursor, Frame, False)

El ejemplo crea un TextCursor para marcar la inserción del marco de texto. Esto estáposicionado entre la primera y segunda palabra del texto. El marco de texto es creado usandoDoc.createInstance. Las propiedades del marco de texto son puestas para los valoresiniciales requeridos.

La interacción de las propiedades entre AnchorType (del servicio TextContent) yVertOrient (del servicio BaseFrameProperties) se pueden notar aquí.AnchorType recibe el valor AS_CHARACTER. El marco de texto es insertado de estamanera directamente en el flujo de texto y se comporta como un carácter. Esto puede, porejemplo, ser movido a la siguiente línea cuando se ocurre un salto de línea. El valorLINE_TOP de la propiedad VertOrient asegura que el borde superior del marco de textoeste a la misma altura del borde superior del carácter.

Una vez que la inicialización está completa, el marco de texto es finalmente insertado en eldocumento de texto usando una llamada desde insertTextContent.

Para editar el contenido de un marco de texto, el usuario puede usar el TextCursor, el cual hasido mencionado numerosas veces y que también está disponible para los marcos de texto.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 97: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim TextTables As ObjectDim Cursor As ObjectDim Frame As ObjectDim FrameCursor As Object

Doc = StarDesktop.CurrentComponentCursor = Doc.Text.createTextCursor()Frame = Doc.createInstance("com.sun.star.text.TextFrame")

Frame.Width = 3000Frame.Height = 1000Doc.Text.insertTextContent(Cursor, Frame, False)FrameCursor = Frame.createTextCursor()FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLDFrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTERFrameCursor.String = "Esto es una pequeña prueba!"

El ejemplo crea un marco de texto, lo inserta en el documento de texto actual y abre elTextCursor para el marco de texto. El TextCursor es usado para cambiar la fuente delmarco en negrita y para activar la orientación del párrafo en centrado. Al marco de textofinalmente es asiganda la cadena “Esto es una prueba!”.

Campos de textoLos campos de texto son objetos TextContent porque ellos proveen una lógica adicionalextendida más allá del puro texto. Los campos de texto pueden ser insertados en eldocumento de texto usando el mismo método que es usado para otros objetosTextContent:

Dim Doc As ObjectDim DateTimeField As ObjectDim Cursor As Object Doc = StarDesktop.CurrentComponentCursor = Doc.Text.CreateTextCursor()

DateTimeField = Doc.createInstance("com.sun.star.text.Textfield.DateTime")DateTimeField.IsFixed = FalseDateTimeField.IsDate = TrueDoc.Text.InsertTextContent(Cursor, DateTimeField, False)

El ejemplo inserta un campo de texto con la fecha actual al inicio del documento actual. Elvalor True de la propiedad IsDate resulta en que solamente es desplegada la fecha y no lahora. El valor False para IsFixed asegura que la fecha sea actualizada automáticamentecuando el documento es abierto.

Mientras que el tipo de un campo en VBA es especificado por parámetros en el métodoDocument.Fields.Add, el nombre del servicio es responsable del tipo de campo definido en OpenOffice.orgBasic.En el pasado, los campos de texto fueron accesados usando un amplio rango de métodos queOpenOffice.org tenía disponible en el antiguo objeto Selection (Por ejemplo, InsertField, DeleteUserField,Set CurField).

En OpenOffice.org, los campos son administrados usando el concepto orientado a objetos. Para crear uncampo de texto, un campo de texto del tipo definido debe ser primeramente creado e inicializado usandolas propiedades requeridas. El campo de texto es insertado en el documento usando el métodoinsertTextContent. El correspondiente código fuente ha sido visto en el ejemplo anterior. Los tipos decampos más importantes y sus propiedades están descritas en las siguientes secciones.

Adicionalmente a insertar campos de texto, buscar un documento por los campos es también

Capítulo 6 Documentos de texto

Page 98: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

una tarea importante. El siguiente ejemplo muestra como todos los campos de texto puedenser recorridos en un ciclo y verificados por su tipo relevante.

Dim Doc As ObjectDim TextFieldEnum As ObjectDim TextField As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponent

TextFieldEnum = Doc.getTextFields.createEnumeration

While TextFieldEnum.hasMoreElements()

TextField = TextFieldEnum.nextElement()If TextField.supportsService("com.sun.star.text.TextField.DateTime") Then

MsgBox "Fecha/Hora"ElseIf TextField.supportsService("com.sun.star.text.TextField.Annotation")

ThenMsgBox "Anotación"

ElseMsgBox "desconocido"

End If

Wend

El punto de inicio para establecer los campos de texto actuales es la lista TextFields delobjeto de documento. El ejemplo crea un objeto Enumeration en base de esta lista, con lacual todos los campos de texto pueden ser consultados por turnos en un ciclo. Los campos detexto encontrados son verificados contra el servicio soportado usando el métodosupportsService. Si el campo prueba ser de un tipo Fecha/Hora o una Anotación,entonces el tipo de campo correspondiente es desplegado en el cuadro de información. Si porotra parte, el ejemplo encuentra cualquier otro campo, entonces se despliega la información"desconocido".

Abajo, encontrará una lista de los campos de texto más importantes y sus propiedadesasociadas. Una lista completa de todos los campos de texto esta provista en la referencia APIen el módulo com.sun.star.text.TextField. (Cuando lista el nombre del serviciode un campo de texto, los caracteres en mayúsculas y minúsculas deben ser usados enOpenOffice.org basic, como en el ejemplo previo.)

Números de páginas, palabras y caracteresLos campos de texto

• com.sun.star.text.TextField.PageCount

• com.sun.star.text.TextField.WordCount

• com.sun.star.text.TextField.CharacterCount

retorna el número de páginas, palabras o caracteres de un texto. Estos soportan la siguientepropiedad:

• NumberingType (const) – formato de número (en concordancia con las constantes decom.sun.star.style.NumberingType)

Página actualEl número de la página actual puede ser insertado usando el campo de texto

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 99: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• NumberingType (const) – formato de número (en concordancia con las constantes decom.sun.star.style.NumberingType)

• Offset (short) – formato agregado al número de página (especificaciones negativastambién son posibles)

El siguiente ejemplo muestra como el número de páginas puede ser insertado en el pie de undocumento:

Dim Doc As ObjectDim DateTimeField As ObjectDim PageStyles As ObjectDim StdPage As ObjectDim FooterCursor As ObjectDim 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 serviciocom.sun.star.TextField.PageNumber. Mientras las líneas de encabezado y pieson definidas como parte de la plantilla de la página de OpenOffice.org , esto inicialmente esestablecido usando la lista de todos los PageStyles.

Para asegurarse que la línea de pie de página es visible, la propiedad FooterIsOn espuesta al valor de True. El campo de texto es entonces insertado en el documento usando elobjeto de texto asociado a la izquierda de la línea del pie de página.

AnotacionesLos campos de anotación (com.sun.star.text.TextField.Annotation) puedenser vistos mediante un pequeño símbolo amarillo en el texto. Haciéndo click en este símbolose abre un campo de texto, en el cual puede ser guardado un comentario en el punto actual detexto. Un campo de anotación tiene las siguientes propiedades:

• Author (string) – nombre del autor.

• Content (string) – texto del comentario.

• Date (date) – fecha en la cual fue escrito el comentario.

Fecha/horaUn campo de fecha/hora (com.sun.star.text.TextField.DateTime) representala fecha actual o la hora actual. Soporta las siguientes propiedades:

Capítulo 6 Documentos de texto

Page 100: Guía del programador BASIC - OpenOffice.org

Capítulo 6Documentos de texto

• IsFixed (boolean) – si es verdadero, los detalles de tiempo de la inserción permanencensin 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 locontrario despliega la hora actual.

• DateTimeValue (struct) – contenido actual del campo (con la estructura decom.sun.star.util.DateTime)

• NumberFormat (const) – formato en el que la hora o la fecha es mostrada.

Nombre/número del capítuloEl nombre del capítulo actual está disponible mediante el campo de texto del tipocom.sun.star.text.TextField.Chapter. La forma puede ser definida usando dospropiedades:

• ChapterFormat (const) – determina cómo el nombre del capítulo o el número es mostrado(en concordancia con com.sun.star.text.ChapterFormat)

• Level (Integer) – determina el nivel en el cual el nombre o el número del capítulo estásiendo desplegado. El valor 0 determina el nivel más alto posible.

MarcadoresLos marcadores (Servicio com.sun.star.text.bookmark) son objetosTextContent. Los marcadores son creados e insertados usando el concepto de nuevodescrito previamente:

Dim Doc As ObjectDim Bookmark As ObjectDim Cursor As Object

Doc = StarDesktop.CurrentComponent

Cursor = Doc.Text.CreateTextCursor()

Bookmark = Doc.createInstance("com.sun.star.Bookmark")Bookmark.Name = "Mi marcador"Doc.Text.InsertTextContent(Cursor, Bookmark, True)

El ejemplo crea un Cursor, el cual marca en la posición del punto de inserción delmarcador con el objeto de marcador (Bookmark). Al marcador le es asignado un nombre yes insertado en el documento por medio de insertTextContent en la posición delcursor.

Los marcadores de texto son accesados por medio de una lista llamada Bookmarks. Losmarcadores pueden ser accesados por su número o por su nombre.

El siguiente ejemplo muestra como un marcador puede ser encontrado dentro de un texto, yun texto insertado en esa posición.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 101: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Bookmark As ObjectDim Cursor As Object

Doc = StarDesktop.CurrentComponent

Bookmark = Doc.Bookmarks.getByName("Mi marcador")

Cursor = Doc.Text.CreateTextCursorByRange(Bookmark.Anchor)Cursor.String = "aquí hay un marcador"

En el ejemplo, el método GetByName es usado para encontrar el marcador requerido por elsignificado de su nombre. La llamada a createTextCursorByRange crea el Cursor,el cual es puesto en la posición del anclaje del marcador. El cursor inserta el texto requeridoen esa posición.

Capítulo 6 Documentos de texto

Page 102: Guía del programador BASIC - OpenOffice.org
Page 103: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

OpenOffice.org Basic provee una interface extensa para la creación y edición de libros decálculo controlados por programación. Este capítulo describe como controlar los servicios,métodos y propiedades relevantes de los documentos de hoja de cálculo.

La primera sección contiene la estructura básica de los documentos de hoja de cálculo ymuestra como accesar y editar los contenidos de celdas individuales.

La segunda sección se concentra en cómo editar hojas de cálculo eficientemente, poniéndo elfoco en áreas de celdas y las opciones de búsqueda y reemplazo de los contenidos de lasceldas.

El objeto Range le permite direccionar cualquier area de la tabla y ha sido extendido en la API nueva

La estructura de documentos basados en tablas(Hojas de cálculo)

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

Una terminología diferente es usada en VBA y en OpenOffice.org. Mientras que el objeto de documento enVBA es llamado Libro de trabajo y sus páginas inidividuales páginas de trabajo, estos son llamadosDocumento de hojas de cálculo y Hojas en OpenOffice.org.

Hojas de cálculoSe pueden accesar hojas individuales de las hojas de cálculo por medio dela lista Sheets.

El siguiente ejemplo muestra cómo puede accesar una hoja bien sea por su número o por sunombre:

Dim Doc As Object Dim Sheet As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

Ejemplo 2: Accesar por significado del nombre

Capítulo 7 Documentos de libros de cálculo

Page 104: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As Object Dim Sheet As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets.getByName("Hoja 1")

En el primer ejemplo, las hojas son accesadas por su número (el conteo inicia en 0). En elsegundo ejemplo, la hoja es accesada por su nombre con el método getByName.

El objeto Sheet que es obtenido por el método getByName soporta el serviciocom.sun.star.sheet.Spreadsheet. Adicionalmente se proveen algunas interfacespara editar el documento, este servicio provee las siguientes propiedades:

• IsVisible (Boolean) – las hojas de cálculo son visibles.

• PageStyle (String) – nombre de la plantilla para la hoja de cálculo.

Creando, borrando y renombrando hojas de cálculoLa lista sheets del documento spreadsheet también es usado para crear, borrar yrenombrar hojas de cálculo individuales. El siguiente ejemplo usa el método hasByNamepara verificar si existe una hoja llamada "MiHoja". Si existe, el método determina el objetocorrespondiente usando el método getByName y entonces salva la referencia en unavariable sheet. Si la correspondiente hoja no existe, encontes es creado con la llamada acreateInstance e insertado en el libro de cálculo mediante el método insertByName.

Dim Doc As Object Dim Sheet As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

If Doc.Sheets.hasByName("MiHoja") ThenSheet = Doc.Sheets.getByName("MiHoja")

Else Sheet = Doc.CreateInstance("com.sun.star.sheet.Spreadsheet")Doc.Sheets.insertByName("MiHoja", Sheet)

End If

Los métodos getByName y insertByName son de la interfacecom.sun.star.container.XnameContainer descrita en el capítulo 4.

Filas y columnasCada hoja contiene una lista de filas y columnas. Están disponibles mediante las propiedadesRows y Columns del objeto de Hojas de Cálculo y soporta los servicioscom.sun.star.table.TableColumns y/ocom.sun.star.table.TableRows.

El siguiente ejemplo crea dos objetos que referencian a la primera fila y primera columna deuna hoja y guarda las referencias de los objetos FirstCol y FirstRow en una variable.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 105: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Sheet As Object Dim FirstCol As ObjectDim FirstRow As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

FirstCol = Sheet.Columns(0)FirstRow = Sheet.Rows(0)

Los objetos de columna soportan el servicio com.sun.star.table.TableColumns ytiene las siguientes propiedades:

• Width (long) – ancho de una columna en milésimas de milímetro.

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

• IsVisible (Boolean) – Despliega una columna.

• IsStartOfNewPage (boolean) – Cuando se imprime, crea un salto de página antes dela columna.

El ancho de una columna solamente es optimizado cuando la propiedad OptimalWidth espuesta en Verdadero. Si el ancho de una celda individual es cambiado, el ancho de lacolumna que contiene esa celda no es cambiado. En términos de funcionalidad,OptimalWidth es más un método que una propiedad.

Los objetos de filas están basados en el servicio com.sun.star.table.TableRows ytiene las siguientes propiedades:

• Height (Long) – alto de la fila en milésimas de milímetro.

• OptimalHeight (Boolean) – pone la fila al alto óptimo.

• IsVisible (Boolean) – despliega la fila.

• IsStartOfNewPage (boolean) – cuando se imprime crea un salto de página antes de lafila.

Si la propiedad OptimalHeight de una fila es puesta en verdadero, el alto de la filacambia automáticamente cuando el alto de una celda es cambiado. La optimizaciónautomática continua hasta que a la fila le sea asignado un valor absoluto por medio de lapropiedad Height.

El siguiente ejemplo activa la optimización automática de las primeras cinco filas en la hoja yhace la segunda columa invisible.

Capítulo 7 Documentos de libros de cálculo

Page 106: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Sheet As ObjectDim Row As ObjectDim Col As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

For I = 0 to 4Row = 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 deVBA, la primera columna tiene el índice 0 y no el 1.

Insertando y borrando filas y columnasLos objetos Rows y Columns pueden accesar las filas y columnas existentes, y tambiéninsertar y borrar.

Dim Doc As ObjectDim Sheet As ObjectDim NewColumn As Object

Doc = StarDesktop.CurrentComponent

Sheet = Doc.Sheets(0)Sheet.Columns.insertByIndex(3, 1)Sheet.Columns.removeByIndex(5, 1)

Este ejemplo usa el método insertByIndex para insertar una nueva columna dentro de lacuarta posición en la hoja (índice 3 – la numeración inicia en 0). El segundo parámetroespecifica el número de columnas a ser insertadas (en este ejemplo una).

El método removeByIndex borra la sexta columna (índice 5). De nuevo, el segundoparámetro especifica el número de columnas que se desean borrar.

Los métodos para insertar y borrar columnas usa la función del objeto Rows de la mismamanera que el método muestra para la edición de las columnas usando el objeto columns.

CeldasUna hoja de cálculo consiste en una lista bi-dimensional que contiene celdas. Cada celda esdefinida por posición X-Y con respecto a la celda superior izquierda que tiene la posición(0,0).

El siguiente ejemplo crea un objeto que referencia la celda superior izquierda e inserta textoen la celda:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 107: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)Cell.String = “Prueba”

Adicionalmente a la coordenadas numéricas, cada celda tiene su nombre, por ejemplo, lacelda superior izquierda (0,0) de una hoja de cálculo es llamada A1. La letra A representa lacolumna y el número 1 es la fila. Es importante que no confunda el nombre y la posición dela celda porque la fila que contiene el nombre inicia en 1 mientras que el conteo para lasposiciones inicia en 0.

En OpenOffice.org, una celda de una tabla pueden estar vacía o contener texto, números ofórmulas. El tipo de la celda no es determinado hasta que el contenido sea guardado en lacelda, pero es difierente en las propiedades del objeto que debe ser usado para cada una desus entradas. Los números pueden ser insertados llamando la propiedad Value, el texto conla propiedad String, y las fórmulas con la propiedad Formula.

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

Cell = Sheet.GetCellByPosition(0, 0)Cell.Value = 100

Cell = Sheet.GetCellByPosition(0, 1)Cell.String = “Test”

Cell = Sheet.GetCellByPosition(0, 2)Cell.Formula = “=A1”

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

Las propiedades Value, String y Formula superponen el método PutCell para asignar valores en unacelda.

OpenOffice.org trata el contenido que ha sido ingresado por la propiedad String como untexto, aunque el contenido sea un número. Los números son alineados a la izquierda en lacelda, mientras lo demás alineado a la derecha. También puede notar la diferencia entre eltexto y los números cuando usa fórmulas.

Capítulo 7 Documentos de libros de cálculo

Page 108: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)Cell.Value = 100

Cell = Sheet.getCellByPosition(0, 1)Cell.String = 1000

Cell = Sheet.getCellByPosition(0, 2)Cell.Formula = “=A1+A2”

MsgBox Cell.Value

Mientras que la celda A1 contiene el valor de 100 y la celda el valor de 1000, la fórmulaA1+A2 retorna el valor de 100. Esto es porque el contenido de la celda A2 fue ingresadocomo un texto y no como un número.

Para verificar si el contenido de una celda es un número o una cadena, se puede usar lapropiedad Type:

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(1,1)Cell.Value = 1000

Select Case Cell.TypeCase com.sun.star.table.CellContentType.EMPTY

MsgBox "Contenido: Vacío"Case com.sun.star.table.CellContentType.VALUE

MsgBox "Contenido: Valor"Case com.sun.star.table.CellContentType.TEXT

MsgBox "Contenido: Texto"Case com.sun.star.table.CellContentType.FORMULA

MsgBox "Contenido: Fórmula"End Select

La propiedad Cell.Type retorna un valor de la enumeracióncom.sun.star.table.CellContentType que identifica el contenido de una celda.Los posibles valores son:

• EMPTY – que no tiene ningún valor.

• VALUE – es un número.

• TEXT – Cadenas.

• FORMULA – contiene una fórmula.

Insertando, borrando, copiando y moviendo celdasAdicionalmente a la modificación directa de las celdas, OpenOffice.org Calc provee unainterface que le permite insertar, borrar, copiar o combinar celdas. La interface(com.sun.star.sheet.XRangeMovement) está disponible por medio del objeto hojade cálculo y provee cuatro métodos para modificar el contenido de las celas.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 109: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

Dim Doc As ObjectDim Sheet As ObjectDim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0CellRangeAddress.StartColumn = 1CellRangeAddress.StartRow = 1CellRangeAddress.EndColumn = 2CellRangeAddress.EndRow = 2

Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

Este ejemplo inserta un rango de celdas del tamaño de dos filas y dos columnas en la segundafila y la segunda columna (cada inicio está en 1) de la primera hoja de cálculo (número 0) enel libro de hojas de cálculo. Cualquier valor existente en el rango de celdas especificado esmovido hacia abajo.

Para definir el rango de celdas que desea insertar use la estructuracom.sun.star.table.CellRangeAddress. Los siguientes valores están incluidosen esta estructura:

• Sheet (short) – El número de la hoja. (la numeración inicia en 0)

• StartColumn (long) – La primera columna en el rango de celdas (la numeración iniciaen 0)

• StartRow (long) – la primera fila en el rango de celdas (la numeración inicia en 0)

• EndColumn (long) – La columna final en el rango (la numeración inicia en 0)

• EndRow (long) – la última fila en el rango de celdas (la numeración inicia en 0)

La estructura completa de CellRangeAddress debe ser pasada como parámetro almétodo InsertCells. El segundo parámetro de InsertCells contiene un valor de laenumeración com.sun.star.sheet.CellInsertMode y define que se hará con losvalores que están localizados frente a la posición en la que se va a insertar. La enumeraciónCellInsertMode reconoce los siguientes valores:

• NONE – los valores actuales se mantienen en su posición actual.

• DOWN – las celdas en y abajo de la posición de inserción serán movidas hacia abajo.

• RIGHT – las celdas en y a la derecha de la posición de inserción serán movidas hacia laderecha.

• ROWS – las filas después de la posición de inserción serán movidas hacia abajo.

• COLUMNS – las columnas después de la posición de inserción serán movidas hacia laderecha.

El método RemoveRange es la contrapartida del método insertCells. Este métodoborra el rango que está definido en la estructura CellRangeAddress de la hoja.

Capítulo 7 Documentos de libros de cálculo

Page 110: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Sheet As ObjectDim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0CellRangeAddress.StartColumn = 1CellRangeAddress.StartRow = 1CellRangeAddress.EndColumn = 2CellRangeAddress.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 dosfilas. El tipo de remoción está definido por uno de los siguientes valores de la enumeracióncom.sun.star.sheet.CellDeleteMode:

• NONE – los valores actuales conservan su posición actual.

• UP – las celdas en y bajo el punto de remoción son movidas hacia arriba.

• LEFT – las celdas depués del punto de remoción son movidas a la izquierda.

• ROWS – las filas después del punto de remoción son movidas hacia arriba.

• COLUMNS – las columnas después del punto de inserción son movidas hacia la izquierda.

La interface XrangeMovement provee dos métodos adicionales para mover(moveRange) o copiar (copyRange) rangos de celdas. El siguiente ejemplo mueve elrango B2:C3 de manera que el rango inicie en la posición A6:

Dim Doc As ObjectDim Sheet As ObjectDim CellRangeAddress As New com.sun.star.table.CellRangeAddressDim CellAddress As New com.sun.star.table.CellAddress

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0CellRangeAddress.StartColumn = 1CellRangeAddress.StartRow = 1CellRangeAddress.EndColumn = 2CellRangeAddress.EndRow = 2CellAddress.Sheet = 0CellAddress.Column = 0CellAddress.Row = 5

Sheet.moveRange(CellAddress, CellRangeAddress)

Adicionalmente a la estructura CellRangeAddress, el método moveRange espera unaestructura com.sun.star.table.CellAddress para definir el origen a mover de laregión destino. El método CellAddress provee los siguientes valores:

• Sheet (short) – el número de la hoja de cálculo (la numeración inicia en 0).

• Column (short) – el número de la columna direccionada (la numeración inicia en 0).

• Row (short) – el número de la fila direccionada (la numeración inicia en 0).

El contenido de las celdas en el rango de destino será siempre sobreescrito por el métodomoveRange. A diferencia del método InsertCells, el parámetro para realizar

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 111: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

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

En términos de su funcionalidad, los métodos de OpenOffice.org Basic insertCell, removeRange yCopyRange son comparables con los métodos de VBA Range.Insert, Range.Delete y Range.Copy. Mientras en VBA, los métodos son aplicados al objeto Range correspondiente, en OpenOffice.org Basicellos son aplicados al objeto Sheet asociado.

FormateadoUn documento de hoja de cálculo provee las propiedades y métodos para el formateo deceldas y páginas.

Propiedades de celdasHay numerosas opciones para formatear celdas, para especificar tipo de fuente y tamaño parael texto.

Cada celda soporta los servicios com.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties, cuyas principales propiedadesestán descritas en el capítulo 6 (Documentos de texto en la página 71). Formateadosespeciales de las celdas son manejados por el serviciocom.sun.star.table.CellProperties. Las principales propiedades de esteservicio están descritas en las secciones siguientes.

Puede aplicar todas las propiedades nombradas a las celdas y a los rangos de celdas

El objeto CellProperties en la API de OpenOffice.org es comparable con el objeto Interior de VBA quetambién define propiedades especificas de las celdas.

Color de fondo y sombrasEl servicio com.sun.star.table.CellProperties provee las siguientespropiedades para definir el color de fondo y sombras.

• CellBackColor (long) – color de fondo de la celda.

• IsCellBackgroundTransparent (boolean) – configura el color de fondo atransparente.

• ShadowFormat (struct) – especifica las sombras de las celdas (estructura de acuerdocon com.sun.star.table.ShadowFormat)

La estructura com.sun.star.table.ShadowFormat y el detalle de lasespecificaciones para las sombras de las celdas tienen la siguiente estructura:

• Location (enum) – posición de la sombra. (los valores provienen de la estructuracom.sun.star.table.ShadowLocation)

• ShadowWidth (short) – tamaño en centésimas de milímetro.

• IsTransparent (boolean) – configura la sombra a transparente.

Capítulo 7 Documentos de libros de cálculo

Page 112: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

• Color (long) – color de la sombra.

El siguiente ejemplo escribe el número 1000 a la celda B2, cambia el color de fondo a rojousando la propiedad CellBackColor, y luego crea una sombra gris tenue para la celdaque es movida 1 mm a la izquierda y hacia abajo.

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object Dim ShadowFormat As New com.sun.star.table.ShadowFormat

Doc = StarDesktop.CurrentComponentSheet = 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_RIGHTShadowFormat.ShadowWidth = 100ShadowFormat.Color = (160,160,160)

cell.ShadowFormat = ShadowFormat

JustificaciónOpenOffice.org provee varias funciones que permiten cambiar la justificación del texto enuna celda de una tabla.

Las siguientes propiedades definen la justificación horizontal y vertical del texto:

• HoriJustify (enum) – justificación horizontal del texto (valores decom.sun.star.table.CellHoriJustify)

• VertJustify (enum) – justificación vertical del texto (valores delcom.sun.star.table.CellVertJustify)

• Orientation (enum) – orientación del texto (valores decom.sun.star.table.CellOrientation)

• IsTextWrapped (boolean) – permite los saltos de línea automáticos dentro de unacelda.

• RotateAngle (Long) – ángulo de rotación del texto en centésimas de grado.

El siguiente ejemplo muestra como se pueden “apilar” los contenidos de una celda, demanera que los caracteres individuales son impresos uno sobre el otro en la esquina superiorizquierda de la celda. Los caracteres no han sido rotados.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 113: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 1000

Cell.HoriJustify = com.sun.star.table.CellHoriJustify.LEFTCell.VertJustify = com.sun.star.table.CellVertJustify.TOPCell.Orientation = com.sun.star.table.CellOrientation.STACKED

Formato de números, fecha y textoOpenOffice.org Provee un amplio rango de formatos predefinidos para hora y fecha. Cadauno de estos formatos tiene un número interno que es asignado al formato de la celdamediante la propiedad NumberFormat.

OpenOffice.org Provee los métodos queryKey y AddNew de manera que pueda accesar losnúmeros de formatos existentes y también crear sus propios formatos. Los métodos sonaccesados mediante la llamada al siguiente objeto:

NumberFormat = Doc.NumberFormats

Un formato especificado usando un formato de cadena está estructurado de manera similarque las funciones de formato de OpenOffice.org Basic. Sin embargo, hay una grandiferencia: mientras que el comando de formato espera las abreviaciones en inglés y puntosdecimales o caracteres de separadores de miles, las abreviaciones especificas del país puedenser usadas para la estructura de un comando de formato para el objeto NumberFormat.

El siguiente ejemplo formatea la celda B2 de manera que los números son desplegados contres posiciones decimales y usa comas como separador de miles.

Capítulo 7 Documentos de libros de cálculo

Page 114: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Sheet As ObjectDim Cell As Object Dim NumberFormats As Object Dim NumberFormatString As StringDim NumberFormatId As LongDim LocalSettings As New com.sun.star.lang.Locale

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets(0)Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 23400.3523565

LocalSettings.languaje = "en"LocalSettings.Country = "us"

NumberFormats = Doc.NumberFormatsNumberFormatString = "#,##0.000"

NumberFormatId = NumberFormats.queryKey(NumberFormatString, localsettings, True)If NumberFormatId = 1 Then

NumberFormatId = NumberFormats.addNew(NumberFormatString, localsettings)End If

msgBox NumberFormatIdCell.NumberFormat = NumberFormatId

El diálogo en OpenOffice.org Calc provee un vistazo de los diferentesopciones de formatos para las celdas.

Propiedades de páginasLas propiedades de páginas son opciones de configuran la posición del contenido deldocumento en una página y también los elementos visuales que serán repetidos página apágina. Estos incluyen:

• Formatos de página.

• Márgenes de páginas.

• Encabezados y pies de página.

El procedimiento para definir los formatos de las páginas difieren de las otras formas deformateado. Mientras los elementos de celdas, párrafos, y caracteres pueden ser directamente,los formatos de páginas también pueden ser definidas y aplicadas indirectamente usando losestilos de páginas. Por ejemplo, los encabezados o pies de página pueden ser agregados alestilo de página.

Las siguientes secciones describen las opciones de formato principales para las páginas de lashojas de cálculo. Muchos de los estilos que están descritos también están disponibles para losdocumentos de texto. Las propiedadades que son válidos para ambos tipos de documentosestán definidos en el servicio com.sun.star.style.PageProperties. Laspropiedades de páginas que solo se aplican a los documentos de hoja de cálculo estándefinidos en el servicio com.sun.star.sheet.TablePageStyle.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 115: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Las propiedades de página (márgenes de páginas, bordes y demás) para un documento Microsoft Officeestán definidos por el significado PageSetup en el objeto Worksheet (Excel) o el objeto Document (Word).En OpenOffice.org, estas propiedades están definidas usando el estilo de página el cual está vinculado aldocumento relacionado.

Fondo de páginaEl servicio com.sun.star.style.PageProperties define las siguientespropiedades para el fondo de las páginas:

• BackColor (long) – color de fondo.

• BackGraphicURL (string) – URL del gráfico de fondo que desea usar.

• BackGraphicFilter (string) – nombre del filtro para interpretar el gráfico de fondo.

• BackGraphicLocation (enum) – Posición del gráfico de fondo (el valor de acuerdocon la enumeración com.sun.star.style.GraphicLocation)

Formato de la página El formato de la página está definido usando las siguientes propiedades del serviciocom.sun.star.style.PageProperties:

• IsLandscape (boolean) – formato horizontal.

• Width (long) – ancho de la página en centécimas de milímetro.

• Height (long) – alto de la página den centécimas de milímetro.

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

El siguiente ejemplo configura el tamaño del papel del estilo de página "default" al formatoDIN A5 horizontal. (alto 14.8 cm, ancho 21 cm)

Dim Doc As ObjectDim Sheet As Object Dim StyleFamilies As ObjectDim PageStyles As ObjectDim DefPage As Object

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesPageStyles = StyleFamilies.getByName("PageStyles")DefPage = PageStyles.getByName("Default")

DefPage.IsLandscape = TrueDefPage.Width = 21000DefPage.Height = 14800

Márgen de la página, bordes y sombrasEl servicio com.sun.star.style.PageProperties provee las siguientespropiedades para ajustar los márgenes de las páginas y también los bordes y sombras:

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

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

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

Capítulo 7 Documentos de libros de cálculo

Page 116: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

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

• LeftBorder (struct) – especificaciones de la línea del borde izquierdo (estructuracom.sun.star.table.BorderLine)

• RightBorder (struct) – espeficicaciones de la línea del borde derecho (estructuracom.sun.star.table.BorderLine)

• TopBorder (struct) – especificaciones de la línea del borde superior (estructuracom.sun.star.table.BorderLine)

• BottomBorder (struct) – especificaciones de la línea del borde inferior (estructuracom.sun.star.table.BorderLine)

• LeftBorderDistance (long) – distancia entre el borde izquierdo y el contenido de lapágina en centécimas de milímetro.

• RightBorderDistance (long) – distancia entre el borde derecho y el contenido de lapágina en centécimas de milímetro.

• TopBorderDistance (long) – distancia entre el borde superior y el contenido de lapágina en centécimas de milímetro.

• BottomBorderDistance (long) – distancia entre el borde inferior y el contenido de lapágina en centécimas de milímetro.

• ShadowFormat (struct) – especificaciones de la sombra en el área de contenido de lapágina (estructura de com.sun.star.table.ShadowFormat)

El siguiente ejemplo configura los bordes derecho e izquierdo del estilo de página "default" aun centímetro:

Dim Doc as ObjectDim Sheet As ObjectDim StyleFamilies As ObjectDim PageStyles As ObjectDim DefPage As Object

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesPageStyles = StyleFamilies.getByName("PageStyles")DefPage = PageStyles.getByName("Default")

DefPage.LeftMargin = 1000DefPage.RightMargin = 1000

Encabezados y pies de páginasLos encabezados y pies de página de un documento forman parte de las propiedades de lapágina y están definidas usando el servicio com.sun.star.style.PageProperties.Las propiedades para el formateo de de los encabezados son:

• HeaderOn (boolean) – Encabezado activado.

• HeaderLeftMargin (long) – distancia entre el encabezado y el márgen izquierdo de lapágina en centécimas de milímetro.

• HeaderRightMargin (long) – distancia entre el encabezado y el márgen derecho de lapágina en centécimas de milímetro.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 117: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• HeaderBodyDistance (long) – distancia entre el encabezado y el cuerpo principal deldocumento en centécimas de milímetro.

• HeaderHeight (long) – altura del encabezado en centécimas de milímetro.

• HeaderIsDynamicHeight (boolean) – la altura del encabezado es automáticamenteajustada al contenido.

• HeaderLeftBorder (struct) – detalles del borde izquierdo del marco alrededor delencabezado (estructura com.sun.star.table.BorderLine)

• HeaderRightBorder (struct) – detalles del borde derecho del marco alrededor delencabezado (estructura com.sun.star.table.BorderLine)

• HeaderTopBorder (struct) – detalles del borde superior del marco alrededor delencabezado (estructura com.sun.star.table.BorderLine)

• HeaderBottomBorder (struct) – detalles del borde inferior del marco alrededor delencabezado (estructura com.sun.star.table.BorderLine)

• HeaderLeftBorderDistance (long) – distancia entre el borde izquierdo y elcontenido del encabezado en centécimas de milímetro.

• HeaderRightBorderDistance (long) – distancia entre el borde derecho y elcontenido del encabezado en centécimas de milímetro.

• HeaderTopBorderDistance (long) – distancia entre el borde superior y el contenidodel encabezado en centécimas de milímetro.

• HeaderBottomBorderDistance (long) – distancia entre el borde inferior y elcontenido del encabezado en centécimas de milímetro.

• HeaderIsShared (boolean) – el encabezado en esta o en todas las páginas tienen elmismo contenido (referencia a HeaderText, HeaderTextLeft,HeaderTextRight)

• HeaderBackColor (long) – color de fondo del encabezado.

• HeaderBackGraphicURL (long) – URL del gráfico de fondo que desea usar.

• HeaderBackGraphicFilter (long) – nombre del filtro para interpretar el gráfico defondo para el encabezado.

• HeaderBackGraphicLocation (enum) – posición del gráfico de fondo para elencabezado (valores de acuerdo a la enumeracióncom.sun.star.style.GraphicLocation)

• HeaderBackTransparent (boolean) – muestra el fondo del encabezado comotransparente.

• HeaderShadowFormat (struct) – detalles de la sombra del encabezado (estructuracom.sun.star.table.ShadowFormat)

Las propiedades de formato para el pie de página son:

• FooterIsOn (boolean) – el pie de página está activado.

Capítulo 7 Documentos de libros de cálculo

Page 118: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

• FooterLeftMargin (long) – distancia entre el pie de página y el márgen izquierdo dela página en centésimas de milímetro.

• FooterRightMargin (long) – distancia entre el pie de página y el márgen derecho dela página en centésimas de milímetro.

• FooterBodyDistance (long) – distancia entre el pie de página y el cuerpo de lapágina en centésimas de milímetro.

• FooterHeight (long) – alto del pie de página en centésimas de milímetro.

• FooterIsDynamicHeight (long) – el alto del pie de página es adaptadoautomáticamente al contenido.

• FooterLeftBorder (struct) – detalles de la línea del borde izquierdo alrededor del piede página (structura de com.sun.star.table.BorderLine)

• FooterRightBorder (struct) – detalles de la línea del borde derecho alrededor del piede página (structura de com.sun.star.table.BorderLine)

• FooterTopBorder (struct) – detalles de la línea del borde superior alrededor del pie depágina (structura de com.sun.star.table.BorderLine)

• FooterBottomBorder (struct) – detalles de la línea del borde inferior alrededor delpie de página (structura de com.sun.star.table.BorderLine)

• FooterLeftBorderDistance (long) – distancia entre el borde izquierdo y elcontenido del pie de página en centécimas de milímetro.

• FooterRightBorderDistance (long) – distancia entre el borde derecho y elcontenido del pie de página en centécimas de milímetro.

• FooterTopBorderDistance (long) – distancia entre el borde superior y el contenidodel pie de página en centécimas de milímetro.

• FooterBottomBorderDistance (long) – distancia entre el borde inferior y elcontenido del pie de página en centécimas de milímetro.

• FooterIsShared (boolean) – los pies de página tienen los mismos contenidos paratodas y cada una de las páginas. (referencia a FooterText, FooterTextLeft yFooterTextRight)

• FooterBackColor (long) – color de fondo del pie de página.

• FooterBackGraphicURL (string) – URL para el gráfico de fondo que desea usar.

• FooterBackGraphicFilter (string) – nombre del filtro para interpretar el gráficode fondo del pie de página.

• FooterBackGraphicLocation (enum) – posición del gráfico de fondo del pie depágina. (valores de la enumeración de acuerdo concom.sun.star.style.GraphicLocation)

• FooterBackTransparent (boolean) – muestra el fondo del pie de página comotransparente.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 119: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• FooterShadowFormat (struct) – detalles sobre la sombra del pie de página.(estructura de com.sun.star.table.ShadowFormat)

Cambiando el texto de encabezados y pies de páginaEl contenido de los encabezados y pies de página, puede ser accesado por medio de lassiguientes propiedades:

• LeftPageHeaderContent (Object) – contenido de los encabezados para las páginasimpares. (servicio com.sun.star.sheet.HeaderFooterContent)

• RightPageHeaderContent (Object) – contenido de los encabezados para laspáginas pares. (servicio com.sun.star.sheet.HeaderFooterContent)

• LeftPageFooterContent (Object) – contenido del pie para las páginas impares.(servicio com.sun.star.sheet.HeaderFooterContent)

• RightPageFooterContent (Object) – contenido del pie para las páginas pares.(servicio com.sun.star.sheet.HeaderFooterContent)

Si no necesita distinguir entre los encabezados de las páginas pares e impares (la propiedadFooterIsShared esta puesta en False), entonces ponga las propiedades para losencabezados y pies de las páginas pares.

Todos los objetos nombrados soportan el serviciocom.sun.star.sheet.HeaderFooterContent. Por significado de las propiedades(no genuinas) LeftText, CenterText y RightText, este servicio provee treselementos 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 delencabezado de la plantilla "Default".

Dim Doc As ObjectDim Sheet As ObjectDim StyleFamilies As ObjectDim PageStyles As ObjectDim DefPage As ObjectDim Htext As ObjectDim Hcontent As Object

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesPageStyles = StyleFamilies.getByName("PageStyles")DefPage = PageStyles.getByName("Default")

DefPage.HeaderIsOn = TrueHcontent = DefPage.RightPageHeaderContentHtext = Hcontent.LeftTextHtext.String = "solo un ejemplo"DefPage.RightPageHeaderContent = Hcontent

Note la última línea del ejemplo: mientras el texto es cambiado, el objeto Textcontentdebe 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 losdocumentos de texto (OpenOffice.org Writer) porque este consiste en un bloque sencillo detexto. Las siguientes propiedades están definidas en el serviciocom.sun.star.style.PageProperties:

Capítulo 7 Documentos de libros de cálculo

Page 120: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

• HeaderText (Object) – objeto de texto con el contenido del encabezado. (serviciocom.sun.star.text.Xtext)

• HeaderTextLeft (Object) – objeto de texto con el contenido del encabezado para laspáginas izquierdas. (servicio com.sun.star.text.Xtext)

• HeaderTextRight (Object) – objeto de texto con el contenido del encabezado para laspáginas derechas. (servicio com.sun.star.text.Xtext)

• FooterText (Object) – objeto de texto con el contenido del pie de página. (serviciocom.sun.star.text.Xtext)

• FooterTextLeft (Object) – objeto de texto con el contenido del pie para las páginasizquierdas. (servicio com.sun.star.text.Xtext)

• FooterTextRight (Object) - objeto de texto con el contenido del pie para las páginasderechas. (servicio com.sun.star.text.Xtext)

El siguiente ejemplo crea un encabezado en el estilo de página "default" para un documentode texto y agrega el valor "solo un ejemplo" en el encabezado.

Dim Doc As ObjectDim Sheet As ObjectDim StyleFamilies As ObjectDim PageStyles As ObjectDim DefPage As ObjectDim Htext As Object

Doc = StarDesktop.CurrentComponentStyleFamilies = Doc.StyleFamiliesPageStyles = StyleFamilies.getByName("PageStyles")DefPage = PageStyles.getByName("Default")

DefPage.HeaderIsOn = TrueHtext = DefPage.HeaderText

Htext.String = "solo un ejemplo"

En esta instancia, el accceso está provisto directamente por medio de la propiedadHeaderText del estilo de página en lugar del objeto HeaderFooterContent.

Centrado (sólo hojas de cálculo)El servicio com.sun.star.sheet.TablePageStyle es usado solamente en losestilos de OpenOffice.org Calc y permite rangos de celdas en los que usted desea que seanimpresos en el centro de la página. Este servicio provee las siguientes propiedades:

• CenterHorizontally (boolean) – el contenido de la tabla es centradohorizontalmente.

• CenterVertically (boolean) – el contenido de la tabla es centrado verticalmente.

Definición de elementos a ser impresos (sólo hojas de cálculo)Cuando se formatean las hojas de cálculo, se pueden definir cuales elementos de la páginason visibles. Para este propósito el servicio com.sun.star.sheet.TablePageStyleprovee las siguientes propiedades:

• PrintAnnotations (boolean) – Imprime los comentarios de las celdas.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 121: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

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

• PrintCharts (boolean) – Imprime los gráficos que contenga la hoja.

• PrintObjects (boolean) – Imprime los objetos incrustados.

• PrintDrawing (boolean) – Imprime los objetos de dibujo.

• PrintDownFirst (boolean) – Si el contenido de una hoja de cálculo se extiende porvarias páginas, estas son impresas primeramente en orden verticalmente descendente, yluego hacia abajo al lado derecho.

• PrintFormulas (boolean) – Imprime las fórmulas en lugar de los valores calculados.

• PrintZeroValues (boolean) – Imprime los valores en cero.

Editando las hojas de cálculo de maneraeficiente

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

Rangos de celdasAdicionalmente a un objeto para celdas individuales (el serviciocom.sun.star.table.Cell), OpenOffice.org también provee objetos que representanrangos de celdas. Como el objeto CellRange es creado usando la llamada agetCellRangeByName del objeto de hoja de cálculo:

Dim Doc As Object Dim Sheet As Object Dim CellRange As Object

Doc = StarDesktop.CurrentComponentSheet = 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 decálculo. Por ejemplo, A1:C15 representa todas las celdas en las filas 1 a la 15 y las columnasA, B y C.

La localización de celdas individuales en un rango de celdas puede ser determinado usando elmétodo getCellByPosition, donde las coordenadas de la celda superior izquierda en elrango de celdas es (0,0). El siguiente ejemplo usa el método para crear un objeto en la celdaC3.

Capítulo 7 Documentos de libros de cálculo

Page 122: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc as ObjectDim Sheet As ObjectDim CellRange As ObjectDim Cell As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets.GetByName("Sheet 1")CellRange = Sheet.getCellRangeByName("B2:D4")Cell = CellRange.GetCellByPosition(1,1)

Formateando rangos de celdasComo las celdas individuales, se pueden aplicar formatos a rangos de celdas usando elservicio com.sun.star.table.CellProperties. Para más información y ejemplosde este servicio, vea la sección formateado.

Calculando con rangos de celdasPuede usar el método ComputeFunction para realizar operaciones matemáticas en rangosde celdas. ComputeFunction espera una constante como los parámetros que describen lafunción matemática que desea usar. Las constantes asociadas están definidas en laenumeración com.sun.star.sheet.GeneralFunction. Los siguientes valores estándisponibles:

• SUM – suma de todos los valores numéricos.

• COUNT – número total de valores (incluyéndo los no-numéricos)

• COUNTNUMS – número total de los valores numéricos.

• AVERAGE – el Average de los valores numéricos.

• MAX – el valor numérico más grande.

• MIN – el menor valor numérico.

• PRODUCT – el producto de los valores numéricos.

• STDEV – La desviación estándar.

• VAR – La varianza.

• STDEVP – la desviación estándar con base en el total de la población.

• VARP – la varianza basada en el total de la población.

El siguiente ejemplo calcula el valor del average del rango A1:C3 e imprime el resultado enun cuadro de mensaje.

Dim Doc As ObjectDim Sheet As ObjectDim CellRange As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets.getByName("Sheet 1")CellRange = Sheet.getCellRangeByName("A1:C3")

MsgBox CellRange.ComputeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)

Borrando contenidos de las celdas

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 123: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

El método clearContents simplifica el proceso de borrar los contenidos de las celdas yrangos de celdas borrando un tipo especifico de contenidos en el rango de celdas.

El siguiente ejemplo borra todas las cadenas y la información de formateado directo delrango B2:C3

Dim Doc As ObjectDim Sheet As ObjectDim CellRange As ObjectDim Flags As Long

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheet(0)CellRange = Sheet.getCellRangeByName("B2:C3")

Flags = com.sun.star.sheet.CellFlags.STRING + _com.sun.star.sheet.CellFlags.HARDATTR

CellRange.clearContents(Flags)

Las banderas específicas en ClearContents vienen de la lista de constantes encom.sun.star.sheet.CellFlags. Esta lista provee los siguientes elementos:

• VALUE – valores numéricos que no están formateados como fecha u hora.

• DATETIME – valores numéricos que están formateados como fecha u hora.

• STRING – cadenas.

• ANNOTATION – comentarios que están ligados a las celdas.

• FORMULA – fórmulas.

• HARDATTR – formateado directo de las celdas.

• STYLES – formateado indirecto.

• OBJECTS - objetos de dibujo que están conectados a celdas.

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

También pueden agregar constantes juntas para borrar diferentes partes de informaciónusando la llamada a ClearContents.

Buscando y reemplazando contenidos de las celdasLos documentos de hojas de cálculo, como los documentos de texto, proveen una funciónde buscar y reemplazar.

Los descriptores del objeto de búsqueda y reemplazo en el documento de hoja de cálculo noestá creado directamente por medio del objeto de documento, sino por medio de la listasheet. El siguiente es un ejemplo del proceso de búsqueda y reemplazo.

Capítulo 7 Documentos de libros de cálculo

Page 124: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Sheet As ObjectDim ReplaceDescriptor As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponentsheet = 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 yluego lo aplica a todas las demás hojas mediante un ciclo.

Dibujos y presentacionesEste capítulo provee una introducción a la creación y edición controlada por macros dedibujos. La primera sección describe la estructura de los dibujos, incluyéndo los elementosbásicos que pueden contener los dibujos. La segunda sección hace referencia a funciones deedición más complejas, como agrupamiento, rotación, y escalado de objetos.

La información acerca de la creación, apertura, y guardado de los documentos de dibujopuede ser encontrado en el capítulo 5, Trabajando con documentos OpenOffice.org.

La estructura de los dibujosOpenOffice.org No limita el número de páginas en un documento de dibujo. Puede diseñarcada página separadamente. También no hay límite en el número de elementos de dibujo quepuede agregar que puede agregar en una página.

Esta imágen es un poco más complicada con la presencia de capas. Por defecto, cadadocumento de dibujo contiene capas de formato, controles, y líneas de dimensión y loselementos de dibujo son agregados a la capa de formato. También tiene la opción de agregarmás capas. Vea la Guía del desarrollador de StarOffice para más información acerca de lascapas de dibujo.

PáginasLas páginas de un documento de dibujo están disponibles por medio de la lista DrawPages.Puede accesar páginas individuales por medio de su nombre o por medio de su número. Si undocumento tiene una página y es llamada Slide 1, entonces los siguientes ejemplos sonidénticos:

Ejemplo 1

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 125: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Page As Object

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

Ejemplo 2

Dim Doc As ObjectDim Page As Object

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages.getByName("Slide 1")

En el ejemplo 1, el nombre es direccionado por su número (el conteo inicia en 0). En elsegundo ejemplo la página es accesada por su nombre con el método getByName.

Dim sUrl As String, sFilter As StringDim sOptions As StringDim oSheets As Object, oSheet As Object

oSheets = oDocument.Sheets

If oSheets.hasByName("Link") ThenoSheet = oSheets.getByName("Link")

ElseoSheet = oDocument.createInstance("com.sun.star.sheet.Spreadsheet"oSheets.insertByName("Link", oSheet)oSheet.IsVisible = False

End If

La llamada anterior retorna un objeto de página que soporta el serviciocom.sun.star.drawing.DrawPage. El servicio reconoce las siguientes propiedades:

• BorderLeft (Long) – borde izquierdo en centécimas de milímetro.

• BorderRight (Long) – borde derecho en centécimas de milímetro.

• BorderTop (Long) – borde superior en centécimas de milímetro.

• BorderBottom (Long) – borde inferior en centécimas de milímetro.

• Width (Long) – ancho de la página en centécimas de milímetro.

• Height (Long) – alto de la página en centécimas de milímetro.

• Number (Short) – Número de páginas (numeración inicia en 1), sólo lectura.

• Orientation (Enum) – orientación de la página (de acuerdo con la enumeración decom.sun.star.view.PaperOrientation)

Si estos parámetros son ajustados, entonces todas las páginas del documento serán afectadas.

El siguiente ejemplo ajusta el tamaño del papel de un documento de dibujo que ha sido reciénabierto a 20 x 20 centímetros con un márgen de 0.5 centímetros.

Capítulo 7 Documentos de libros de cálculo

Page 126: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As Object

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

Page.BorderLeft = 500Page.BorderRight = 500Page.BorderTop = 500Page.BorderBottom = 500

Page.Width = 20000Page.Height = 20000

Propiedades elementales de los objetos de dibujoLos objetos de dibujo incluyen figuras (rectángulos, círculos y demás), línea y objetos detexto. Todas estas comparten un número de cracterísticas comunes y soportan el serviciocom.sun.star.drawing.Shape. Este servicio define las propiedades Size yPosition del objeto de dibujo.

El siguiente ejemplo crea e inserta un rectángulo en un objeto de dibujo:

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

Page.add(RectangleShape)

Este ejemplo usa la llamada a StarDesktop.CurrentComponent para determinarcual documento está abierto. El objeto de documento determinado de esta forma retorna laprimera página del objeto de documento por medio de la llamada a drawPages(0).

Las estructuras Point y Size con el punto de origen (esquina izquierda) y el tamaño delobjeto de documento son inicializados. Los anchos son especificados en centécimas demilímetro. El código del programa usa la llamada Doc.CreateInstance para crear elobjeto de dibujo rectángulo como se especifica en el serviciocom.sun.star.drawing.RectangleShape. Al final, el objeto de dibujo es asignadoa una página usando la llamada Page.add.

Propiedades de rellenoLas 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 rellenoSOLID.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 127: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

El siguiente ejemplo crea un rectángulo y lo rellena con rojo (valor RGB 255,0,0):

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLIDRectangleShape.FillColor = RGB(255,0,0)

Page.add(RectangleShape)

Gradiente de coloresSi ajusta la propiedad a FillStyle a GRADIENT, puede aplicar una gradiente de color acualquier area de relleno en un documento OpenOffice.org.

Si desea aplicar un color de gradiente predefinido, puede asignar el nombre asociado de lapropiedad FillTransparenceGradientName. Para definir su propio color degradiente, necesita completar la estructura com.sun.star.awt.Gradient paraasignarle la propiedad FillGradient. Esta propiedad provee las siguientes opciones:

• Style (Enum) – Tipo de gradiente, por ejemplo, linear o radial (valores por defecto deacuerdo 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 encentécimas de milímetro.

• YoffSet (Short) – coordenada Y en la cual la gradiente de colores inicia, especificada encentécimas de milímetro.

• StarIntensity (Short) – Intensidad de StarColor como porcentaje (en OpenOffice.orgBasic, también puede especificar valores mayores que 100 porciento)

• EndIntensity (Short) – Intensidad de EndColor como porcentaje (en OpenOffice.orgBasic, también puede especificar valores mayores que 100 porciento)

• StepCount (Short) – número de graduaciones del color con el cual OpenOffice.orgcalcula la gradiente.

El siguiente ejemplo demuestra el uso de las gradientes de colores con la ayuda de laestructura com.sun.star.awt.Gradient:

Capítulo 7 Documentos de libros de cálculo

Page 128: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.SizeDim Gradient As New com.sun.star.awt.Gradient

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

Gradient.Style = com.sun.star.awt.GradientStyle.LINEARGradient.StartColor = RGB(255,0,0)Gradient.EndColor = RGB(0,255,0)Gradient.StartIntensity = 150Gradient.EndIntensity = 150Gradient.Angle = 450Gradient.StepCount = 100

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENTRectangleShape.FillGradient = Gradient

Page.add(RectangleShape)

Este ejemplo crea una gradiente de color lineal (Style = LINEAR). La gradiente inicia conrojo (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 esde un 150 porciento. (StarIntensity y EndIntensity) cuyos resultados se ven másbrillantes que los valores especificados en las propiedades StarColor y EndColor. Lagradiente de color es pintada usando una centécimas de graduación de colores individuales(StepCount).

SombreadoPara crear un relleno de sombras, la propiedad FillStyle debe ser ajustada a HATCH. Elcódigo de programa para definir sombreado es muy similar al código de gradientes de color.Contra una estructura auxiliar, en este caso com.sun.star.drawing.Hatch, es usadapara definir la apariencia del sombreado. La estructura del sombreado tiene las siguientespropiedades:

• Style (Enum) – tipo de sombreado: simple, cuadrado, o cuadrado con diagonales(valores por defecto en com.sun.star.awt.HatchStyle)

• Color (Long) – color de las líneas.

• Distancia (long) – distancia entre las líneas en centécimas de milímetro.

• Angle (Short) – ángulo del sombreado en décimas de grado.

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 129: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.SizeDim Hatch As New com.sun.star.drawing.Hatch

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.HATCH

Hatch.Style = com.sun.star.drawing.HatchStyle.SINGLEHatch.Color = RGB(64,64,64)Hatch.Distance = 20Hatch.Angle = 450

RectangleShape.FillHatch = Hatch

Page.add(RectangleShape)

Este código crea una estructura simple de sombreado (HatchStyle = SINGLE) cuyaslíneas son rotadas 45 grados (Angle). Las líneas son gris oscuro (Color) y tienen unespacio de 0.2 milímetros (Distance) entre ellas.

Mapas de bitsPara usar un mapa de bits como relleno, debe ajustar la propiedad FillStyle a BITMAP.Si el mapa de bits ya está disponible en OpenOffice.org, sólo necesitará especificar sunombre en la propiedad FillBitMapName y su estilo de desplegado (simple, mosaico oalargado) en la propiedad FillBitmapMode (valores por defecto de acuerdo concom.sun.star.drawing.BitmapMode)

Si desea usar un mapa de bits externo, puede especificar su URL en la propiedadFillBitmapURL.

El siguiente ejemplo crea un rectángulo y hace un mosaico del mapa de bits "Sky" disponibleen OpenOffice.org para rellenar el area del rectángulo.

Capítulo 7 Documentos de libros de cálculo

Page 130: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP

RectangleShape.FillBitmapName = "Sky"RectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

Page.add(RectangleShape)

TransparenciaPuede ajustar la transparencia que desea aplicar como relleno. La forma más simple paracambiar la transparencia de un elemento de dibujo es usar la propiedadFillTransparence.

El siguiente ejemplo crea un rectángulo rojo con una transparencia del 50 porciento.

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLIDRectangleShape.FillTransparence = 50RectangleShape.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 serviciocom.sun.star.Drawing.FillProperties también provee la propiedadFillTransparenceGradient. Esta es usada para definir la gradiente que especifica latransparencia del area de relleno.

Propiedades de la líneasTodos los objetos de dibujo que pueden tener un borde soportan el serviciocom.sun.star.drawing.LineStyle. Algunas de las propiedades que este servicio

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 131: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

provee son:

• LineStyle (Enum) – tipo de línea (los valores por defecto encom.sun.star.drawing.LineStyle)

• LineColor (Long) – color de la línea.

• LineTransparence (Short) – transparencia de la línea.

• LineWidth (Long) – ancho de la línea en centécimas de milímetro.

• LineJoint (enum) – transición a los puntos de conexión (valores de defecto concom.sun.star.drawing.LineJoint)

El siguiente ejemplo crea un rectángulo con un borde sólido (LineStyle = SOLID) quetiene 5 milímetros de ancho (LineWidth) y un 50 porciento de transparencia. Los bordesderecho e izquierdo de la línea extienden sus puntos para intersercar con la otra(LineJoint = MITER) para formar un ángulo derecho.

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

RectangleShape.LineColor = RGB(128,128,128)RectangleShape.LineTransparence = 50RectangleShape.LineWidth = 500RectangleShape.LineJoint = com.sun.star.drawing.LineJoint.MITER

RectangleShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID

Page.Add(RRectangleShape)

Adicionalmente a las propiedades listadas, el serviciocom.sun.star.drawing.LineStyle provee opciones de dibujo de líneas punteadasy rayadas. Para más información, vea la referencia de API de StarOffice.

Propiedades de texto (Objetos de dibujo)Los servicios com.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties pueden formatear texto en losobjetos de dibujo.

Estos servicios están relacionados a caracteres individuales y párrafos según está descrito endetalle en el capítulo 6 (Documentos de texto, pág 67).

El siguiente ejemplo inserta un texto en un rectángulo y formatea la fuente con el serviciocom.sun.star.style.CharacterPropierties:

Capítulo 7 Documentos de libros de cálculo

Page 132: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = Point

Page.add(RectangleShape)

RectangleShape.String = "Das ist ein Test"RectangleShape.CharWeight = com.sun.star.awt.FontWeight.BOLDRectangleShape.CharFontName = "Arial"

Este código usa la propiedad String del rectángulo para insertar el texto y las propiedadesCharWeight y CharFontName del serviciocom.sun.star.style.CharacterProperties para formatear la fuente del texto.

El texto solamente puede ser insertado después de que el objeto de dibuja ha sido agregado ala página. También puede usar el servicio com.sun.star.drawing.Text para posicionar yformatear el texto en el objeto de dibujo. Los siguientes son solo las propiedades másimportantes de este servicio:

• TextAutoGrowHeight (Boolean) – adapta el alto del elemento de dibujo al texto quecontenga.

• TextAutoGrowWidth (Boolean) – adapta el ancho del elemento de dibujo al texto quecontenga.

• TextHorizontalAdjust (Enum) – posición horizontal del texto dentro del elementode dibujo. (Valores de acuerdo concom.sun.star.drawing.TextHorizontalAdjust)

• TextVerticalAdjust (Enum) – posición vertical del texto dentro del elemento dedibujo (valores de acuerdo con com.sun.star.drawing.TextVerticalAdjust)

• TextLeftDistance (Long) – distancia izquierda entre el elemento de dibujo y eltexto dentro en centécimas de milímetro.

• TextRightDistance (Long) – distancia derecha entre el elemento de dibujo y eltexto dentro en centécimas de milímetro.

• TextUpperDistance (Long) – distancia superior entre el elemento de dibujo y eltexto dentro en centécimas de milímetro.

• TextLowerDistance (Long) – distancia inferior entre el elemento de dibujo y eltexto dentro en centécimas de milímetro.

El siguiente ejemplo demuestra el uso de las propiedades anteriores.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 133: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000

Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.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.TOPRectangleShape.TextHorizontalAdjust = _

com.sun.star.drawing.TextHorizontalAdjust.LEFTRectangleShape.TextLeftDistance = 300RectangleShape.TextRightDistance = 300RectangleShape.TextUpperDistance = 300RectangleShape.TextLowerDistance = 300

Este código inserta un elemento de dibujo en una página y luego agrega el texto en la esquinasuperior izquierda del objeto de dibujo usando las propiedades TextVerticalAdjust yTextHorizontalAdjust. La mínima distancia entre el borde del texto del objeto dedibujo está ajustada a tres milímetros.

Propiedades de las sombrasPuede agregar sombras a la mayoría de los objetos de dibujo con el serviciocom.sun.star.drawing.ShadowProperties. Las propiedades de este servicioson:

• 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 encentécimas de milímetro.

• ShadowYDistance (Long) – Distancia horizontal de la sombra del objeto de dibujo encentécimas de milímetro.

El siguiente ejemplo crea un rectángulo con una sombra con una configuración vertical yhorizontal desde un restángulo de 2 milímetros. La sombra es renderizada en gris oscuro a un50 porciento de transparencia-

Capítulo 7 Documentos de libros de cálculo

Page 134: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = PointRectangleShape.Shadow = TrueRectangleShape.ShadowColor = RGB(192,192,192)RectangleShape.ShadowTransparence = 50RectangleShape.ShadowXDistance = 200 RectangleShape.ShadowYDistance = 200

Page.add(RectangleShape)

Un vistazo a varios objetos de dibujoFormas rectangularesLos objetos rectangulares (com.sun.star.drawing.RectangleShape) soportan lossiguientes servicios para el formateado de objetos:

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

• Propiedades de líneas com.sun.star.drawing.LineProperties

• Propiedades de texto com.sun.star.drawing.Text (concom.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties)

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

• CornerRadius (Long) radio del redondeo de las esquinas en centécimas de milímetro.

Círculos y elipsesEl servicio com.sun.star.drawing.EllipseShape es el responsable de los círculosy elipses y soporta los siguientes servicios:

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

• Propiedades de líneas com.sun.star.drawing.LineProperties

• Propiedades de texto com.sun.star.drawing.Text (concom.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties)

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

Adicionalmente a estos servicios, los círculos y elipses también proveen las siguientespropiedades:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 135: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• CircleKind (Enum) – tipo de círculo o elipse (valores de acuerdo concom.sun.star.drawing.CircleKind)

• CircleStartAngle (Long) – ángulo inicial en décimas de grado. (sólo parasegmentos de círculo o elipse)

• CircleEndAngle (Long) – ángulo final en décimas de grado (sólo para segmentos decírculo o elipse)

La propiedad CircleKind determina si un objeto es un cículo completo, una tajada de círculo,o una sección de un círculo. Los siguientes valores están disponibles:

• com.sun.star.drawing.CircleKind.FULL círculo o elipse completa.

• com.sun.star.drawing.CircleKind.CUT sección de un círculo (círculo parcialcuyas interfaces están ligadas directamente con otra)

• com.sun.star.drawing.CircleKind.SECTION tajada de un círculo

• com.sun.star.drawing.CircleKind.ARC ángulo (no incluye la línea delcírculo)

El siguiente ejemplo crea una tajada circular con un ángulo de 70 grados (producido por ladiferencia entre el grado inicial de 20 grados y el grado final de 90 grados)

Dim Doc As ObjectDim Page As ObjectDim EllipseShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

EllipseShape = Doc.createInstance("com.sun.star.drawing.EllipseShape")EllipseShape.Size = SizeEllipseShape.Position = Point

EllipseShape.CircleStartAngle = 2000EllipseShape.CircleEndAngle = 9000EllipseShape.CircleKind = com.sun.star.drawing.CircleKind.SECTION

Page.add(EllipseShape)

LíneasOpenOffice.org Provee el servicio com.sun.star.drawing.LineShape para losobjetos de líneas. Los objetos de líneas soportan todos los servicios generales de formateadocon excepción de los de áreas. Los siguientes son todas las propiedades que están asociadascon el servicio LineShape:

• Propiedades de líneas com.sun.star.drawing.LineProperties

• Propiedades de texto com.sun.star.drawing.Text (concom.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties)

Capítulo 7 Documentos de libros de cálculo

Page 136: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

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

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

Dim Doc As ObjectDim Page As ObjectDim LineShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

LineShape = Doc.createInstance("com.sun.star.drawing.LineShape")LineShape.Size = SizeLineShape.Position = Point

Page.add(LineShape)

Figuras de polígonoOpenOffice.org También soporta figuras de polígonos complejos por medio del serviciocom.sun.star.drawing.PolyPolygonShape. Estrictamente hablando, un objetoPolyPolygon no es un simple polígono, sino un polígono múltiple. Algunas listasindependientes contienen los puntos de las esquinas que pueden ser especificados ycombinados para formar un objeto completo.

Como las figuras rectangulares, todas las propiedades de formato de los objetos de dibujotambién están provistas para los polypolygons:

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

• Propiedades de líneas com.sun.star.drawing.LineProperties

• Propiedades de texto com.sun.star.drawing.Text (concom.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties)

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

El servicio PolyPolygonShape también tiene una propiedad que permite definir lascoordenadas del polígono:

• PolyPolygon (Array) una matriz que contiene las coordenadas del polígono. (doblematriz con los puntos del tipo com.sun.star.awt.Point)

El siguiente ejemplo muestra como puede definir un triángulo con el servicioPolyPolygonShape.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 137: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Page As ObjectDim PolyPolygonShape As ObjectDim PolyPolygon As VariantDim Coordinates(2) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")' Page.add must take place before the coordinates are setPage.add(PolyPolygonShape)

Coordinates(0).x = 1000Coordinates(1).x = 7500Coordinates(2).x = 10000Coordinates(0).y = 1000Coordinates(1).y = 7500Coordinates(2).y = 5000

PolyPolygonShape.PolyPolygon = Array(Coordinates())

Desde que los puntos de un polígono son definidos como valores absolutos, necesitaespecificar el tamaño de la posición inicial del polígono. En cambio, necesita crear unamatriz de los puntos, empacar esta matriz en una segunda matriz (usando la llamada (Array(Coordinates), y luego asignar esta matriz al polígono. Después de que la llamadacorrespondiente es hecha, el polígono puede ser insertado en el documento.

Esta matriz doble en la definición permite la creación de formas complejas al combinaralgunos polígonos. Por ejemplo, puede crear un rectángulo e insertar otro rectángulo adentropara crear un hueco en el rectángulo original:

Capítulo 7 Documentos de libros de cálculo

Page 138: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Dim Doc As ObjectDim Page As ObjectDim PolyPolygonShape As ObjectDim PolyPolygon As VariantDim Square1(3) As New com.sun.star.awt.PointDim Square2(3) As New com.sun.star.awt.PointDim Square3(3) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")

' Page.add must take place before the coordinates are setPage.add(PolyPolygonShape)

Square1(0).x = 5000Square1(1).x = 10000Square1(2).x = 10000Square1(3).x = 5000Square1(0).y = 5000Square1(1).y = 5000Square1(2).y = 10000Square1(3).y = 10000

Square2(0).x = 6500Square2(1).x = 8500Square2(2).x = 8500Square2(3).x = 6500Square2(0).y = 6500Square2(1).y = 6500Square2(2).y = 8500Square2(3).y = 8500

Square3(0).x = 6500Square3(1).x = 8500Square3(2).x = 8500Square3(3).x = 6500Square3(0).y = 9000Square3(1).y = 9000Square3(2).y = 9500Square3(3).y = 9500

PolyPolygonShape.PolyPolygon = Array(Square1(), Square2(), Square3())

Con respecto a cuales areas son rellenas y cuales areas son huecos, OpenOffice.org aplicauna regla simple:

El límite de la figura de afuera es siempre el borde exterior del polígono. La siguiente líneainterior es el borde interior de la figura y marca la transición del primer hueco. Si hay otralínea adentro, marca la transición del area de relleno.

Los últimos elementos de dibujo presentados aquí son objetos gráficos basados en el serviciocom.sun.star.drawing.GraphicObjectShape. Este puede ser usado concualquier gráfico dentro de OpenOffice.org cuya apariencia puede ser adaptada usando unamplio rango de propiedades.

Los objetos gráficos soportan dos de las propiedades generales de formateo:

• Propiedades de Texto com.sun.star.drawing.Text (concom.sun.star.style.CharacterProperties ycom.sun.star.style.ParagraphProperties)

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

Propiedades adicionales que son soportadas por los objetos gráficos son:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 139: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• GraphicURL (String) - URL del gráfico

• AdjustLuminance (Short) – iluminación de los colores, como porcentaje (también sonpermitidos valores negativos)

• AdjustContrast (Short) – contraste como porcentaje (valores negativos también sonpermitidos)

• AdjustRed (Short) – valor del rojo como porcentaje (valores negativos también sonpermitidos)

• AdjustGreen (Short) – valor del rojo como porcentaje (valores negativos también sonpermitidos)

• AdjustBlue (Short) – valor del azul como porcentaje (valores negativos también sonpermitidos)

• Gamma (Short) – valor del gama del gráfico

• Transparency (Short) – transparencia del gráfico como porcentaje

• GraphicColorMode (enum) – modo del color, por ejemplo, standard, estadios de gris,blanco y negro (valores por defecto de acuerdo concom.sun.star.drawing.ColorMode)

El siguiente ejemplo muestra como insertar una página dentro de un objeto gráfico:

Dim Doc As ObjectDim Page As ObjectDim GraphicObjectShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

' specifications, insignificant because latter coordinates are bindingPoint.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

GraphicObjectShape = Doc.createInstanc("com.sun.star.drawing.GraphicObjectShape")GraphicObjectShape.Size = SizeGraphicObjectShape.Position = Point

GraphicObjectShape.GraphicURL = "file:///c:/test.jpg"GraphicObjectShape.AdjustBlue = -50GraphicObjectShape.AdjustGreen = 5GraphicObjectShape.AdjustBlue = 10GraphicObjectShape.AdjustContrast = 20GraphicObjectShape.AdjustLuminance = 50GraphicObjectShape.Transparency = 40GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD

Page.add(GraphicObjectShape)

Este código inserta el gráfico test.jpg y adapta su apariencia usando las propiedades deAdjust. En este ejemplo, los gráfico son decolorados como un 40 porciento con ningún otraconversión de colores. No toma lugar (GraphicColorMode = STANDARD).

Capítulo 7 Documentos de libros de cálculo

Page 140: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Agrupando objetosEn muchas situación, es útil agrupar varios objetos de dibujo individuales juntos de maneraque se comporten como un sólo gran objeto.

El siguiente combina dos objetos de dibujo:

Dim Doc As ObjectDim Page As ObjectDim Square As ObjectDim Circle As ObjectDim Shapes As ObjectDim Group As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.SizeDim NewPos As New com.sun.star.awt.PointDim Height As LongDim Width As Long

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

Point.x = 3000Point.y = 3000Size.Width = 3000Size.Height = 3000

' Crea un elemento de dibujo cuadradoSquare = Doc.createInstance("com.sun.star.drawing.RectangleShape")Square.Size = SizeSquare.Position = PointSquare.FillColor = RGB(255,128,128) Page.add(Square)

' Crea un elemento de dibujo circularCircle = Doc.createInstance("com.sun.star.drawing.EllipseShape")Circle.Size = SizeCircle.Position = PointCircle.FillColor = RGB(255,128,128) Circle.FillColor = RGB(0,255,0)Page.add(Circle)

' Combina los elementos de dibujo cuadrado y círculoShapes = createUnoService("com.sun.star.drawing.ShapeCollection")Shapes.add(Square)Shapes.add(Circle)Group = Page.group(Shapes)

' Centra los elementos de dibujo combinadosHeight = Page.HeightWidth = Page.WidthNewPos.X = Width / 2NewPos.Y = Height / 2Height = Group.Size.HeightWidth = Group.Size.WidthNewPos.X = NewPos.X - Width / 2NewPos.Y = NewPos.Y - Height / 2Group.Position = NewPos

Este código crea un rectángulo y un círculo y los inserta dentro de la página. Entonces creaun objeto que soporte el servicio com.sun.star.drawing.ShapeCollection y usael método Add para agregar el rectángulo y el círculo a este objeto. ShapeCollection esagregado a la página usando el método Group y retorna el objeto Group actual que puedeser aditado como una fugura individual.

Si desea formatear objetos individuales de un grupo, aplique el formateo antes de agregarlos

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 141: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

Rotando y recorte de objetos de dibujoTodos los objetos de dibujo que están descritos en las secciones previas pueden ser rotados yrecortados usando el servicio com.sun.star.drawing.RotationDescriptor.

El servicio provee las siguientes propiedades:

• RotateAngle (Long) ángulo de rotación en centécimas de grado

• ShearAngle (Long) ángulo de recorte en centécimas de grado

El siguiente ejemplo crea un rectángulo y lo rota a 30 grados usando la propiedadRotateAngle:

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = PointRectangleShape.RotateAngle = 3000

Page.add(RectangleShape)

El siguiente ejemplo crea el mismo rectángulo como en el ejemplo previo, pero en cambio lorecorta por el medio 30 grados usando la propiedad ShearAngle:

Dim Doc As ObjectDim Page As ObjectDim RectangleShape As ObjectDim Point As New com.sun.star.awt.PointDim Size As New com.sun.star.awt.Size

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")RectangleShape.Size = SizeRectangleShape.Position = PointRectangleShape.ShearAngle = 3000

Page.add(RectangleShape)

Búsqueda y reemplazoComo en los objetos de texto, los documentos de dibujo proveen una función de búsqueda yreemplazo. Esta función es similar a la usada en los objetos de texto descrita en el capítulo 6,

Capítulo 7 Documentos de libros de cálculo

Page 142: Guía del programador BASIC - OpenOffice.org

Capítulo 7Documentos de libros de cálculo

Documentos de texto.(pág 79) Sin embargo, los documentos de dibujo los objetosdescriptores para búsqueda y reemplazo no son creados directamente por medio del objeto dedocumento, sino por medio del nivel de caracteres asociado.

El siguiente ejemplo muestra el proceso de reemplazo dentro de un dibujo:

Dim Doc As ObjectDim Page As ObjectDim ReplaceDescriptor As ObjectDim I As Integer

Doc = StarDesktop.CurrentComponentPage = Doc.drawPages(0)

ReplaceDescriptor = Page.createReplaceDescriptor()ReplaceDescriptor.SearchString = "is"ReplaceDescriptor.ReplaceString = "was"

For I = 0 to Doc.drawPages.Count – 1Page = Doc.drawPages(I)Page.ReplaceAll(ReplaceDescriptor)

Next I

Este código usa la primera página de dibujo del documento para crear el ReplaceDescriptor yluego aplica este descriptor en un ciclo para todas las páginas del documento de dibujo.

PresentacionesEn OpenOffice.org las presentaciones están basadas en documentos de dibujo. Cada páginade la presentación es una filmina.

Puede accesar filminas de la misma forma en que un dibujo estándar es accesado por mediode la lista DrawPages de objeto de documento. El serviciocom.sun.star.presentation.PresentationDocument, es el responsable de los documentos depresentaciones, también provee el servicio completocom.sun.star.drawing.DrawingDocument.

Trabajando con presentacionesAdicionalmente a las funciones de dibujos provistas por la propiedad Presentation, eldocumento de presentación tiene el objeto de presentación que provee acceso a propiedadesprincipales y mecanismos de contro para las presentaciones. Por ejemplo, este objeto proveeel método start que puede ser usado para iniciar la presentación.

Dim Doc As ObjectDim Presentation As Object

Doc = StarDesktop.CurrentComponentPresentation = Doc.Presentation

Presentation.start()

El código usado en este ejemplo crea un objeto Doc que hace referencia al documento depresentación actual y establece el objeto de presentación asociado. El método start() delobjeto es usado para iniciar el ejemplo y ejecutar la presentación en pantalla.

Los siguientes métodos son provistos para los objetos de presentación:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 143: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• start – Inicia la presentación

• end – finaliza la presentación

• rehearseTimings – inicia la presentación desde el inicio y establece su tiempo deejecución

Las siguientes propiedades también están disponibles:

• AllowAnimations (Boolean) ejecuta las animaciones en la presentación

• CustomShow (String) permite especificar el nombre de las presentaciones de maneraque pueda referenciar el nombre de la presentación.

• FirstPage (String) nombre de la filmina con la que desea iniciar la presentación

• IsAlwaysOnTop (Boolean) siemple despliega la ventana de la presentación como laprimera ventana en la pantalla.

• IsAutomatic (Boolean) automáticamente ejecuta toda la presentación

• IsEndless (Boolean) reinicia la presentación desde el inicio cuando esta termina.

• IsFullScreen (Boolean) automáticamente inicia la presentación en modo de pantallacompleta.

• IsMouseVisible (Boolean) despliega el puntero del mouse durante la presentación

• Pause (long) la cantidad de tiempo en que una pantalla blanca es desplegada al final dela presentación

• StartWithNavigator (Boolean) despliega la ventana del navegador cuando inicia lapresentación

• UsePn (Boolean) despliega el puntero durante la presentación

Capítulo 7 Documentos de libros de cálculo

Page 144: Guía del programador BASIC - OpenOffice.org
Page 145: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

OpenOffice.org puede desplegar los datos como un diagrama, lo cual crea vínculos gráficosentre los datos en forma de barras, gráficos de pastel, líneas y otros elementos. Los datospueden ser desplegados como gráficos en 2D o 3D, y la apariencia de los elementos dediagramas puede ser adaptada individualmente de la misma manera en que se procesan loselementos de dibujo.

Si los datos están disponibles de la hoja de cálculo, entonces pueden ser vinculadosdinámicamente al diagrama. Cualquier modificación en los datos básicos pueden en estainstancia ser vistos inmediatamente al diagrama asociado. Este capítulo provee un vistazo dela interface de programación de los módulos de diagramas de OpenOffice.org enfocados aluso de diagramas dentro de los documentos de cálculo.

Usando diagramas en hojas de cálculo.Los diagramas no son tratados como documentos independientes en OpenOffice.org, sinocomo objetos incrustados en un documento existente.

Mientras los diagramas permanecen en los documentos aislados del contenido de losdocumentos, cuando se usan hojas de cálculo, se provee un mecanismo que permite que seestablesca un vínculo entre el documento de datos y el diagrama insertado. El siguienteejemplo explica la interacción entre la hoja de cálculo y el diagrama:

Dim Doc As ObjectDim Charts As ObjectDim Chart as ObjectDim Rect As New com.sun.star.awt.RectangleDim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponentCharts = Doc.Sheets(0).Charts

Rect.X = 8000Rect.Y = 1000Rect.Width = 10000Rect.Height = 7000

RangeAddress(0).Sheet = 0RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0RangeAddress(0).EndColumn = 2RangeAddress(0).EndRow = 12

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)

Mientras el código usado en el ejemplo puede aparecer complejo, el proceso central estálimitado a tres líneas: la primera línea central crea la variable Doc, que hace referencia a lahoja de cálculo actual. (Línea Doc = StarDesktop.CurrentComponent). El códigousado en el ejemplo crea una lista conteniendo todos los diagramas de la primera hoja decálculo. (Línea Charts = Doc.Sheets(0).Charts). Finalmente, un nuevo diagramaes agregado en la última línea de la lista usando el método addNewByName. Este diagramanuevo es entonces visible al usuario.

Capítulo 8 Diagramas (gráficos)

Page 146: Guía del programador BASIC - OpenOffice.org

Capítulo 8Diagramas (gráficos)

La última línea inicializa las estructuras auxiliares Rect y RangeAddress, las cualesproveen el método addNewByName provisto como parámetro. Rect determina la posicióndel diagrama dentro de la hoja de cálculo. RangeAddress determina el rango de datos quevan a ser vinculados en el diagrama.

El ejemplo previo crea un diagrama de barras. Si un tipo diferente de diagrama es requerido,entonces el diagrama de barras debe ser explícitamente reemplazado.:

Chart = Charts.getByName("MyChart").embeddedObject

Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")

La primera línea define el objeto de diagrama correspondiente. La segunda línea reemplaza eldiagrama actual con uno nuevo. En este ejemplo, un diagrama de líneas.

En Excel, es hecha una distinción entre los diagramas que han sido insertados como una hojaseparada en un documento Excel y los gráficos que han sido vínculados en una tabla depágina. Correspondiente, dos métodos diferentes están definidos para estos gráficos. Estadistinción no es hecha en OpenOffice.org Basic, porque los gráficos en OpenOffice.org Calcson siempre objetos vínculados en la tabla de la página. Los gráficos son siempre accesadosusando la lista del objeto de hoja de cálculo asociado.

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

Los elementos individuales de un diagramaTítulo, sub-títulos, y llaves.Un título, un sub-título, y una llave forman parte de los elementos básicos de cada diagrama.Los diagramas proveen sus propios objetos para cada uno de estos elementos. El objetodiagrama provee las siguientes propiedades para administrar estos elementos:

• HasMainTitle (Boolean) Activa el título.

• Title (Object) objeto con información detallada acerca del título del diagrama(soportael servicio com.sun.star.chart.ChartTitle).

• HasSubTitle(Boolean) activa el sub-título.

• Subtitle (Object) objeto q}con la información detallada acerca del sub-título deldiagrama (soporta el servicio com.sun.star.chart.ChartTitle).

• HasLegend (Boolean) activa la llave.

• Legend (Object) objeto con información detallada acerca de la llave del diagrama(soporta el servicio com.sun.star.chart.ChartLegendPosition).

En mucohs aspectos, los elementos especificados corresponden a elementos de dibujo. Esto

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 147: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

es debido a que de hecho ambos usan el servicio com.sun.star.chart.ChartTitley el com.sun.star.chart.ChartLegendPosition soportados por el serviciosupport the com.sun.star.drawing.Shape, el cual forma las bases de programacióntécnica de los elementos de dibujo.

Los usuarios entonces tienen la oportunidad de determinar la posición y tamaño de loselementos usando las propiedades Size y Position.

Las otras propiedades de relleno y líneas (los servicioscom.sun.star.drawing.FillProperties y com.sun.star.drawing.LineStyle) asicomo las propiedades de los caracteres (Serviciocom.sun.star.style.CharacterProperties) son provistos por los elementos deformateo com.sun.star.chart.ChartTitle los que contienen no solamente las propiedades deformato nombradas, sino también estas otras dos propiedades:

• TextRotation (Long) ángulo de rotación del texto en centécimas de grado.

• String (String) el texto que es desplegado como el título o sub-título.

La llave del diagrama (el servicio com.sun.star.chart.ChartLegend) contiene lasiguientes propiedad adicional:

• Alignment (Enum) posición en la cual debe aparecer la llave (valores por defecto deacuerdo con com.sun.star.chart.ChartLegendPosition).

El siguiente ejemplo crea un diagrama y le asigna el titulo "Test", el sub-título "Test 2" y unallave. La llave tiene un color de fondo gris, es colocado en la parte de abajo del diagrama, ytiene un tamaño de letra de 7 puntos.

Capítulo 8 Diagramas (gráficos)

Page 148: Guía del programador BASIC - OpenOffice.org

Capítulo 8Diagramas (gráficos)

Dim Doc As ObjectDim Charts As ObjectDim Chart as ObjectDim Rect As New com.sun.star.awt.RectangleDim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Rect.X = 8000Rect.Y = 1000Rect.Width = 10000Rect.Height = 7000

RangeAddress(0).Sheet = 0RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0RangeAddress(0).EndColumn = 2RangeAddress(0).EndRow = 12

Doc = StarDesktop.CurrentComponentCharts = Doc.Sheets(0).ChartsCharts.addNewByName("MyChart", Rect, RangeAddress(), True, True)Chart = Charts.getByName("MyChart").EmbeddedObject

Chart.HasMainTitle = TrueChart.Title.String = "Test"

Chart.HasSubTitle = TrueChart.Subtitle.String = "Test 2"

Chart.HasLegend = True Chart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOMChart.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLIDChart.Legend.FillColor = RGB(210, 210, 210)Chart.Legend.CharHeight = 7

FondoCada diagrama tiene un area de fondo. Cada area es un objeto, que cual puede ser accesadousando las siguientes propiedades del objeto de diagrama:

• Area (Object) area de fondo del diagrama (soporta el serviciocom.sun.star.chart.ChartArea).

El fondo del diagrama cubre toda su area, incluyéndo el area bajo el título, sub-título y llavedel diagrama. El servicio asociado com.sun.star.chart.ChartArea soporta lapropiedades línea y relleno y provee más propiedades.

Paredes y pisos del diagramaMientras el fondo del diagrama cubre toda el area del diagrama, la pared de fondo deldiagrama está limitada al area directamente detrás del area de datos.

Dos paredes de diagramas normalmente existen en los diagramas 3D: uno detrás del area dedatos y uno como la demarcación izquierda para el eje de las Y. Los diagramas 3Dnormalmente también tienen un piso.

• Floor (Object) piso del panel del diagrama (sólo para diagramas de 3D, soportan elservicio com.sun.star.chart.ChartArea).

• Wall (Object) paredes del diagrama (sólo para diagramas 3D, soportan el serviciocom.sun.star.chart.ChartArea).

Los objetos específicos soportan el servicio com.sun.star.chart.ChartArea, loscuales en cambio proveen las propiedades comunes de relleno y línea (servicios

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 149: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

com.sun.star.drawing.FillProperties ycom.sun.star.drawing.LineStyle, refiérase al capítulo 7 pág 126).

Las paredes y piso del diagrama son accesados por medio del objeto Chart, los cuales encambio es parte del objeto Chart:

Chart.Area.FillBitmapName = "Sky"

El siguiente ejemplo muestra como los gráficos (llamado Sky) puede ser contenido enOpenOffice.org puede ser usado como fondo de un diagrama

Dim Doc As ObjectDim Charts As ObjectDim Chart as Object

Dim Rect As New com.sun.star.awt.RectangleDim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Rect.X = 8000Rect.Y = 1000Rect.Width = 10000Rect.Height = 7000

RangeAddress(0).Sheet = 0RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0RangeAddress(0).EndColumn = 2RangeAddress(0).EndRow = 12

Doc = StarDesktop.CurrentComponentCharts = Doc.Sheets(0).Charts

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)Chart = Charts.getByName("MyChart").EmbeddedObject

Chart.Area.FillStyle = com.sun.star.drawing.FillStyle.BITMAPChart.Area.FillBitmapName = "Sky"Chart.Area.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

EjesOpenOffice.org reconoce cinco diferentes ejes que pueden ser usados en un diagrama. El elescenario más simple, estos son los ejes de las X y de las Y. Cuando se trabaja con diagramas3D, algunas veces también es provisto un eje de las Z.

Para diagramas en los cuales los valores de varios renglones de datos derivan unos de otros,OpenOffice.org provee un segundo eje de las X y eje de las Y para operaciones de escalado.

Primeros ejes de las X, Y y ZAdicionalmente al eje actual, para cada uno de los primeros ejes de las X, Y y Z, hay tambiénun título, una descripción, una rejilla y una rejilla auxiliar. Hay opciones para desplegar yconciliar todos estos elementos. El objeto de diagrama provee las siguientes propiedades paraadministrar estas características

(Tomando el ejemplo del eje de las X; las propiedades para los ejes de las Y y las Z estánestructurados de la misma forma):

• HasXAxis (Boolean) activa el eje de las X.

• XAxis (Object) objeto con información detallada acerca del eje de las X. (soporta elservicio com.sun.star.chart.ChartAxis).

Capítulo 8 Diagramas (gráficos)

Page 150: Guía del programador BASIC - OpenOffice.org

Capítulo 8Diagramas (gráficos)

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

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

• XMainGrid (Object) objeto con información detallada acerca de la rejilla principal parael eje de las X (soporta el servicio com.sun.star.chart.ChartGrid).

• HasXAxisHelpGrid (Boolean) activa la rejilla auxiliar para el eje de las X.

• XHelpGrid (Object) objeto con información detallada acerca de la rejilla auxiliar parael eje de las X. (soporta el servicio com.sun.star.chart.ChartGrid).

• HasXAxisTitle (Boolean) activa el título para el eje de las X.

• XAxisTitle (Object) objeto con información detallada acerca del título del eje de lasX.(soporta el servicio com.sun.star.chart.ChartTitle).

Segundo eje de las X y las YLas siguientes propiedades están disponibles para el segundo eje de las X y las Y(propiedades tomando como ejemplo el segundo eje de las X):

• HasSecondaryXAxis (Boolean) activa el segundo eje de las X.

• SecondaryXAxis (Object) objeto con información detallada acerca del segundo eje delas X. (soporta el servicio com.sun.star.chart.ChartAxis).

• HasSecondaryXAxisDescription (Boolean) activa la descripción para el eje delas X.

Propiedades de los ejesLos objetos de los ejes de un diagrama OpenOffice.org soportan el serviciocom.sun.star.chart.ChartAxis.

Adicionalmente a las propiedades para los caracteres (serviciocom.sun.star.style.CharacterProperties, refierase al capítulo 6, pág 71) ylas líneas (servicio com.sun.star.drawing.LineStyle, refierase al capítulo 7, pág122), provee las siguientes propiedades:

• Max (Double) – el valor máximo del eje.

• Min (Double) – el valor mínimo del eje.

• Origin (Double) – punto de intersección para el cruce de los ejes.

• StepMain (Double) – distancia entre las dos líneas primarias de los ejes.

• StepHelp (Double) – distancia entre las dos líneas secundarias de los ejes.

• AutoMax (Boolean) – automáticamente determina el valor máximo para los ejes.

• AutoMin (Boolean) – automáticamente determina el valor mínimo para los ejes.

• AutoOrigin (Boolean) – automáticamente determina el punto de intersección para elcruce de los ejes.

• AutoStepMain (Boolean) – automáticamente determina la distancia entre las líneas

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 151: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

primarias de un eje.

• AutoStepHelp (Boolean) – automáticamente determina la distancia entre las líneassecundarias de los ejes.

• Logarithmic (Boolean) – escalas de los ejes de manera logarítmica (en lugar de lamanera lineal).

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

• TextRotation (Long) – ángulo de rotación para las etiquetas de texto en centécimas degrado.

• Marks (Const) – constante que especifica cuales de las líneas primarias de los ejes debenestar dentro o fuera del area de diagrama (valores por defecto de acuerdo concom.sun.star.chart.ChartAxisMarks)

• HelpMarks (Const) – constante que especifica cuales de las líneas secundarias de losejes deben estar dentro y/o fuera del area del diagrama (valores por defecto de acuerdo concom.sun.star.chart.ChartAxisMarks)

• Overlap (Long) – porcentaje que especifica la extención en las cuales las barras de losdiferentes conjuntos de datos pueden ser sobrepuestos (al 100%, las barras son mostradascompletamente sobrepuestas, al -100%, hay una distancia de la mitad de una barra entreellas).

• GapWidth (long) – porcentaje que especifica la distancia que puede haber entre entre losdiferentes grupos de barras de un diagrama (al 100%, hay una distancia correspondiente ala mitad de una barra).

• ArrangeOrder (enum) – detalles de la posición de la inscripción; adicionalmente a laposición de una línea, también está la opción de dividir la etiqueta alternativamente sobredos líneas (valores por defecto de acuerdo concom.sun.star.chart.ChartAxisArrangeOrderType)

• TextBreak (Boolean) – permite saltos de línea.

• TextCanOverlap (Boolean) – permite que el texto se sobreponga.

• NumberFormat (Long) – formato de números (refiérase al capítulo 7, en la secciónformato de números, fecha y texto, pág 105)

Propiedades de los ejes de las rejillas El objeto para el eje de las rejilas está basado en el servicio com.sun.star.chart.ChartGrid elcual, a su vez soporta las propiedades de línea del serviciocom.sun.star.drawing.LineStyle (Refiérase al capítulo 7 pag 126).

Propiedades del título del ejeLos objetos para el formateo del título del eje están basados en el serviciocom.sun.star.chart.ChartTitle, el cual también es usado para los títulos de losdiagramas.

Capítulo 8 Diagramas (gráficos)

Page 152: Guía del programador BASIC - OpenOffice.org

Capítulo 8Diagramas (gráficos)

EjemploEl siguiente ejemplo crea un diagrama de línea. El color para la pared de fondo del diagramaes puesto a blanco. Ambos ejes X y Y tienen una rejilla auxiliar gris para la orientaciónvisual. Elvalor mínimo para el eje-Y está fijado en y el valor máximo está fijado en 100 demanera que la resolución del diagrama es retenida, aún si los valores son cambiados.

Dim Doc As ObjectDim Charts As ObjectDim Chart as Object

Dim Rect As New com.sun.star.awt.RectangleDim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponentCharts = Doc.Sheets(0).Charts

Rect.X = 8000Rect.Y = 1000Rect.Width = 10000Rect.Height = 7000

RangeAddress(0).Sheet = 0RangeAddress(0).StartColumn = 0 RangeAddress(0).StartRow = 0RangeAddress(0).EndColumn = 2RangeAddress(0).EndRow = 12

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)Chart = Charts.getByName("MyChart").embeddedObjectChart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")Chart.Diagram.Wall.FillColor = RGB(255, 255, 255)

Chart.Diagram.HasXAxisGrid = TrueChart.Diagram.XMainGrid.LineColor = RGB(192, 192, 192)

Chart.Diagram.HasYAxisGrid = TrueChart.Diagram.YMainGrid.LineColor = RGB(192, 192, 192)Chart.Diagram.YAxis.Min = 0 Chart.Diagram.YAxis.Max = 100

Diagramas 3DMuchos diagramas en OpenOffice.org pueden ser desplegados con gráficos 3D. Todos lostipos de diagramas que proveen esta opción soportan el serviciocom.sun.star.chart.Dim3DDiagram. El servicio provee solamente una propiedad:

• Dim3D (Boolean) activa el desplegado en 3D.

Diagramas en pilaLos diagramas en pila son diagramas que son arreglados con varios valores individuales unosobre el otro para producir un valor total. Esta vista muestra no solamente los valoresindividuales, sino también un vistazo de todos los valores.

En OpenOffice.org, varios tipos de de diagramas pueden ser desplegados en forma de pila.Todos estos diagramas soportan el servicio com.sun.star.chart.StackableDiagram, el cual a suvez provee las siguientes propiedades:

• Stacked (Boolean) activa la vista en pila.

• Percent (Boolean) en lugar de los valores absolutos, despliega su distribución enporcentajes.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 153: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Tipos de diagramas

Diagramas de líneasLos diagramas de líneas (servicio com.sun.star.chart.LineDiagram) soportan uneje-X, dos ejes-Y y un eje-Z. Pueden ser desplegados como gráficos 2D o 3D (serviciocom.sun.star.chart.Dim3Ddiagram). Las líneas pueden ser apiladas(com.sun.star.chart.StackableDiagram).

Los diagramas de líneas proveen las siguientes propiedades:

• SymbolType (const) – símbolo para desplegar los puntos de datos(constantes de acuerdocon com.sun.star.chart.ChartSymbolType).

• SymbolSize (Long) – tamaño del símbolo para desplegado de los puntos de datos encentécimas de milímetro.

• SymbolBitmapURL (String) – nombre del archivo gráfico para el desplegado de lospuntos de datos.

• Lines (Boolean) – vínculos de los puntos de datos por significado de las líneas.

• SplineType (Long) – función spline para el emparejado de líneas (0: sin la función, 1:splines cúbicas, 2: splines B).

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

• SplineResolution (Long) – número soportado de puntos para el cálculo de las spline

Diagramas de áreaLos diagramas de área (servicio com.sun.star.chart.AreaDiagram) soportan uneje-X, dos ejes-Y y un eje-Z. Pueden ser desplegados como gráficos en 2D y 3D. (serviciocom.sun.star.chart.Dim3Ddiagram). Las areas pueden ser apiladas(com.sun.star.chart.StackableDiagram).

Diagramas de barrasLos diagramas de barras (servicio com.sun.star.chart.BarDiagram) soportan uneje-X, dos ejes-Y, y un eje-Z . Pueden ser desplegados como gráficos en 2D y 3D. (serviciocom.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 desplegadashorizontalmente.

• Deep (Boolean) – en la vista 3D, posiciones de las barras detrás una de la otra en lugar deuna junto a la otra.

• StackedBarsConnected (Boolean) – vínculos asociados a las barras en los

Capítulo 8 Diagramas (gráficos)

Page 154: Guía del programador BASIC - OpenOffice.org

Capítulo 8Diagramas (gráficos)

diagramas apilados por el significado de las líneas (disponible solamente con diagramasde carta horizontales).

• NumberOfLines (Long) – número de líneas para ser desplegadas en un diagramaapilado como líneas en lugar de barras.

Diagramas de pastelLos diagramas de pastel (servicio com.sun.star.chart.PieDiagram) no contienenejes y no pueden ser apilados. Pueden ser desplegados como gráficos 2D o 3D. (serviciocom.sun.star.chart.Dim3Ddiagram).

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 155: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

OpenOffice.org Tiene una interface a base de datos integrada (independiente de cualquiersistema) llamada Star Database Connectivity (SDBC). El objetivo del desarrollo de estainterface 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. Lasfuentes por medio de la cual estos controladores toman sus datos, es irrelevante para elusuario SDBC. Algunos controladores accesan bases de datos basadas en archivos y tomansus datos directamente de estas. Otros usan interfaces estándar como JDBC o ODBC. Estas,sin embargo, tienen controladores especiales por medio de los cuales pueden accesar lalibreta de direcciones MAPI, directorios LDAP o hojas de cálculo OpenOffice.org comofuentes de datos.

Desde que los controladores están basados en componentes UNO, otros controladores puedenser desarrollados y por lo tanto abrir nuevas fuentes de datos. Puede encontrar detalles deesto en la "StarOffice Developer's Guide".

En términos de su concepto, SDBC es comparable con las librerias de ADO y DAO en VBA.Permite un alto nivel de acceso a bases de datos, independientemente de la base de datosexistente en la capa final (backend5).

La interface de OpenOffice.org ha crecido desde el lanzamiento de StarOffice 6.0. Mientrasen el pasado, las bases de datos fueron principalmente accesadas usando un amplio rango demétodo del objeto application, la interface en OpenOffice.org lo subdivide en varios objetos.Un DatabaseContext es usado como el objeto raíz para las funciones de bases de datos.

SQL: un lenguaje de consultasEl lenguaje SQL se provee como un lenguaje de consultas para los usuarios de SDBC. Paracomparar las diferencias entre los distintos dialectos de SQL, los componentes de el SDBCde OpenOffice.org tienen su propio analizador SQL.

Este usa la ventana de consultas para verificar los comandos SQL digitados y corrige loserrores de sintaxis más simples, como aquellos asociados a carateres en minúscula omayúscula.

Si un controlador permite el acceso a una fuente de datos que no soporta SQL, entonces loscomandos SQL pueden ser convertido independientemente a las necesidades nativas.

La implementación del SQL para SDBC está orientada a SQL-ANSI-Standard. Extensionesespecificas de Microsoft, como el constructor INNER JOIN no están soportadas . Estaspueden ser reemplazadas con los comandos estandard (INNER JOIN, por ejemplo, puede ser

5 N.T. Es sumamente dificil traducir el concepto de "backend" al español. Por eso incluí el término en inglés paradar mayor "claridad" al texto. Backend es un término standard de multicapas (n-Tier), que indica la aplicación o labase de datos que subyace o existe por detrás de la aplicación del usuario ("frontend")

Capítulo 9 Acceso a bases de datos

Page 156: Guía del programador BASIC - OpenOffice.org

Capítulo 9Acceso a bases de datos

reemplazado por la clausula WHERE correspondiente).

Tipos de acceso a bases de datosLas interfaces de bases de datos de OpenOffice.org están disponibles en las aplicacionesOpenOffice.org Writer y OpenOffice.org Calc , y también en los formularios de bases dedatos.

En OpenOffice.org Writer, cartas standard pueden ser creadas con la asistencia de las fuentesde datos SDBC y pueden ser impresas. También hay una opción de mover datos desde laventana de bases de datos usando la función de arrastrar y soltar (drag-and-drop).

Si el usuario mueve una tabla de una base de datos dentro de una hoja de cálculo,OpenOffice.org crea un area de tabla la cual puede ser actualizada con el click del mouse silos datos originales han sido modificados. Y al revés, los datos de la hoja de cálculo puedenser movidos a la tabla de la base de datos y se realiza una importación.

Finalmente, OpenOffice.org provee un mecanismo de formularios basados en bases de datos.Para hacer esto, el usuario primero crea un formulario standard OpenOffice.org Writer oOpenOffice.org Calc y luego lo vincula a los campos de la base de datos.

Todas las funciones especificadas aquí están basadas en interfaces de usuario deOpenOffice.org. No es necesario conocimiento de programación para usar las funcionescorrespondientes.

Este capítulo, sin embargo, provee un poco de información acerca de las funcionesespecificadas, pero se concentra en la interface de programación de SDBC, la cual permiteconsultas automáticas a las bases de datos y esto permite que un rango mucho mayor deaplicaciones sean usadas.

Un conocimiento básico de la forma en que funcionan las bases de datos y del lenguaje deconsultas SQL es necesario para una completa compresión de las secciones siguientes.

Fuentes de datosUna base de datos es incorporada a OpenOffice.org mediante su creación comúnmentereferida a la fuente de datos. La interface de usuario provee una opción correspondiente parala creación de fuentes de datos en el menu Extras. Sin embargo, también puede crear fuentesde datos y trabajar con las mismas usando OpenOffice.org Basic.

Un contexto de objeto que es creado usando la función createUnoService sirve como elpunto de inicio para el acceso a las fuentes de datos. Esto esta basado en el serviciocom.sun.star.sdb.DatabaseContext que es el objeto raíz para todas lasoperaciones de bases de datos.

El siguiente ejemplo muestra como un contexto de base de datos puede ser creado y usandopara determinar los nombres de todas las fuentes de datos disponibles. Despliega los nombresde un cuadro de mensaje.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 157: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim DatabaseContext As ObjectDim NamesDim I As Integer

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")Names = DatabaseContext.getElementNames()For I = 0 To Ubound(Names())

MsgBox Names(I)Next I

Las fuentes de datos individuales están basadas en el serviciocom.sun.star.sdb.DataSource y puede determinarse desde que contexto de base dedatos está siendo usado usando el método getByName:

Dim DatabaseContext As ObjectDim DataSource As Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")DataSource = DatabaseContext.getByName("Customers")

El ejemplo crea un objeto DataSource para una fuente de datos llamada "Customers".

Las fuentes de datos proveen un rango de propiedades, los cuales proveen informacióngeneral acerca del origen de los datos e información acerca de los métodos de acceso. Laspropiedades 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 parametrosde conexión (usualmente al menos el nombre de usuario y la contraseña).

• User (String) nombre de usuario.

• Password (String) contraseña del usuario (no se guarda).

• IsPasswordRequired (Boolean) la contraseña es necesaria y preguntadainteractivamente al usuario.

• IsReadOnly (Boolean) permite acceso de sólo lectura a la base de datos.

• NumberFormatsSupplier (Object) objeto que contiene el número de formatosdisponibles para la base de datos (soporta la interfacecom.sun.star.util.XNumberFormatsSupplier, refierase al capítulo 7,sección número, fecha y formato de texto).

• TableFilter (Array) lista de los nombres de las tablas a desplegar.

• TableTypeFilter (Array) lista de los tipos de tablas a ser deplegados. Los valoresdisponibles son TABLE, VIEW y SYSTEM TABLE.

• SuppressVersionColumns (Boolean) – suprime el desplegado de las comunas queson usadas para la administración de versiones.

Las fuentes de datos de OpenOffice.org no son comparables 1:1 con las fuentes de datos enODBC. Mientras una fuente de datos ODBC solamente cubre información acerca del origende los datos, una fuente de datos en OpenOffice.org también incluye un rango de información

Capítulo 9 Acceso a bases de datos

Page 158: Guía del programador BASIC - OpenOffice.org

Capítulo 9Acceso a bases de datos

acerca de cómo los datos son desplegados dentro de la base de datos en las ventanas de basede datos dentro de OpenOffice.org.

ConsultasConsultas predefinidas pueden ser asignadas a las fuentes de datos. OpenOffice.org Nota quelos comandos SQL de las consultas están disponibles todo el tiempo. Las consultas sonusadas para simplificar el trabajo con las bases de datos, porque pueden ser abiertas con unsimple click de mouse y también provee a los usuarios sin ningún conocimiento de SQL laopción de mentener comandos SQL.

Un objeto que soporta el servicio com.sun.star.sdb.QueryDefinition estáconciliado detrás de una consulta. Las consultas son accesadas por significado de el métodoQueryDefinitions de la fuente de datos.

El siguiente ejemplo lista los nombres de las consultas de las fuentes de datos que pueden serestablecidas en un cuadro de mensaje.

Dim DatabaseContext As ObjectDim DataSource As ObjectDim QueryDefinitions As ObjectDim QueryDefinition As ObjectDim I As Integer

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")DataSource = DatabaseContext.getByName("Customers")QueryDefinitions = DataSource.getQueryDefinitions()

For I = 0 To QueryDefinitions.Count() - 1QueryDefinition = QueryDefinitions(I)MsgBox QueryDefinition.Name

Next I

Adicionalmente a la propiedad Name usada en el ejemplo, com.sun.star.sdb.QueryDefinitionprovee un amplio rango de otras propiedades. Estas son:

• Name (String) nombre de la consulta.

• Command (String) Comando SQL (normalmente un comando SELECT).

• UpdateTableName (String) para consultas que no están basadas en varias tablas:nombre de la tabla en la cual es posible la modificación de valores.

• UpdateCatalogName (String) nombre de los catálogos para la actualización de tablas.

• UpdateSchemaName (String) nombre de los diagramas para la actualización de tablas.

El siguiente ejemplo muestra como un objeto de consulta puede ser creado de una formacontrolada por programación y puede ser asignado a una fuente de datos.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 159: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim DatabaseContext As ObjectDim DataSource As ObjectDim QueryDefinitions As ObjectDim QueryDefinition As ObjectDim 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, luegoinicializado, y luego insertado dentro del objeto QueryDefinitions por medio designificado del insertByName.

Vínculos y formularios de bases de datosPara simplificar el trabajo con las fuentes de datos, OpenOffice.org provee una opción devinculas las fuentes de datos con formularios de bases de datos. Los vínculos estándisponibles mediante el método getBookmarks(). Este retorna un contenedor connombre (com.sun.star.sdb.DefinitionContainer) el cual contiene todos losvínculos a las fuentes de datos. Los marcadores pueden ser accesados bien sea por nombre(Name) o por índice (Index).

El siguiente ejemplo determina la URL del marcador "MyBookmark".

Dim DatabaseContext As ObjectDim DataSource As ObjectDim Bookmarks As ObjectDim URL As StringDim 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 datosUna conexión a una base de datos es necesario para accesarla. Este es el canal detransferencia que permite la comunicación directa con la base de datos. A diferencia de lasfuentes de datos presentadas en la sección previa, la conexión a base de datos puede serrestablecida cada vez que el programa es reiniciado.

OpenOffice.org Provee varias formas de estableces conexiones a bases de datos. Aquí hayuna explicación para el método basado en una fuente de datos existente.

Capítulo 9 Acceso a bases de datos

Page 160: Guía del programador BASIC - OpenOffice.org

Capítulo 9Acceso a bases de datos

Dim DatabaseContext As ObjectDim DataSource As ObjectDim Connection As ObjectDim InteractionHandler as Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")DataSource = DatabaseContext.getByName("Customers")

If Not DataSource.IsPasswordRequired ThenConnection = DataSource.GetConnection("","")

Else

InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")Connection = DataSource.ConnectWithCompletion(InteractionHandler)

End If

El código usado en el ejemplo primero verifica si la base de datos está protegida concontraseña. Si no, crea la conexión a la base de datos requerida usando la llamadaGetConnection call. Las dos cadenas vacías en la línea de comandos son para el nombre deusuario y la contraseña.

Si la base de datos está protegida por contraseña, el ejemplo crea unInteractionHandler y abre la base de datos usando el métodoConnectWithCompletion method. El InteractionHandler se asegura queOpenOffice.org pregunte al usuario los datos necesarios para accesar la base de datos.

Interacción de las tablasUna 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 unvolumen de resultados obtenido usando el comando SELECT.

El ejemplo muestra como un ResultSet puede ser usado para consultar valores de unatabla en la base de datos.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 161: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim DatabaseContext As ObjectDim DataSource As ObjectDim Connection As ObjectDim InteractionHandler as ObjectDim Statement As ObjectDim ResultSet As Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")DataSource = DatabaseContext.getByName("Customers")

If Not DataSource.IsPasswordRequired ThenConnection = DataSource.GetConnection("","")

ElseInteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")Connection = DataSource.ConnectWithCompletion(InteractionHandler)

End If

Statement = Connection.createStatement()ResultSet = Statement.executeQuery("SELECT CustomerNumber FROM Customer")

If Not IsNull(ResultSet) Then

While ResultSet.next

MsgBox ResultSet.getString(1)Wend

End If

Mientras la conexión a la base de datos ha sido establecida, el código usado en el ejemploprimero usa la llamada Connection.createObject para crear un objeto Statement.Este objeto Statement luego usa la llamada executeQuery para retornar elResultSet actual. El programa ahora verifica que ResultSet exista y recorre losregistros de datos mediante un ciclo. Los valores requeridos (en el ejemplo, aquellos delcampo "CustomerNumber") retorna el ResultSet usando el método getString,mientras que el parámetro 1 determina que la llamada es relativa a la primera columna.

El objeto ResultSet de SDBC es comparable con el objeto Recordset de DAO y ADO, puestoque también provee acceso iteractivo a la base de datos.

La base de datos es actualmente accesada en OpenOffice.org por medio del objetoResultSet. Este refleja el contenido de la tabla o el resultado de un comando SQL-SELECT. En el pasado, el objeto ResultSet proveyó métodos residentes en el objetoApplication para la nevegación dentro de los datos (e.j: DataNextRecord).

Métodos específicos-al-tipo para obtener datos Como se observó en el ejemplo de la sección anterior, OpenOffice.org provee un métodogetString para accesar los contenidos de las tablas. El método provee el resultado en laforma de una cadena. Los siguientes métodos de acceso están disponibles:

• getByte() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getShort() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getInt() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getLong() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getFloat() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getDouble() soporta los tipos de datos SQL para números, caracteres y cadenas.

Capítulo 9 Acceso a bases de datos

Page 162: Guía del programador BASIC - OpenOffice.org

Capítulo 9Acceso a bases de datos

• getBoolean() soporta los tipos de datos SQL para números, caracteres y cadenas.

• getString() soporta todos los tipos de datos SQL.

• getBytes() soporta los tipos de datos para valores binarios.

• getDate() soporta los tipos de datos SQL para números, cadenas, fecha y hora.

• getTime() soporta los tipos de datos SQL para números, cadenas, fecha y hora.

• getTimestamp() soporta los tipos de datos SQL para números, cadenas, fecha y hora.

• getCharacterStream() soporta los tipos de datos SQL para números, cadenas yvalores binarios.

• getUnicodeStream() soporta los tipos de datos SQL para números, cadenas y valoresbianrios.

• getBinaryStream() valores binarios.

• getObject() soporta todos los tipos de datos.

En todas las instancias, el número de columnas debe ser listado como un parámetro paraaquellos valores que deben ser consultados.

Las variantes a ResultSetLa velocidad del acceso a la base de datos es a menudo una materia crítica. OpenOffice.orgpor eso ofrece varias maneras de optimizar ResultSets y la forma en que se controla lavelocidad de acceso. Muchas funciones que provee ResultSet, entre más conpleja sea suimplementación normalmente son por lo tanto funciones más lentas.

Un ResultSet simple, como es que fue presentado en la sección "interacción de lastablas", provee el mínimo de funciones de búsqueda disponibles. Sólo permite interacciónpara ser aplicada hacia adelante, y cuales valores van a ser preguntados. Opciones denavegación más extensos, como la posibilidad de modificar valores, por eso no estánincluidos.

El objeto Statement usado para crear el ResultSet provee algunas propiedades quepermiten definir las funciones que influencian el ResultSet:

• ResultSetConcurrency (const) Especificaciones sobre cómo losdatos pueden sermodificados (especificaciones de acuerdo concom.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 lassiguientes especificaciones:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 163: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• SCROLL_INSENSITIVE ResultSet permite cualquier tipo de navegación, sinembargo no se refrescan los cambios en los datos originales.

• SCROLL_SENSITIVE ResultSet permite cualquier tipo de navegación, los cambiosen los datos originales tienen impacto sobre ResultSet.

Un ResultSet conteniento las propiedades READ_ONLY y SCROLL_INSENSITIVEcorresponden al tipo Snapshot en ADO y DAO.

Cuando usa las propiedades del ResultSet UPDATEABLE y SCROLL_SENSITIVE, lafunción de vistas del ResultSet es comparable con en tipo Dynaset Recordset deADO y DAO.

Métodos de navegación en ResultSetsSi un ResultSet es un tipo SCROLL_INSENSITIVE o SCROLL_SENSITIVE, soportaun amplio rango de métodos de navegación en el almacén de datos. Los métodos principalesson:

• next() navega al siguiente registro de datos.

• previous() navega al anterior registro de datos.

• first() navega al primer registro de datos.

• last() navega al último registro de datos.

• beforeFirst() navega al registro de datos anterior al primero .

• afterLast() navega al siguiente registro de datos del último registro.

Todos los métodos retornan un parámetro booleano que especifica si la nevagación tuvoéxito.

Para determinar la posición actual del cursor, están provistos los siguientes métodos deprueba y todos retornan un valor booleano:

• isBeforeFirst() ResultSet está antes del primer registro de datos.

• isAfterLast() ResultSet está después del último registro de datos.

• isFirst() ResultSet está en el primer registro de datos.

• isLast() ResultSet está en el último registro de datos.

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

Capítulo 9 Acceso a bases de datos

Page 164: Guía del programador BASIC - OpenOffice.org

Capítulo 9Acceso a bases de datos

El objeto ResultSet provee métodos Update para modificar valores, los cuales estánestructurados de la misma manera que los métodos de acceso para abstraer valores. Elmétodo updateString, for example, permite que una cadena sea escrita.

Antes de la modoficación, los valores deben ser transferidos a la base de datos usando elmétodo updateRow(). La llamada debe tener lugar antes de los comandos de navegación,porque si no los valores se perderán.

Si ocurre un error durante las modificaciones, este puede ser reversado usando el métodocancelRowUpdates(). Esta llamada solamente está disponible mientras los datos nosean reescritos en la base de datos usando updateRow().

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 165: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Puede agregar ventanas de diálogos y formularios personalizados a los documentos deOpenOffice.org. Estos pueden ser vinculados a las macros de OpenOffice.org Basic paraextender el rango de uso del OpenOffice.org Basic.

Los diálogos pueden, por ejemplo, desplegar información de una base de datos, o guiar a losusuarios por un proceso paso a paso para la creación de un documento nuevo en la forma deun autopiloto.

Tabajando con diálogosLos diálogos de OpenOffice.org Basic consisten en una ventana de diálogos que puedecontener campos de texto, cajas de listas, botones de radio y otros elementos de control.

Creando diálogosPuede crear y estructurar diálogos usando el editor de diálogos de OpenOffice.org y usarlo dela misma manera en que usa OpenOffice.org Draw:

Esencialmente, puede arrastrar los controles que desea de la paleta de diseño (derecha) dentrodel area de diálogo donde puede definir su posición y tamaño.

Este ejemplo muestra un dialogo que contiene una etiqueta y un cuadro de lista.

Puede abrir un diálogo usando el siguiente código

Dim Dlg As ObjectDialogLibraries.LoadLibrary("Standard")Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)

Dlg.Execute()

Dlg.dispose()

CreateUnoDialog crea un objeto llamado "Dlg" que está referenciado al diálogoasociado. Antes debe crear el diálogo, debe asegurarse que librería que está usando (en esteejemplo, la librería Standard) esté cargada. Si no, el método LoadLibrary realiza estatarea.

Una vez que el objeto de diálogo ha sido inicializado, puede usar el método Execute paradesplegar el diálogo. Los diálogos como este están definidos como modales porque nopermiten ninguna otra acción del programa hasta que sean cerrados. Cuando un diálogo esabierto, el programa permanece en la llamada a Execute.

El método dispose al final del código libera los recursos usados por el diálogo mientrasfinaliza el programa.

Cerrando diálogosCerrando con Aceptar o cancelar

Capítulo 10 Diálogos

Page 166: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

Si un diálogo contiene un botón Aceptar o Cancelar, el diálogo automáticamente es cerradocuando se presiona uno de estos botones. Más información acerca de cómo trabajan estosbotones está mencionada en la sección "Elementos de control de los diálogos" de estecapítulo.

Si cierra un diálogo haciendo click en el botón Aceptar, el método Execute retorna unvalor de 1, de otra forma es retornado un valor de 0.

Dim Dlg As Object

DialogLibraries.LoadLibrary("Standard")Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog)

Select Case Dlg.Execute()

Case 1

MsgBox "Ok pressed"

Case 0

MsgBox "Cancel pressed"

End Select

Cerrando con el botón de cerrar en la barra de título Si lo desea, puede cerrar un diálogo haciendo click en el botón cerrar en la barra de título. Eneste caso, el método Execute del diálogo retorna un valor de 0, de la misma forma quecuando se presiona el botón cancelar.

Cerrando con una llamada explícita del programaTambién puede cerrar un diálogo abierto con el método endExecute:

Dlg.endExecute()

Accesando elementos de control individualesUn diálogo puede contener cualquier número de elementos de control. Puede accesar estoselementos por medio del método getControl que retorna el nombre del elemento decontrol.

Dim Ctl As Object

Ctl = Dlg.getControl("MyButton")Ctl.Label = "New Label"

Este código define el objeto para el elemento de control "MyButton" y luego inicializa lavariable de objeto "Ctl" con la referencia al elemento. Finalmente, el código ajusta lapropiedad Label para el elemento de control con el valor de "New Label".

Notese que OpenOffice.org Basic distingue entre los caracteres en mayúsculas y minúsculaspara los nombres de los elementos de control.

Trabajando con el modelo de diálgos y los controles deelementosLa división entre los elementos visibles del programa (Vista) y los datos o documentos detrás

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 167: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

de ellos (Modelo) ocurre en muchos lugares de la API de OpenOffice.org. Adicionalmente alos métodos y propiedades de los elementos de control, ambos diálogos y elementos decontrol tienen un objeto Modelo subordinado. Este objeto permite que pueda accesardirectamente el contenido del diálogo o el elemento de control.

En los diálogos, la distinción entre los datos y el desplegado no siempre es clara como enotras areas de la API de OpenOffice.org. Los elementos de la API están disponibles pormedio de la Vista y el Modelo.

La propiedad Model provee un acceso controlado por programa al modelo del diálogo y a losobjetos de elementos de control

Dim cmdNext As Object

cmdNext = Dlg.getControl("cmdNext")cmdNext.Model.Enabled = False

Este ejemplo desactiva el botón cmdNtext en el diálogo Dlg con la ayuda del objeto model decmdNtext.

Propiedades

Nombre y títuloCada elemento de control tiene su propio nombre que puede ser consultado usando lasiguiente propiedad model:

Model.Name (String) nombre del elemento de control

Puede especificar el título que aparece en la barra de título de un diálogo con la siguientepropiedad model:

• Model.Title (String) título del diálogo (aplica solamente a los diálogos).

Posición y tamañoPuede consultar el tamaño y la posición de un elemento de control usando las siguientespropiedades del objeto model:

• Model.Height (long) Alto del elemento de control (en unidades de ma)

• Model.Width (long) Ancho del elemento de control (en unidades de ma)

• Model.PositionX (long) Posición X del elemento de control, medido desde el bordeinterior izquierdo del cuadro de diálogo (en unidades de ma)

• Model.PositionY (long) Posición Y del elemento de control, medido desde el bordeinterior superior del cuadro de diálogo (en unidades de ma)

Para asegurar la independencia de la plataforma en la apariencia de los diálogos,OpenOffice.org usa la medida interna Map AppFont (ma) para especificar la posición ytamaño dentro de los diálogos. Una unidad ma está difinida como un octavo del altopromedio de un carácter del sistema de fuentes definido en el sistema operativo y un cuarto

Capítulo 10 Diálogos

Page 168: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

de su ancho. Mediante el uso de las unidades ma, OpenOffice.org asegura que un diálogo sevea de la misma forma en los diferentes sistemas operativos, bajo diferentes configuracionesde sistema.

Si desea cambiar el tamaño o la posición de los elementos de control en tiempo de ejecución,determine el tamaño total del diálogo y ajuste los valores para el elemento de control deacuerdo al radio de las partes.

La unidad Map AppFont (ma) reemplaza la unidad Twips archivada par una mejorindependencia de la plataforma.

Foco y secuencia del tabuladorPuede navegar por los elementos de control en cualquier diálogo presionando la tecla "Tab".Las siguientes propiedades están disponibles en este contexto en el modelo de control deelementos:

• Model.Enabled (Boolean) activa el elemento de control

• Model.Tabstop (Boolean) permite al elemento de control que sea accesado por mediode la tecla Tab.

• Model.TabIndex (Long) posición del elemento de control en el orden de activación

Finalmente, el elemento de control provee un método getFocus que asegura que el elementode control subyacente reciba el foco:

• getFocus elemento de control que recibe el foco (solamente para diálogos)

Diálogos de multi-páginaUn diálogo en OpenOffice.org puede tener una o más páginas. La propiedad Step de undiálogo define la página actual del diálogo mientras la propiedad Step para el elemento decontrol especifica la página en la cual los elementos de control van a ser desplegados.

El valor 0 en Step es un caso especial. Si ajusta este valor a cero en un diálogo, todos loselementos 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 todaslas páginas en el diálgo.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 169: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

En el ejemplo precedente, puede también asignar el valor 0 al Step para la línea divisoria ypara los botones "Cancel", "Prev", "Next", y "Done" para desplegar estos elementos en todaslas páginas. También puede asignar los elementos a una página individual (por ejemplo lapágina 1).

El siguiente código de programa muestra como el valor Step en los manejadores de eventosde los botones "Next" y "Prev" pueden ser incrementados y reducidos y cambiar el estado delos botones.

Sub cmdNext_Initiated

Dim cmdNext As ObjectDim cmdPrev As Object

cmdPrev = Dlg.getControl("cmdPrev")cmdNext = Dlg.getControl("cmdNext")

cmdPrev.Model.Enabled = Not cmdPrev.Model.EnabledcmdNext.Model.Enabled = False

Dlg.Model.Step = Dlg.Model.Step + 1End Sub

Sub cmdPrev_InitiatedDim cmdNext As ObjectDim cmdPrev As Object

cmdPrev = Dlg.getControl("cmdPrev")cmdNext = Dlg.getControl("cmdNext")

cmdPrev.Model.Enabled = FalsecmdNext.Model.Enabled = True

Dlg.Model.Step = Dlg.Model.Step – 1End Sub

Una variable global Dlg que hace referencia al diálogo abierto debe ser incluida para hacereste ejemplo posible. El diálogo cambia su apariencia como sigue:

Capítulo 10 Diálogos

Page 170: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

Página 1:

Página 2:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 171: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

EventosLos diálogos y formularios de OpenOffice.org están basados en un modelo de programaciónorientada a eventos donde puede asignar controladores de eventos a los elementos de control.Un controlador de evento ejecuta un procedimiento predefinido cuando ocurre una acciónparticular, aun cuando la acción es otro evento. Se pueden editar documentos o abrir bases dedatos con el control de eventos y también accesar otros elementos de control.

Los elementos de control de OpenOffice.org reconocen diferentes tipos de eventos quepueden ser disparados en diferentes situaciones. Estos tipos de eventos pueden ser divididosen cuatro grupos:

Control del Mouse: Eventos que corresponden a acciones del mouse (por ejemplo, simplesmovimientos del mouse o un click en un lugar específico de la pantalla)

Control de teclado: Eventos que son disparados por golpes de teclas.

Modificación del Foco: Eventos que OpenOffice.org realiza cuando los elementos de controlson activados o desactivados.

Eventos específicos de los controles: Eventos que solamente ocurren en relación con ciertoselementos de control.

Cuando trabaja con eventos, asegurese crear el diálogo asociado en el ambiente de desarrollode OpenOffice.org y que contenga los elementos de control requeridos o documentos (si suseventos son aplicados a un formulario).

Capítulo 10 Diálogos

Page 172: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

La figura anterior muestra el ambiente de desarrollo con una ventana de diálogo que contienedos cuadros de listas. Puede mover datos de una lista a otra lista usando los botones entre losdos cuadros de listas.

Si desea desplegar el formato en pantalla, entonces debe crear los procedimientos asociadoscon OpenOffice.org Basic de manera que puedan ser llamados por los controladores deeventos. Aun cuando pueda usar estos procedimientos en cualquier módulo, lo mejor eslimitar su uso a dos módulos. Para hacer su código más fácil de leer, asigne nombres consignificado a los procedimientos. Saltar directamente a un procedimiento de programageneral desde una macro puede tener como resultado un código no muy claro. En cambio,para simplificar el mantenimiento del código y la resolución de problemas, debe crear otroprocedimiento que sirva como punto de entrada al manejador de eventos – aun cuandosolamente ejecute una simple llamada al procedimiento destino.

El siguiente código muestra un ejemplo de movimiento de una entrada de izquierda a derechaen un cuadro de lista de un diálogo:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 173: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Sub cmdSelect_InitiatedDim objList As Object

lstEntries = Dlg.getControl("lstEntries")lstSelection = Dlg.getControl("lstSelection")

If lstEntries.SelectedItem > 0 ThenlstSelection.AddItem(lstEntries.SelectedItem, 0)lstEntries.removeItems(lstEntries.SelectedItemPos, 1)

ElseBeep

End If

End Sub

Si este procedimiento fuera creado en OpenOffice.org Basic, puede asignarlo en un eventorequerido usando la ventana de propiedades del editor de diálogos.

La asignación de todas las listas de diálogos de los procedimientos de OpenOffice.org Basic.Para asignar un procedimiento a un evento, seleccione el procedimiento, y luego haga clicken Asignar.

ParámetrosLa ocurrencia de un evento particular no es siempre suficiente para una respuesta apropiada.Se puede requerir información adicional. Por ejemplo, para procesar un click de mouse,puede necesitar la posición en la pantalla donde el botón del mouse fue presionado.

En OpenOffice.org Basic, puede usar los parámetros del objeto para proveer másinformación acerca de un evento a un procedimiento, por ejemplo:

Capítulo 10 Diálogos

Page 174: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

Sub ProcessEvent(Event As Object)

End Sub

La ocurrencia con la cual el objeto Event está estructurado depende del tipo de evento delcual el procedimiento puede disparar llamadas. Las siguientes secciones describen los tiposde eventos en detalle.

Independientemente del tipo de evento, todos los objetos proveen acceso a elementos decontrol importantes y sus modelos. El elemento de control puede ser accesado usandoEvent.Source y su modelo usando Event.Source.Model

Puede usar estas propiedades para dispara eventos dentro de un controlador de eventos.

Eventos del MouseOpenOffice.org Basic reconoce los siguientes eventos de mouse:

• Mouse moved El usuario mueve el mouse

• Mouse moved while key pressed el usuario arrastra el mouse, mientras sostiene un botón.

• Mouse button pressed el usuario presiona un botón del mouse

• Mouse button released el usuario libera un botón del mouse

• Mouse outside el usuario mueve el mouse fuera de la ventana actual

La estructura de los objetos de eventos asociados están definidos en la estructuracom.sun.star.awt.MouseEvent la cual provee la siguiente información:

• Buttons (short) Botón presionado (uno o más constantes de acuerdo concom.sun.star.awt.MouseButton).

• X (long) Coordenada Xdel mouse, medida en pixels desde la esquina superior izquierdadel elemento de control

• Y (long) Coordenada Y del mouse, medida en pixels desde la esquina superior izquierdadel elemento de control

• ClickCount (long) número de clicks asociados a un evento del mouse (SiOpenOffice.org puede responder lo suficientemente rápido, ClickCount es también 1 parael doble-click porque solamente es inicializado un evento individual).

Las constantes definidas en com.sun.star.awt.MouseButton para los botones del mouse son:

• LEFT botón izquierdo del mouse

• RIGHT botón derecho del mouse

• MIDDLE botón del centro del mouse

El siguiente ejemplo muestra la posición del mouse y también cual botón del mouse ha sidopresionado:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 175: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Sub MouseUp(Event As Object)Dim Msg As StringMsg = "Keys: "

If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT ThenMsg = Msg & "LEFT "

End If

If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT ThenMsg = Msg & "RIGHT "

End If

If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE ThenMsg = Msg & "MIDDLE "

End If

Msg = Msg & Chr(13) & "Position: "Msg = Msg & Event.X & "/" & Event.YMsgBox Msg

End Sub

Los eventos de VBA Click y Doubleclick no están disponibles en OpenOffice.org Basic. En su lugar debeusar el evento de OpenOffice.org Basic MouseUp para el evento click e imite el evento Doubleclickcambiando la lógica de la aplicación.

Eventos del tecladoLos siguientes eventos del teclado están disponibles en OpenOffice.org Basic:

• Key pressed el usuario presiona una tecla

• Key released el usuario libera una tecla

Ambos eventos están relacionados a las acciones lógicas de las teclas, no a acciones físicas.Si el usuario presiona varias teclas para un carácter individual (por ejemplo, para agregar unacento a un caracter), entonces OpenOffice.org Basic solamente crea un evento.

Una acción simple de una modificación de una tecla, como la tecla Shift o la letra Alt no creaun evento independiente.

La información sobre las teclas presionadas está provistas por el objeto de evento queOpenOffice.org suple para el manejo de eventos. Este contiene las siguientes propiedades:

• KeyCode (short) código de la tecla presionada (los valores por defecto de acuerdo concom.sun.star.awt.Key)

• KeyChar (String) el carácter que ha sido ingresado (tomando en cuenta las teclas demodificación)

El siguiente ejemplo usa la propiedad KeyCode para establecer si ha sido presionada la tecla"Enter", la tecla "Tab", o alguna otra de las teclas de control. Si una de estas teclas ha sidopresionada, retorna el nombre de la tecla, de otra forma el carácter de la tecla es retornado:

Capítulo 10 Diálogos

Page 176: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

Sub KeyPressed(Event As Object)Dim Msg As StringSelect Case Event.KeyCodeCase com.sun.star.awt.Key.RETURN

Msg = "Return pressed"Case com.sun.star.awt.Key.TAB

Msg = "Tab pressed"Case com.sun.star.awt.Key.DELETE

Msg = "Delete pressed"Case com.sun.star.awt.Key.ESCAPE

Msg = "Escape pressed"Case com.sun.star.awt.Key.DOWN

Msg = "Down pressed"Case com.sun.star.awt.Key.UP

Msg = "Up pressed"Case com.sun.star.awt.Key.LEFT

Msg = "Left pressed"Case com.sun.star.awt.Key.RIGHT

Msg = "Right pressed"Case Else

Msg = "Character " & Event.KeyChar & " entered"End Select

MsgBox Msg

End Sub

Más información sobre las constantes de las teclas puede ser encontrado en la Referencia a laAPI bajo el grupo de constantes de com.sun.star.awt.Key.

Eventos de focoLos eventos de foco indican si un control recibe o pierde el foco. Puede usar estos eventospara, por ejemplo, determinar si un usuario finaliza un proceso en un elemento de control demanera que se puedan actualizar otros elementos del diálogo. Los siguientes eventos de focoestán disponibles:

• When receiving focus El elemento recibe el foco

• When losing focus El elemento pierde el foco

Los objetos Event para el foco están estructurados de la siguiente manera:

• FocusFlags (short) causa del cambio del foco (Los valores por defecto de acuerdo concom.sun.star.awt.FocusChangeReason).

• NextFocus (Object) el objeto que recibe el foco (solamente para el evento "Whenlosing focus" -el elemento pierde el foco-)

• Temporary (Boolean) se pierde el foco de manera temporal.

Eventos específicos de los elementos de controlAdicionalmente a los eventos anteriores, los cuales están soportados por todos los elementosde control, hay algunos eventos de elementos de control específicos están definidossolamente para ciertos elementos de control. Los eventos más importantes son:

• When Item Changed el valor de un elemento de control cambia

• Item Status Changed el estado de un elemento de control cambia

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 177: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• Text modified el texto de un elemento de control cambia

• When initiating una acción que puede ser realizada cuando un elemento de control esdisparado (por ejemplo, se presiona un botón)

Cuando trabaje con eventos, note que ciertos de ellos, como el "When initiating", puede serinicializado 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 delelemento de control actualmente ha cambiado. Para evitar estos "elementos ciegos", guarde elvalor viejo del elemento de control en una variable global, y luego verifíquelo para ver si elvalor ha cambiado cuando se ejecuta un evento.

Las propiedades para el evento "Item Status Changed" son:

• Selected (long) actualmente está seleccionada la entrada

• Highlighted (long) actualmente está marcada la entrada

• ItemId (long) ID de la entrada

Elementos de control de los diálogos en detalleOpenOffice.org Basic reconoce un rango de elementos de control que puede ser dividido enlos siguientes grupos:

Campos de entradas:• Campos de texto

• Campos de fechas

• Campos de hora

• Campos numéricos

• Campos de moneda

Campos que adoptan cualquier formatoBotones:

• Botones estándar

• cajas de chequeo (Checkboxes)

• Botones de radio

Listas de selección

• cajas de listas

• cajas de combo

Otros elementos de control:Barras de desplazamiento (horizontal y vertical)

Capítulo 10 Diálogos

Page 178: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

Grupos de campos

Barras de progreso

Líneas divisorias (horizontal y vertical)

Gráficos

Campos de selección de archivos

Los elementos de control más importantes son presentados a continuación:

Botones (buttom)Un botón realiza una acción cuando se hace click en él.

El escenario más simple para el botón es disparar un evento "When Initiating" cuando elusuario le da click. Puede vincular otras acciones al botón para abrir un diálogo usando lapropiedad PushButtonType. Cuando hace click en un botón en el que esta propiedad hasido puesta en el valor de 0, el diálogo no se afecta. Cuando hace click en un botón en el queesta propiedad ha sido puesta en el valor de 1, el diálogo es cerrado y el método Executedel diálogo retorna el valor de 1. (la secuencia del diálogo ha terminado correctamente).

Si el "PushButtonType" tiene el valor de 2, el diálogo es cerrado y el método Executedel diálogo retorna el valor de 0 (diálogo cerrado).

Las siguientes son todas las propiedades que están disponibles mediante el modelo del botón:

• Model.BackgroundColor (long) color de fondo

• Model.DefaultButton (Boolean) el botón es usado como el valor por defecto yresponde a la tecla enter y no tiene foco.

• Model.FontDescriptor (struct) estructura que especifica los detalles de la fuenteque va a ser usada (de acuerdo con la estructura com.sun.star.awt.FontDescriptor)

• Model.Label (String) etiqueta que está desplegada en el botón

• Model.Printable (Boolean) el elemento de control puede ser impreso

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

• Model.HelpText (String) texto de ayuda es que desplegado cuando se mueve elmouse sobre el elemento de control

• Model.HelpURL (String) URL de la ayuda en línea para el elemento de controlcorrespondiente

• PushButtonType (short) acción que está vinculada al botón (0: sin acción, 1: Aceptar,2: Cancelar)

Botones de opciones (Option button)Estos botones generalmente son usados en grupos y permiten que seleccione una de variasopciones.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 179: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Cuando selecciona una opción, todas las demás acciones del grupo son desactivadas. Estoasegura que de cualquier forma, solamente una opción del botón sea activada.

Un elemento de control provee dos propiedades:

• State (Boolean) activa el botón

• Label (String) etiqueta que es desplegada en el botón.

También puede usar las siguientes propiedades del modelo de botones de opción:

• Model.FontDescriptor (struct) estructura con detalles de la fuente que está siendousada (de acuerdo con com.sun.star.awt.FontDescriptor)

• Model.Label (String) – etiqueta que es desplegada en el elemento de control

• Model.Printable (Boolean) el elemento de control puede ser impreso

• Model.State (Short) si esta propiedad es igual a 1, la opción está activa, de locontrario 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 delmouse permanece sobre el elemento de control

• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento decontrol

Para combinar varios botones de opción en un grupo, debe posicionarlos uno después del otroen la secuencia de activación sin interrupción (propiedad Model.TabIndex, descrita comoOrder en el editor de diálogos). Si la secuencia de activación es interrumpida por otroelemento de control, OpenOffice.org automáticamente inicia un nuevo grupo de elementos decontrol que puede ser activado independientemente del primer grupo de elementos de control.

A diferencia de VBA, no puede insertar botones de opción en un grupo de elementos de control enOpenOffice.org Basic. La agrupación de los elementos de control en OpenOffice.org Basic solamente esusada para asegurar la división visual mediante el dibujo de un marco alrrededor de los elementos decontrol.

Cajas de verficación (Checkboxes6)Las cajas de verificación es usado para grabar un valor de Si o No y dependiendo del modo,puede adoptar dos o tres estados. Adicional al estado de Si o No, la caja de chequeo puedetener un estado intermedio si el estado Si o No tiene más de un significado o no es claro.

Las cajas de chequeo proveen las siguientes propiedades:

• State (Short) estado de la caja de chequeo (0: no, 1: si, 2: estado intermedio)

• Label (String) etiqueta del elemento de control

• enableTriState (Boolean) adicionalmente al estado activado o desactivado, también

6 N.T. Es bastante dificil traducir estos nombres, porque en su mayoría son conocidos por los nombres en inglés.Para más claridad dejo también los nombres en inglés.

Capítulo 10 Diálogos

Page 180: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

puede usar el estado intermedio

El objeto model provee las siguientes propiedades:

• Model.FontDescriptor (struct) estructura que detalla la fuente usada (de acuerdocon 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 delmouse descansa sobre el elemento de control

• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento decontrol

Campos de texto (text fields)Los campos de texto permiten a los usuarios ingresar número y texto. El serviciocom.sun.star.awt.UnoControlEdit. tiene las bases para los campos de texto.

Un campo de texto puede contener una o más líneas que pueden ser editadas o bloqueadaspara las entradas de usuarios. Los campos de texto también pueden ser usados como camposespeciales de moneda o numéricos y también como campos de pantalla para tareasespeciales.

Como estos elementos de control están basados en el servicio UnoControlEdit Uno, sumanejo 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 concom.sun.star.awt.Selection, con las propiedades Min y Max para especificarel inicio y el final del resaltado actual)

• MaxTextLen (short) número máximo de caracteres que puede especificar en el campo

• Editable (Boolean) verdadero activa la opción de ingresado de texto, falso bloquea laopción de entrada (la propiedad no puede ser llamada directamente, sino por medio deIsEditable)

• IsEditable (Boolean) el contenido del elemento de control puede ser cambiado osólo-lectura.

También, las siguientes propiedades son provistas por el objeto model asociado:

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 181: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• Model.BackgroundColor (long) color del fondo del elemento de control

• Model.Border (short) tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple)

• Model.EchoChar (String) carácter de relleno para campos de clave

• Model.FontDescriptor (struct) estructura con detalles de la fuente usada (deacuerdo con la estructura com.sun.star.awt.FontDescriptor)

• Model.HardLineBreaks (Boolean) saltos de línea automáticos son insertados demanera permanente en el texto del elemento de control.

• Model.HScroll (Boolean) el campo de texto tiene una barra horizontal

• Model.MaxTextLen (Short) tamaño máximo del texto, donde 0 corresponde a que notiene límite

• Model.MultiLine (Boolean) permite la entrada de varias líneas

• Model.Printable (Boolean) el elemento de contro puede ser impreso

• Model.ReadOnly (Boolean) el contenido del elemento de control es de sólo-lectura

• Model.Tabstop (Boolean) el elemento de control puede ser accesado por la tecla Tab

• Model.Text (String) texto asociado con el elemento de control

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

• Model.VScroll (Boolean) el campo de texto tiene una barra vertical

• Model.HelpText (String) texto de ayuda que es desplegado cuando el cursor delmouse descansa sobre el elemento de control

• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento decontrol

Cajas de listas (List Boxes)Las cajas de listas (servicio com.sun.star.awt.UnoControlListBox) soportan lassiguientes propiedades:

• ItemCount (Short) número de elementos, sólo lectura

• SelectedItem (String) texto de la entrada resaltada, sólo lectura

• SelectedItems (Array Of Strings) campo de datos con las entradas resaltadas, sólolectura

• SelectedItemPos (Short) número de entradas resaltadas actuales, sólo lectura

• SelectedItemsPos (Array of Short) campo de datos con el número de entradasresaltadas (para listas que soportan selecciones múltiples), sólo lectura

• MultipleMode (Boolean) Verdadero activa la opción para entradas de selección

Capítulo 10 Diálogos

Page 182: Guía del programador BASIC - OpenOffice.org

Capítulo 10Diálogos

múltiple, Falso bloquea las selecciones múltiples (la propiedad no puede ser llamadadirectamente, sino por medio de IsMultipleMode)

• IsMultipleMode (Boolean) permite múltiples selecciones dentro de las listas, sólolectura

Cajas de listas proveen los siguientes métodos:

• addItem (Item, Pos) ingresa la cadena especificada en "Item" dentro de la lista en laposición "Pos"

• addItems (ItemArray, Pos) ingresa las entradas listadas en el campo de datos"ItemArray" dentro de la lista en la posición "Pos"

• removeItems (Pos, Count) remueve las entradas de "Count" de la posición "Pos"

• selectItem (Item, SelectMode) activa o desactiva el resaltado del elementoespecificado 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 entradaespecificada 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(deacuerdo con la estructura com.sun.star.awt.FontDescriptor)

• Model.LineCount (Short) número de líneas del elemento de control

• Model.MultiSelection (Boolean) permite selecciones de entradas múltiples

• Model.SelectedItems (Array of Strings) lista de las entradas resaltadas

• Model.StringItemList (Array of Strings) lista de todas las entradas

• Model.Printable (Boolean) el elemento de control puede ser impreso

• Model.ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura

• Model.Tabstop (Boolean) el elemento de control puede ser accesado por la tecla Tab.

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

• Model.HelpText (String) texto de ayuda que es desplegado cuando el cursor delmouse descansa sobre el elemento de control

• Model.HelpURL (String) URL de la ayuda en línea correspondiente al elemento decontrol

La opción VBA para registrar entradas de la lista con un valor númerico adicional (ItemData) no existe enOpenOffice.org Basic. Si desea administrar un valor numérico (por ejemplo un ID de base de datos)adicional al texto de lenguaje natural, debe crear un campo de datos adicional que es administrado deforma paralela a la caja de lista.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 183: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

En muchos aspectos, la estructura de los formularios de OpenOffice.org corresponde a losdiálogos discutidos en el capítulo previo. Sin embargo, hay algunas diferencias importantes:

Los diálogos aparecen en el formulario en una ventana de diálogo sencilla, la cual esdesplegada sobre un documento que no permite ninguna otra acción mas que el proceso deldiálogo, hasta que este es finalizado. Los formularios, por en contrario, son desplegadosdirectamente en el documento, como elementos de dibujo.

Un editor de diálogos es provisto para la creación de diálogos, y puede ser encontrado en elambiente de desarrollo de OpenOffice.org Basic. Los formularios son creados usando labarra de herramientas de las funciones de formulario directamente dentro del documento.

Mientras las funciones de los diálogos están disponibles en todos los documentosOpenOffice.org, la vida de las funciones de los formularios están solamente disponibles enlos documentos de texto y las hojas de cálculo.

Los elementos de control de un formulario puede ser vinculado con una tabla de una base dedatos externa. Esta función no está disponible en los diálogos.

Los elementos de control de los diálogos y formularios difieren en varios aspectos.

Los usuarios que deseen proveer a sus formularios sus propios métodos para el manejo deeventos, pueden referirse al capítulo 10 (diálogos). El mecanismo explicado son idénticos aaquellos para formularios.

Trabajar con formulariosLos formularios de OpenOffice.org pueden contener campos de texto, cajas de listas, botonesde radio y un rango de otros elementos de control, los cuales son insertados directamente enlos documentos de texto y hojas de cálculo. La barra de herramientas de las funciones de losformularios se usa para editar formularios.

Un formulario OpenOffice.org puede adoptar uno o dos modos: el modo de borrador y elmodo de desplegado. En el modo de borrador, la posición de los elementos de control puedencambiar y sus propiedades pueden ser editadas usando la ventana de propiedades.

La barra de herramientas de las funciones de formularios también es usada para cambiarentre los modos.

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

Capítulo 11 Formularios

Page 184: Guía del programador BASIC - OpenOffice.org

Capítulo 11Formularios

Dim Doc As ObjectDim DrawPage As ObjectDim Form As Object

Doc = StarDesktop.CurrentComponentDrawPage = Doc.DrawPageForm = DrawPage.Forms.GetByIndex(0)

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

Cuando trabaja con hojas de cálculo, in estado intermedio se necesita en la lista de hojas,porque los niveles de dibujo no están localizados directamente en el documento sino en lashojas individuales:

Dim Doc As ObjectDim Sheet As ObjectDim DrawPage As ObjectDim Form As Object

Doc = StarDesktop.CurrentComponentSheet = Doc.Sheets.GetByIndex(0)DrawPage = Sheet.DrawPageForm = DrawPage.Forms.GetByIndex(0)

Y como se sugiere en el nombre del método GetByIndex, un documento puede contenervarios formularios. Es útil, por ejemplo, si el contenido de diferentes bases de datos estándesplegados dentro de un documento, o si una relación 1:n7 es desplegada dentro de unformulario. La opción de crear sub-formularios también está provista para este propósito.

Tres aspectos de los elementos de control de un formularioLos elementos de control de un formulario tienen tres aspectos:

Primero, hay un Model de los elementos de control. Este es el objeto clave del programadorde 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 dela información.

Desde que los elementos de control de los formularios dentro de los documentos sonadministrados como elementos de dibujo especiales, también hay un objeto "Shape" querefleja elementos de propiedades de dibujo específicos del elemento de control (en particularsu posición y tamaño).

Accesando el Modelo de los elementos de contro de losformulariosLos modelos de los elementos de control de un formulario están disponibles por medio delmétodo GetByName en el objeto formulario:

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

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 185: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Dim Doc As ObjectDim Form As ObjectDim Ctl As Object

Doc = StarDesktop.CurrentComponentForm = Doc.DrawPage.Forms.GetByIndex(0)Ctl = Form.getByName("MyListBox")

El ejemplo determina el modelo del elemento de control "MyListBox", el cual está localizadoen el primer formulario del documento de texto abierto actualmente.

Si no está seguro del formulario del elemento de control, puede usar la opción de búsquedapor todos los formularios por el elemento de control requerido:

Dim Doc As ObjectDim Forms As ObjectDim Form As ObjectDim Ctl As ObjectDim I as Integer

Doc = StarDesktop.CurrentComponentForms = Doc.Drawpage.Forms

For I = 0 To Forms.Count – 1Form = Forms.GetbyIndex(I)If Form.HasByName("MyListBox") Then

Ctl = Form.GetbyName("MyListBox")Exit Function

End IfNext I

El ejemplo usa el método HasByName para verificar todos los formularios de un documentode 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 lavariable "Ctl" y la búsqueda es terminada.

Accesando la vista de los elementos de control de losformulariosPara accesar la vista de un formulario de elementos de control, primero se necesita el objetomodel asociado. La vista del elemento de control puedeser determinada con una instancia delmodel usando el controlador del documento.

Capítulo 11 Formularios

Page 186: Guía del programador BASIC - OpenOffice.org

Capítulo 11Formularios

Dim Doc As ObjectDim DocCrl As ObjectDim Forms As ObjectDim Form As ObjectDim Ctl As ObjectDim CtlView As ObjectDim I as Integer

Doc = StarDesktop.CurrentComponentDocCrl = Doc.getCurrentControler()

Forms = Doc.Drawpage.FormsFor I = 0 To Forms.Count – 1

Form = Forms.GetbyIndex(I)If Form.HasByName("MyListBox") Then

Ctl = Form.GetbyName("MyListBox")CtlView = DocCrl.GetControl(Ctl)Exit Function

End If

Next I

El código listado en el ejemplo es muy similar al ejemplo previo para determinar el modelode un elemento de control. No usa solamento del objeto de documento "Doc" sino también elcontrolador de documento "DocCrt" el cual hace referencia a la ventana del documentoactual. Con la ayuda de este controlador de documento y el modelo del elemento de control,entonces usa el método GetControl para determinar la vista (variable CtlView) delfomulario de elemento de control.

Accesando el objeto formas de los formularios de elementosde controlEl método para accesar los objetos de formas de un elemento de control también usa el nivelde dobujo del documento. Para determinar un elemento de control especial, todos loselementos de dibujo del nivel de dibujo debe ser buscados.

Dim Doc As ObjectDim Shape as ObjectDim I as integer

Doc = StarDesktop.CurrentComponent

For i = 0 to Doc.DrawPage.Count – 1Shape = Doc.DrawPage(i)If HasUnoInterfaces(Shape, _

"com.sun.star.drawing.XControlShape") ThenIf Shape.Control.Name = "MyListBox" Then

Exit FunctionEnd If

End If

Next

El ejemplo verifica todos los elementos de dobujo para determinar si soportan la interfacecom.sun.star.drawing.XControlShape necesaria para los elementos de control de losformularios. Si este es el caso, entonces se verifica la propiedad Control.Name para ver si elnombre del elemento de control es "MyListBox". Si es verdadero, la función termina labúsqueda.

Determinado el tamaño y posición de los elementos de control

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 187: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

Como se mencionó, la posición y el tamaño de los elementos de control puede serdeterminada usando el objeto "forma" (shape) asociado. La forma del elemento de control,como cualquier otro objeto forma, provee las propiedades Size y Position para estepropósito:

• Size (struct) tamaño del elemento de control (estructura de datoscom.sun.star.awt.Size).

• Position (struct) posición del elemento de control (estructura de datoscom.sun.star.awt.Point).

El siguiente ejemplo muestra como la posición y el tamaño de un elmento de control puedeser usada con el objeto forma asociado:

Dim Shape As Object

Point.x = 1000Point.y = 1000Size.Width = 10000Size.Height = 10000

Shape.Size = SizeShape.Position = Point

El objeto forma del elemento de control debe sr conocido para que el código funcione. Si esteno es el caso, puede ser determinado usando el código de ejemplos anteriores.

Elementos de control de formularios en detalleLos elementos de control disponibles en los formularios son similares a los que aparecen enlos diálogos. Va desde rangos de selección de simples campos de texto pasando por listas ycajas de combos hasta varios botones.

Abajo, encontrará una lista de las propiedades más importantes de los elementos de controlde los formularios. Todas las propiedades forman parte de los objetos modelo asociado.

Adicionalmente a los elementos de control normales, un elemento de control "table" tambiénestá disponible para los formularios, el cual establece una incorporación completa a las tablasde las bases de datos. Este está descrito en la sección de Formularios de bases de datos en elcapítulo 11 (pág 184).

BotonesEl objeto modelo de un botón provee las siguientes propiedades:

• BackgroundColor (long) color de fondo

• DefaultButton (Boolean) el botón sirve como valor por defecto. En este caso,también responde a la entrada si el botón no tiene el foco.

• Enabled (Boolean) el elemento de control está activado

• Tabstop (Boolean) el elemento de control puede ser accesado mediante la tecla detabulador

Capítulo 11 Formularios

Page 188: Guía del programador BASIC - OpenOffice.org

Capítulo 11Formularios

• TabIndex (Long) posición del elemento de control en la secuencia de activación

• FontName (String) nombre del tipo de fuente

• FontHeight (Single) alto del carácter en puntos (pt).

• Tag (String) cadena que contiene información adicional, la cual puede ser guardada en elbotón para el acceso controlado por programa.

• TargetURL (String) URL destino para los botones del tipo URL

• TargetFrame (String) nombre de la ventana (o marco) en la cual TargetURL debeser abierto cuando se activa el botón (para los botones de tipo URL)

• Label (String) etiqueta del botón

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

• HelpText (String) texto de ayuda que se despliega automáticamente cuando el cursordel mouse está sobre el elemento de control

• HelpURL (String) URL de la ayuda en línea del elemento de control correspondiente

• ButtonType (Enum) acción que está vinculada con el botón (valores por defecto decom.sun.star.form.FormButtonType).

Por medio de la propiedad ButtonType, tiene la oportunidad de definir una acción que esautomaticamente realizada cuando el botón se presionado. El grupo de constantescom.sun.star.form.FormButtonType asociado, provee los siguientes valores:

• PUSH botón normal

• SUBMIT termina la entrada del formulario (particularmente importante para formulariosHTML)

• RESET restaura todos los valores originales dentro de formulario

• URL llama la URL definida en TargetURL (es abierta dentro de la ventana que ha sidodefinida por medio de TargetFrame).

Los tipos de botón Aceptar y Cancelar provistos en los diálogos no están soportados en losformularios

Botones de opciónLas siguientes propiedades están disponibles por medio de su objeto modelo:

• Enabled (Boolean) el elemento de control puede ser activado

• Tabstop (Boolean) el elemento de control puede ser accesado por la tecla "Tab".

• TabIndex (Long) posición del elemento de control en la secuencia de activación

• FontName (String) nombre del tipo de fuente

• FontHeight (Single) alto del carácter en puntos (pt).

• Tag (String) cadena que contiene información adicional, la cual puede ser guardada en el

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 189: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

botón para acceso controlado por programación.

• Label (String) inscripción del botón.

• Printable (Boolean) el elemento de control puede ser impreso.

• State (Short) si es 1, la opción está activada, de lo contrario está desactivada.

• RefValue (String) cadena para salvar información adicional (por ejemplo, paraadministrar Id de los registros de datos).

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

• HelpText (String) texto automáticamente desplegado, cuando el cursor del mouse estásobre el elemento de control.

• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.

El mecanismo de agrupamiento de los botones de opción distingue entre los elementos decontrol para diálogos y formularios. Mientras los elementos de control que aparecen unodespués del otro son automáticamente combinados, el agrupamiento en los formularios estábasado en los nombres. Para hacer esto, todos los botones de opción deben contener el mismonombre. OpenOffice.org combina los elementos de control agrupados dentro de una matrizde manera que los botones individuales de un programa OpenOffice.org Basic puede seraccesado en de la misma forma que la descrita anteriormente.

El siguiente ejemplo muestra como el modelo de un grupo de elementos de control puede serdeterminada.

Dim Doc As ObjectDim Forms As ObjectDim Form As ObjectDim Ctl As ObjectDim I as Integer

Doc = StarDesktop.CurrentComponentForms = Doc.Drawpage.Forms

For I = 0 To Forms.Count – 1Form = Forms.GetbyIndex(I)If Form.HasByName("MyOptions") Then

Ctl = Form. GetGroupbyName("MyOptions")Exit Function

End If

Next I

El código correspondiente al ejemplo previo es para determinar simplemente el modelo delelemento de control. Busca por todos los formularios en el documento de texto actual en unciclo y usa el métod HasByName para verificar cual formulario contiene un elemento con elnombre de "MyOptiones" buscado. Si este es el caso, la matriz del modelo es accesadausando el método GetGroupByName (en lugar del método GetByName para determinarlos modelos simples).

Cajas de chequeo (Checkboxes)The model object of a checkbox form provides the following properties:

• Enabled (Boolean) el elemento de control puede ser activado.

Capítulo 11 Formularios

Page 190: Guía del programador BASIC - OpenOffice.org

Capítulo 11Formularios

• Tabstop (Boolean) el elemento de control puede ser accesado mediante la tecla "Tab".

• TabIndex (Long) posición del elemento de control en la secuencia de activación

• FontName (String) nombre del tipo de fuente.

• FontHeight (Single) alto del carácter en puntos (pt).

• Tag (String) cadena que contiene información adicional, la cual puede ser guardada en elbotón para acceso controlado por programación.

• Label (String) etiqueta del botón.

• Printable (Boolean) el elemento de control puede ser impreso.

• State (Short) si es 1, la opción está activada, de lo contrario está desactivada.

• RefValue (String) cadena para guardar información adicional (por ejemplo, administrarID de resgitros de datos).

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

• HelpText (String) texto de ayuda desplegado automáticamente, cuando el cursor delmouse está sobre el elemento de control.

• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.

Campos de textoLos objetos modelo de los formularios de campos de texto ofrecen las siguientespropiedades:

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

• BackgroundColor (long) color de fondo del elemento de control.

• Border (short) tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple).

• EchoChar (String) carácter de relleno para los campos de contraseña.

• FontName (String) nombre del tipo de fuente.

• FontHeight (Single) alto del carácter en puntos (pt).

• HardLineBreaks (Boolean) los saltos de línea automáticos son insertadospermanentemente en el texto del elemento de control.

• HScroll (Boolean) el texto tiene barra de desplazamiento horizontal.

• MaxTextLen (Short) tamaño máximo del texto; si se especifica el valor 0, no haylímites.

• MultiLine (Boolean) permite entradas multi-líneas.

• Printable (Boolean) el elemento de control puede ser impreso.

• ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura.

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 191: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

• Enabled (Boolean) el elemento de control puede ser activado.

• Tabstop (Boolean) el elemento de control puede ser accesado por la tecla "Tab".

• TabIndex (Long) posición del elemento de control en la secuencia de activación.

• FontName (String) nombre del tip de fuente.

• FontHeight (Single) alto del carácter en puntos (pt).

• Text (String) texto del elemento de control.

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

• VScroll (Boolean) el texto tiene barra de desplazamiento vertical.

• HelpText (String) texto de ayuda desplegado automáticamente, cuando el cursor delmuse está sobre el elemento de control.

• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.

Cajas de listasEl 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 acuerdocon la estructura com.sun.star.awt.FontDescriptor).

• LineCount (Short) número de líneas del elemento de control.

• MultiSelection (Boolean) permite la selección de múltiples entradas.

• SelectedItems (Array of Strings) lista de las entradas resaltadas.

• StringItemList (Array of Strings) lista de todas las entradas.

• ValueItemList (Array of Variant) lista conteniendo información adicional para cadaentrada (por ejemplo, para administrar ID de registros de datos).

• Printable (Boolean) el elemento de control puede ser impreso.

• ReadOnly (Boolean) el contenido del elemento de control es de sólo lectura.

• Enabled (Boolean) el elemento de control puede ser activado.

• Tabstop (Boolean) el elemento de control puede ser accesado por la tecla "Tab".

• TabIndex (Long) posición del elemento de control en la secuencia de activación.

• FontName (String) nombre del tipo de fuente.

• FontHeight (Single) alto del carácter en puntos (pt).

• Tag (String) cadena que contiene información adicional que puede ser guardada en elbotón para acceso controlado por programación.

Capítulo 11 Formularios

Page 192: Guía del programador BASIC - OpenOffice.org

Capítulo 11Formularios

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

• HelpText (String) texto de ayuda automáticamente desplegado cuando el cursor delmouse está sobre el elemento de control.

• HelpURL (String) URL de la ayuda en línea para el elemento de control correspondiente.

Por medio de su propiedad ValueItemList, las cajas de listas proveen la contraparte de la propiedad deVBA, ItemData, por medio de la cual puede administrar información adicional para las entradasindividuales de las listas.

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

• addItem (Item, Pos) inserta la cadena especificada en "Item" en la posición "Pos" de lalista.

• addItems (ItemArray, Pos) inserta las entradas listadas en la cadena de datos"ItemArray" en la lista en la posición "Pos".

• removeItems (Pos, Count) remueve las entradas "Count" desde la posición "Pos".

• selectItem (Item, SelectMode) activa o desactiva el resaltado para los elementosespecificados en la cadena "Item" dependiendo de la variable "SelectMode".

• makeVisible (Pos) búsca por el campo de lista de forma que la entrada especificadaen "Pos" sea visible.

Formularios de bases de datosLos formularios de OpenOffice.org pueden ser vinculados directamente a una base de datos.Los formularios creados de esta forma proveen todas las funciones para un completo "front-end" de la base de datos sin trabajo de programación independiente.

El usuario tiene la opción de localizar y buscar por las tablas y consultas seleccionadas, ytambién cambiar registros de datos e insertar nuevos registros. OpenOffice.orgAutomáticamente se asegura que los datos más importantes sean obtenidos de la base dedatos, y que cualquier cambio hecho sea escrito de nuevo a la base de datos.

Un formulario de base de datos básicamente corresponde a un formulario OpenOffice.orgnormal. Adicionalmente a las propiedades normales, las siguientes propiedades especificas ala base de datos pueden ser ajustadas en el formulario:

• DataSourceName (String) nombre de la fuente de datos (refiérase al capítulo 9,Acceso a Bases de Datos, fuentes de datos (pág 148); la fuente de datos debe ser creadaglobalmente en OpenOffice.org).

• Command (String) nombre de la tabla, consulta o coamndo Select SQL al cual el vínculoes hecho.

• CommandType (Const) – especifica cual comando es hecho a una tabla, conuslta ocomando SQL (valores de acuerdo a la enumeracióncom.sun.star.sdb.CommandType).

OpenOffice.orgOpenOffice.org Guía del programador BASIC

Page 193: Guía del programador BASIC - OpenOffice.org

OpenOffice.org Guía del programador BASIC

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

• TABLE Tabla

• QUERY - Consulta

• COMMAND Comando SQL

Los campos de las base de datos son asignados a los elementos de control individuales pormedio de la siguiente propiedad:

• DataField (String) nombre del campo de la base de datos vinculado.

TablasOtro elemento de control provisto para el trabajo con bases de datos: el elemento de controltabla. Este representa el contenido completo de una tabla o consulta. En el escenario mássimple, un elemento de control tabla es vinculado a una base de datos usando el formulariode autopiloto, el cual vincula todas las columnas de los campos de la base de datos deacuerdo a las especificaciones del usuario. Debido a que la API asociada es relativamentecompleja, no vamos a dar una descripción completa en este punto.

Capítulo 11 Formularios

Page 194: Guía del programador BASIC - OpenOffice.org
Page 195: Guía del programador BASIC - OpenOffice.org

^ 19_blank 59_hidden 59- 19* 19/ 19\ 19+ 19< 20<= 20<> 20= 20> 20>= 20compatibilidad entre OpenOffice.org Basic y

VBA 2

addItem 174, 184addItems 174, 184AdjustBlue 131AdjustContrast 131AdjustGreen 131AdjustLuminance 131AdjustRed 131afterLast() 155Align 182Alignment 139AllowAnimations 135Ambiente de desarrollo integrado 2AnchorType 82AnchorTypes 82AND 20Angle 119 s.ANNOTATION 115Anotaciones 91ANSI 9API de 49Application 57Area 140ArrangeOrder 143AS_CHARACTER 88Asc 34ASCII 9AsTemplate (Boolean) 60Author 91AutoMax 142

AutoMin 142AutoOrigin 142AutoStepHelp 143AutoStepMain 142AVERAGE 114

BackColor 84 s., 87, 107BackGraphicFilter 107BackGraphicLocation 107BackGraphicURL 107BackgroundColor 179, 182 s.Beep 47beforeFirst() 155BITMAP 121boleanas 13Border 182 s.BorderBottom 117BorderLeft 117BorderRight 117BorderTop 117BottomBorder 108BottomBorderDistance 108BottomMargin 84, 87, 108Bubble sort 25Buttons 166ButtonType 180

Cadenas 8Cambios dinámicos en las dimensiones de loscampos de datos 16Campos de datos 14cancelRowUpdates() 156CBool(Var) 32CDate(Var) 32CDbl(Var) 32Cell.Type 100CellAddress 102CellBackColor 103CellInsertMode 101CellRangeAddress 101 s.CenterHorizontally 112CenterVertically 112cero 36CharacterSet (string) 62CharacterSet (String) 60

i

Page 196: Guía del programador BASIC - OpenOffice.org

CharBackColor 71CharColor 71CharFontName 71, 124CharHeight 71CharKeepTogether 71CharStyleName 71CharUnderline 71CharWeight 71, 124Chr 34CInt(Var) 32CircleEndAngle 127CircleKind 127CircleStartAngle 127clearContents 115ClickCount 166CLng(Var) 32Close 44Códigos de página 9CollapseToEnd 76CollapseToStart 76Collate (Boolean) 63Color 104, 120Column 85, 102Columns 98COLUMNS 101 s.com.sun.star.awt.Gradient 119com.sun.star.awt.HatchStyle) 120com.sun.star.awt.Key 167 s.com.sun.star.awt.Point 128, 179com.sun.star.awt.Selection 172com.sun.star.awt.Size 179com.sun.star.awt.UnoControlEdit 172com.sun.star.awt.UnoControlListBox 173com.sun.star.beans.PropertyState 74com.sun.star.beans.propertyState.AMBIGUOS_VALUE 74com.sun.star.beans.propertyState.DEFAULT_VALUE 74com.sun.star.beans.propertyState.DIRECT_VALUE 74com.sun.star.chart.AreaDiagram 145com.sun.star.chart.ChartArea 140com.sun.star.chart.ChartAxis 141 s.com.sun.star.chart.ChartAxisArrangeOrderType143com.sun.star.chart.ChartAxisMarks 143com.sun.star.chart.ChartGrid 142com.sun.star.chart.ChartLegendPosition 138 s.

com.sun.star.chart.ChartTitle 138, 142com.sun.star.chart.Dim3Ddiagram 145 s.com.sun.star.chart.Dim3DDiagram 144com.sun.star.chart.PieDiagram 146com.sun.star.chart.StackableDiagram 145com.sun.star.document.OfficeDocument 57com.sun.star.drawing.BitmapMode 121com.sun.star.drawing.CircleKind 127com.sun.star.drawing.CircleKind.ARC 127com.sun.star.drawing.CircleKind.CUT 127com.sun.star.drawing.CircleKind.FULL 127com.sun.star.drawing.CircleKind.SECTION 127com.sun.star.drawing.ColorMode 131com.sun.star.drawing.DrawPage 117com.sun.star.drawing.FillProperties 128com.sun.star.Drawing.FillProperties 122com.sun.star.drawing.Hatch 120com.sun.star.drawing.LineProperties 128com.sun.star.drawing.LineProperties 127com.sun.star.drawing.LineShape 127com.sun.star.drawing.LineStyle 122com.sun.star.drawing.PolyPolygonShape 128com.sun.star.drawing.RotationDescriptor 133com.sun.star.drawing.ShadowProperties 128com.sun.star.drawing.Shape 118com.sun.star.drawing.Text 127 s.com.sun.star.form.FormButtonType 180com.sun.star.frame.Desktop 57com.sun.star.frame.XStorable 61com.sun.star.sdb.CommandType 185com.sun.star.sdb.DatabaseContext 148com.sun.star.sdb.DataSource 149com.sun.star.sdb.DefinitionContainer 151com.sun.star.sdb.QueryDefinition 150com.sun.star.sdbc.ResultSetConcurrency 154com.sun.star.sdbc.ResultSetType 154com.sun.star.sheet.CellDeleteMode 102com.sun.star.sheet.CellFlags 115com.sun.star.sheet.CellInsertMode 101com.sun.star.sheet.GeneralFunction 114com.sun.star.sheet.HeaderFooterContent 111com.sun.star.sheet.Spreadsheet 96com.sun.star.sheet.SpreadsheetDocument 95com.sun.star.sheet.TablePageStyle 112com.sun.star.sheet.XRangeMovement 100com.sun.star.style.CharacterProperties 71, 103,127 s.com.sun.star.style.GraphicLocation 107

ii

Page 197: Guía del programador BASIC - OpenOffice.org

com.sun.star.style.PageProperties 107 s.com.sun.star.style.ParagraphProperties 71, 103,127 s.com.sun.star.table.BorderLine 108com.sun.star.table.CellAddress 102com.sun.star.table.CellContentType 100com.sun.star.table.CellProperties 103com.sun.star.table.CellRangeAddress 101com.sun.star.table.ShadowFormat 103, 109com.sun.star.table.ShadowLocation 103com.sun.star.table.TableColumns 97com.sun.star.table.TableColumns 96com.sun.star.table.TableRows 96 s.com.sun.star.table.XtableRows 84com.sun.star.text.BaseFrameProperties 87com.sun.star.text.bookmark 92com.sun.star.text.ChapterFormat 92com.sun.star.text.ControlCharacter 78com.sun.star.text.Paragraph 68com.sun.star.text.TextContent 82com.sun.star.text.TextContentAnchorType 82com.sun.star.text.TextField.Annotation 91com.sun.star.text.TextField.Chapter 92com.sun.star.text.TextField.CharacterCount 90com.sun.star.text.TextField.DateTime 91com.sun.star.text.TextField.PageCount 90com.sun.star.text.TextField.WordCount 90com.sun.star.text.TextTable 68, 84com.sun.star.text.TextTableRow 84com.sun.star.text.VertOrientation 85com.sun.star.text.WrapTextMode 82com.sun.star.TextField.PageNumber 91com.sun.star.util.ReplaceDescriptor 81com.sun.star.util.XNumberFormatsSupplier 149com.sun.star.view.PaperFormat.A4 64com.sun.star.view.PaperFormat.Letter 64com.sun.star.view.PaperOrientation.LANDSCAPE64com.sun.star.view.PaperOrientation.PORTAIT64com.sun.star.view.Xprintable 63com.sun.star.view.XPrintable 61coma 36Comentarios 6Command 150, 184COMMAND 185CommandType 184ComputeFunction 114

Content 91Conversiones 31ConvertFromURL 58ConvertToURL 58CopyCount (Integer) 63copyRange 102COUNT 114COUNTNUMS 114createInstance 53CreateInstance 82createSearchDescriptor 79createTextCursorByRange 93CreateUnoDialog 157createUnoService 148CSng(Var) 32CStr(Var) 32CustomShow 135

DataField 185DataSourceName 184Date 39, 91DATETIME 115DateTimeValue 92datos multi-dimensionales 15Day 38DBG_methods 52DBG_properties 52DBG_supportedInterfaces 52Declaración explícita de variables 7Declaración implicita de variables 7Deep 145DefaultButton 179Dim3D 144Dir 40DisplayLabels 143Distancia 120Do ... Loop 23dobles 11dólar 36DOWN 101DrawPages 116

EchoChar 182Editable 172EDITATTR 115EMPTY 100Enabled 179 ss., 183

iii

Page 198: Guía del programador BASIC - OpenOffice.org

enableTriState 171end 135EndColor 119EndColumn 101endExecute 158EndIntensity 119EndRow 101entero largo 11enteros 10Environ 48eof 44EQV 20Erl 29Err 29Error$ 29escritura exponencial 12Event.Source 166Event.Source.Model 166Exit Function 26Exit Sub 26

Falso y verdadero 13fecha 14file:/// 58FileCopy 42FileDateTime 43FileExist 42FileLen 43FileName (String) 63FillBitmapMode 121FillBitMapName 121FillBitmapURL 121FillColor 118FillTransparence 122FillTransparenceGradient 122FillTransparenceGradientName 119FilterName (string) 62FilterName (String) 60FilterOptions (String) 60FilterOptions (String) 63findFirst 80findNext 80first() 155FirstPage 135Floor 140FocusFlags 168FontDescriptor 183

FontHeight 180, 182 s.FontName 180, 182 s.FooterBackColor 110FooterBackGraphicFilter 110FooterBackGraphicLocation 110FooterBackGraphicURL 110FooterBackTransparent 110FooterBodyDistance 110FooterBottomBorder 110FooterBottomBorderDistance 110FooterHeight 110FooterIsDynamicHeight 110FooterIsOn 91, 109FooterIsShared 110FooterLeftBorder 110FooterLeftBorderDistance 110FooterLeftMargin 110FooterRightBorder 110FooterRightBorderDistance 110FooterRightMargin 110FooterShadowFormat 111FooterText 112FooterTextLeft 112FooterTextRight 112FooterTopBorder 110FooterTopBorderDistance 110For ... Next 22Formateado 36 s.FORMULA 100, 115FORWARD_ONLY 155FreeFile 43Funciones 25

Gamma 131GapWidth 143get, método 50GetAttr 42getBinaryStream 154getBoolean 154getByIndex 55, 85getByName 53, 96getByte 153getBytes 154getCellRangeByName 113getCharacterStream 154getColumns 85GetCount 55, 85

iv

Page 199: Guía del programador BASIC - OpenOffice.org

getDate 154getDouble 153getElementNames 54getFloat 153getFocus 160getInt 153getLong 153getObject 154getPosition 50getPropertyState 73getShort 153getString 154getTextTables() 83getTime 154getTimestamp 154getUnicodeStream 154goLeft 76goRight 76gotoEnd 76gotoEndOfParagraph 76gotoEndOfWord 76gotoNextParagraph 76gotoNextWord 76gotoPreviousParagraph 76gotoPreviousWord 76gotoRange 76gotoStart 76gotoStartOfParagraph 76gotoStartOfWord 76GRADIENT 119GraphicColorMode 131GraphicURL 131

HARD_HYPEN 78HARD_SPACE 78HARDATTR 115HardLineBreaks 182hasByName 54, 96HasLegend 138hasLocation() 62HasMainTitle 138hasMoreElements 55HasSecondaryXAxis 142HasSecondaryXAxisDescription 142HasSubTitle 138HasXAxis 141HasXAxisDescription 142

HasXAxisGrid 142HasXAxisHelpGrid 142HasXAxisTitle 142HeaderBackColor 109HeaderBackGraphicFilter 109HeaderBackGraphicLocation 109HeaderBackGraphicURL 109HeaderBackTransparent 109HeaderBodyDistance 109HeaderBottomBorder 109HeaderBottomBorderDistance 109HeaderHeight 109HeaderIsDynamicHeight 109HeaderIsShared 109HeaderLeftBorder 109HeaderLeftBorderDistance 109HeaderRightBorder 109HeaderRightBorderDistance 109HeaderRightMargin 108HeaderShadowFormat 109HeaderText 112HeaderTextLeft 112HeaderTextRight 112HeaderTopBorder 109HeaderTopBorderDistance 109Height 85, 97, 107, 117Heigth 87HelpMarks 143HelpText 180 ss.HelpURL 180 ss.hexadecimales 13Highlighted 169HoriJustify 104HoriOrient 88Hour 38HScroll 182

If ... Then ... Else 20IMP 20Info 149Inputbox 45, 47insertByIndex 55, 98InsertByIndex 85insertByName 54, 96InsertCell 101insertCells 101InsertTextContent 83

v

Page 200: Guía del programador BASIC - OpenOffice.org

InStr 35interface 51Internet Standard RFC 1738 58Intérprete 2isAfterLast() 155IsAlwaysOnTop 135IsArray 33IsAutoHeight 85IsAutomatic 135isBeforeFirst() 155IsCellBackgroundTransparent 103IsCollapsed 76IsDate 33, 92IsEditable 172IsEndless 135isEndOfParagraph 76isEndOfWord 76isFirst() 155IsFixed 92IsFullScreen 135IsLandscape 107isLast( 155IsModified() 62IsMouseVisible 135IsMultipleMode 174IsNumeric 33ISO8859 9IsPasswordRequired 149IsReadOnly 149IsReadOnly() 62isStarOfParagraph 76isStarOfWord 76IsStartOfNewPage 97IsTextWrapped 104IsTransparent 103IsVisible 96 s.ItemCount 173ItemId 169

JumpMask (String) 60

KeyChar 167KeyCode 167Kill 42

Label 171, 180 ss.

last() 155Left 35LEFT 102, 166LeftBorder 108LeftBorderDistance 108LeftMargin 84, 87, 107LeftPageFooterContent 111LeftPageHeaderContent 111Legend 138Len 35Line Input 44LINE_BREAK 78LINE_TOP 88Líneas de programación 5LineColor 123LineCount 183LineJoint 123Lines 145LineShape 127LineStyle 123LineTransparence 123LineWidth 123loadComponentFromURL 57LoadLibrary 157Location 103, 128Logarithmic 143

makeVisible 174, 184Marcadores 6Marks 143Matrices 14Matrices, valor para el índice inicial 15Max 142MAX 114MaxTextLen 172, 182mensajes de error 29método Store 61Métodos 50Mid 35Mid, con reemplazo de caracteres 36MIDDLE 166Min 142MIN 114Minute 38MOD 20Model.Align 173Model.BackgroundColor 170, 173 s.

vi

Page 201: Guía del programador BASIC - OpenOffice.org

Model.Border 173 s.Model.DefaultButton 170Model.EchoChar 173Model.Enabled 160Model.FontDescriptor 170 ss.Model.HardLineBreaks 173Model.Height 159Model.HelpText 170 ss.Model.HelpURL 170 ss.Model.HScroll 173Model.Label 170 ss.Model.LineCount 174Model.MaxTextLen 173Model.MultiLine 173Model.MultiSelection 174Model.PositionX 159Model.PositionY 159Model.Printable 170 ss.Model.ReadOnly 173 s.Model.SelectedItems 174Model.State 171 s.Model.StringItemList 174Model.TabIndex 160, 171Model.Tabstop 160, 172 ss.Model.Text 173Model.TextColor 170 ss.Model.Title 159Model.VScroll 173Model.Width 159módulos 51moneda 11Month 38moveRange 102Msgbox 45MultiLine 182MultipleMode 173MultiSelection 183

Name 42, 149 s.Name (String), Impresora 64next() 155NextFocus 168NONE 101 s.NOT 20notación URL 58Now 39Number 117

NumberFormat 92, 143NumberFormatsSupplier 149NumberingType 90 s.NumberOfLines 146numeral 36Números decimales 12Números enteros 12

OBJECTS 115objeto Selection 68objetos dependientes del contexto 53octales 13Offset 91On Error 28On Error Resume Next 29 s.Open 43OpenOffice.org Basic 5OptimalHeight 97OptimalWidth 97OR 20Orientation 104, 117Origin 142Overlap 143Overwrite (Boolean) 63

Pages (String) 64PageStyle 96Página actual 90PaperFormat (Enum) 64PaperOrientation (enum) 64PaperSize (Size) 64ParaAdjust 72ParaBackColor 72ParaBottomMargin 72PARAGRAPH_BREAK 78ParaLeftMargin 72ParaLineSpacing 72ParamArray 28parámetros 26Parámetros opcionales 27ParaRightMargin 72ParaStyleName 72ParaTabStops 72ParaTopMargin 72Password 149Password (String) 60, 63Pause 135

vii

Page 202: Guía del programador BASIC - OpenOffice.org

Percent 144Point 118PolyPolygon 128Position 118, 139, 179previous() 155Print 44, 63Printable 181 ss.PrintAnnotations 112PrintCharts 113PrintDownFirst 113PrintDrawing 113Printer, propiedad 64PrinterPaperTray 107PrintFormulas 113PrintGrid 113PrintHeaders 113PrintObjects 113PrintZeroValues 113private:factory 61Procedimientos 25PRODUCT 114PropertyValue 60Propiedades 50punto 36PUSH 180PushButtonType 170

QUERY 185QueryDefinitions 150

ReadOnly 182 s.ReadOnly (Boolean) 60Red de Objetos Universal (UNO) 49ReDim 16RefValue 181 s.rehearseTimings 135removeByIndex 55, 98RemoveByIndex 85removeByName 54removeItems 174, 184RemoveRange 101removeTextContent 83RepeatHeadline 84replaceByName 54ReplaceDescriptor 81RESET 180ResultSetConcurrency 154

ResultSetType 154Resume 28Right 35RIGHT 101, 166RightBorder 108RightBorderDistance 108RightMargin 84, 87, 107RightPageFooterContent 111RightPageHeaderContent 111RmDir 41RotateAngle 104, 133Row 102Rows 98ROWS 101 s.

SCROLL_INSENSITIVE 155SCROLL_SENSITIVE 155SearchBackwards 79SearchCaseSensitive 79SearchDescriptor 79SearchFlags 59SearchRegularExpression 79SearchSimilarity 79SearchSimilarityAdd 79SearchSimilarityExchange 79SearchSimilarityRelax 80SearchSimilarityRemove 79SearchStyles 79SearchWords 79Second 38SecondaryXAxis 142Select ... Case 21Selected 169SelectedItem 173SelectedItemPos 173SelectedItems 173, 183SelectedItemsPos 173SelectedText 172Selection 172selectItem 174, 184sencillas 11set, método 50SetAttr 43setPosition 50Shadow 125ShadowColor 125ShadowFormat 103, 108

viii

Page 203: Guía del programador BASIC - OpenOffice.org

ShadowTransparence 125ShadowWidth 103ShadowXDistance 125ShadowYDistance 125ShearAngle 133Sheet 101 s.Sheets 95Shell 47Size 118, 128, 139, 179SOFT_HYPEN 78Sort (Boolean) 63SplineOrder 145SplineResolution 145SplineType 145Stacked 144StackedBarsConnected 145StarColor 119StarDesktop 57StarDesktop.CurrentComponent 58StarDesktop.LoadComponentFromURL 59StarIntensity 119start 135StartColumn 101StartRow 101StartWithNavigator 135State 171, 181 s.STDEV 114STDEVP 114StepCount 119StepHelp 142StepMain 142storeAsURL 62String 139STRING 115StringItemList 183Style 119 s.StyleFamilies 65STYLES 115SUBMIT 180Subtitle 138SUM 114supportsService 52SuppressVersionColumns 149SymbolBitmapURL 145SymbolSize 145SymbolType 145

TabIndex 180, 182 s.TABLE 185TableFilter 149TableTypeFilter 149Tabstop 179 s., 182 s.Tag 180, 182 s.TargetFrame 180TargetURL 180Temporary 168Text 172, 183TEXT 100TextAutoGrowHeight 124TextAutoGrowWidth 124TextBreak 143TextCanOverlap 143TextColor 180 ss.TextHorizontalAdjust 124TextLeftDistance 124TextLowerDistance 124TextRightDistance 124TextRotation 139, 143TextUpperDistance 124TextVerticalAdjust 124TextWrap 82Time 39Title 138TopBorder 108TopBorderDistance 108TopMargin 84, 87, 107Transparency 131

Unicode 9Universal Network Objects (UNO) 49Unpacked (Boolean) 63UP 102UpdateCatalogName 150updateRow() 156UpdateSchemaName 150UpdateTableName 150URL 149, 180UsePn 135User 149

VALUE 100, 115ValueItemList 183VAR 114variables 7

ix

Page 204: Guía del programador BASIC - OpenOffice.org

Variables boleanas 13Variables globales 18Variables locales 17Variables privadas 18Variables públicas 17VARP 114VBA, Application.ActiveDocument 58VBA, Application.ActiveWorkBook 58VBA, atributos de archivos 43VBA, ByRef 27VBA, Cambio de los límites de la matriz 17VBA, Characters, Sentences, y Words 69VBA, Comodines 41VBA, compatibilidad entre StarOffice Basic yVBA 2VBA, definir valores por defecto 28VBA, Document.Tables.Add 83VBA, Dynaset Recordset 155VBA, For Each ... Next 23VBA, Formateo fecha y hora 37VBA, funciones y procedimientos 27VBA, InsertAfter 75VBA, InsertBefore 75VBA, Like 20VBA, marcadores 7VBA, marcos 87VBA, máximo de caracteres 10VBA, mensajes de error 29VBA, MkDir 42VBA, MoveEnd 75VBA, MoveStart 75VBA, objetos 50VBA, Paragraph(1) 69VBA, Paragraphs 69VBA, ParamArray 28VBA, Parámetros 27VBA, Range 75, 83, 103

VBA, recuperar solo directorios 41VBA, Redimensionar matrices 16VBA, reiniciar los estados de error 29VBA, RmDir 42VBA, Snapshot 155Verificar el contenido de las variables 33Vertical 145VertJustify 104VertOrient 85, 88VScroll 183

Wait 47Wall 140Weekday 38Width 84, 88, 97, 107, 117

X 166XAxis 141XAxisTitle 142XEnumeration 55XEnumerationAccess 55XHelpGrid 142XIndexAccess 55XIndexContainer 55XMainGrid 142XmultiServiceFactory 53XNameAccess 53XNameContainer 53 s.XoffSet 119XOR 20XrangeMovement 102

Y 166Year 38YoffSet 119

x