Академический Документы
Профессиональный Документы
Культура Документы
Ref. 817-3923-10
2003, Revisión A
Copyrights y marcas comerciales
Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved.
Sun Microsystems, Inc. tiene los derechos de propiedad intelectual relacionados con la tecnología incluida en este producto. En particular, y sin limitaciones, los derechos de propiedad
intelectual pueden incluir una o más de las patentes de los EE.UU. enumeradas en http://www.sun.com/patents y una o más patentes adicionales o solicitudes de patentes pendientes en los
EE.UU. y otros países.
Este documento y el producto al que pertenece se distribuyen bajo licencias que restringen su uso, copia, distribución y descompilación. No se puede reproducir parte alguna de este producto
de este documento en ninguna forma ni por cualquier medio sin la autorización previa por escrito de Sun y sus licenciadores, si los hubiera.
El software de otras empresas, incluida la tecnología de fuentes, está protegido por copyright y posee licencia exclusiva de los proveedores de Sun.
Este producto se basa en parte en el trabajo de Independent JPEG Group, The FreeType Project y Catharon Typography Project.
Portions Copyright 2000 SuSE, Inc. Word for Word Copyright © 1996 Inso Corp. International CorrectSpell spelling correction system Copyright © 1995 by Lernout & Hauspie Speech
Products N.V. Todos los derechos reservados.
El código fuente de algunas partes de este producto está disponible bajo la licencia de Mozilla Public License en las siguientes sedes: http://www.mozilla.org/, http://www.jclark.com/, and
http://www.gingerall.com.
Sun, Sun Microsystems, el logotipo de Sun, Java, Solaris, StarOffice, el logotipo de Solaris y el logotipo de StarOffice son marcas comerciales o marcas comerciales registradas Sun
Microsystems, Inc. en EE.UU. y otros países.
UNIX es una marca registrada en los Estados Unidos y en otros países, bajo licencia exclusiva de X/Open Company, Ltd. Screen Beans y Screen Beans son marcas comerciales registradas de A
Bit Better Corporation. International CorrectSpell es una marca comercial de Lernout & Hauspie Speech Products N.V.
Los sistemas de corrección sueco, ruso, noruego, inglés, holandés y danés son de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos
reservados. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
Los sistemas de corrección español y francés son de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptados de
una lista de palabras suministrada por Librairie Larousse. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección inglés australiano es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Basado en The
Macquarie Dictionary, Second Revised Edition Copyright © Macquarie University NSW. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección catalán es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptado de una lista de
palabras en catalán: Copyright © 1992 Universitat de Barcelona. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección checo es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptado de una lista de
palabras suministrada por by Jan Hajic. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección finlandés es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptado de una lista de
palabras suministrada por la University of Helsinki Institute for Finnish Language y el Dr. Kolbjorn Heggstad. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de
datos están prohibidos.
El sistema de corrección alemán es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptado de una lista de
palabras suministrada por Langenscheidt K.G. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección italiano es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Adaptado de una lista de
palabras suministrada por Zanichelli S.p.A. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
El sistema de corrección portugués es de International CorrectSpell. Copyright © 1995 by Lernout & Hauspie Speech Products N.V. Todos los derechos reservados. Partes adaptadas del
Dicionario Academico da Lingua Portuguesa Copyright © 1992 by Porto Editora. La reproducción y el desensamblaje de los algoritmos incluidos y las bases de datos están prohibidos.
Adquisiciones federales: El software comercial y los usuarios del gobierno están sujetos a los términos y condiciones de licencia estándar.
ESTA DOCUMENTACIÖN SE ENTREGA "TAL CUAL" SIN GARANTÍA DE NINGUNA CLASE, YA SEA EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITÁNDOSE A LAS
GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN, ADECUACIÓN A UN PROPÓSITO PARTICULAR, O NO INFRINGIMIENTO, SALVO QUE AMBAS RENUNCIAS SE
CONSIDEREN NO VÁLIDAS LEGALMENTE.
Tabla de contenido
1 Introducción 11
Acerca de StarOffice Basic 11
Usuarios previstos de StarOffice Basic 12
Uso de StarOffice Basic 12
Estructura de este manual 12
Información adicional 13
Variables de cadena 20
Especificación de cadenas explícitas 20
Números 21
Integer 21
Long Integer 21
Single 21
Double 22
Variables Currency 22
Especificación de números explícitos 22
Variables booleanas 24
3
Detalles de fecha y hora 25
Variables Date 25
Campos de datos 25
Matrices simples 25
Variables privadas 30
Constantes 31
Operadores 31
Operadores matemáticos 31
Operadores lógicos 31
Operadores de comparación 32
Bifurcación 32
If...Then...Else 32
Select...Case 33
Bucles 34
For...Next 34
Do...Loop 35
Procedimientos y funciones 37
Procedimientos 37
Funciones 37
Terminación prematura de procedimientos y funciones 38
Paso de parámetros 39
Parámetros opcionales 40
Recursión 40
Gestión de errores 41
La instrucción On Error 41
La orden Resume 42
Archivos y directorios 54
Administración de archivos 55
Otras funciones 62
Beep 62
Shell 63
Wait 63
Environ 63
Table of contents 5
El método supportsService 68
Propiedades de depuración 68
Objetos documento 77
Plantillas 81
Detalles acerca de diversas opciones de formato 82
6 Documentos de texto: 83
La estructura de los documentos de texto 83
Párrafos y fragmentos de párrafo 84
Celdas 115
Formato 119
Presentaciones 153
Trabajo con presentaciones 153
9 Diagramas 155
Uso de diagramas en hojas de cálculo 155
Estructura de los diagramas 156
Elementos individuales de un diagrama 156
Ejemplo 162
Diagramas 3D 162
Table of contents 7
Iteración de tablas 170
Métodos específicos de cada tipo para recuperar valores 171
11 Diálogos 175
Trabajo con diálogos 175
Creación de diálogos 175
Propiedades 178
Nombre y título 178
12 Formularios 193
Trabajo con formularios 193
Determinar objetos de formulario 194
Aspectos de un elemento de control de un formulario 194
Acceso al modelo de los elementos de control de formulario 195
13 Apéndice 205
Consejos de migración para VBA 205
Consejos de migración para StarOffice 5.x 205
Table of contents 9
10 StarOffice™ 7 Manual de programación en Basic
CAPÍTULO 1
1 Introducción
Este manual ofrece una introducción a la programación con StarOffice Basic 6.0 e indica las
posibles aplicaciones del uso de StarOffice Basic en StarOffice. Para sacar el máximo provecho de
este manual, es conveniente estar familiarizado con otros lenguajes de programación.
El libro incluye ejemplos detallados para ayudarle a desarrollar sus propios programas de
StarOffice Basic con rapidez.
También se ofrecen diversos consejos de migración para programadores de Microsoft Visual Basic o para
quienes hayan trabajado con versiones anteriores de StarOffice Basic. Dichos consejos están señalados
mediante un pequeño símbolo en el borde de la página. El anexo de este manual contiene un índice con
todos los consejos de migración, lo que permite encontrar rápidamente al consejo que se desee consultar.
La compatibilidad entre StarOffice Basic y VBA hace referencia tanto al lenguaje StarOffice Basic como a
la biblioteca de ejecución. La API de StarOffice y el Editor de diálogos no son compatibles con VBA (la
estandarización de dichas interfaces hubiese impedido la incorporación de muchos de los conceptos
proporcionados por StarOffice).
11
Usuarios previstos de StarOffice Basic
El ámbito de aplicación de StarOffice Basic empieza donde terminan las funciones estándar de
StarOffice. StarOffice Basic permite automatizar las tareas rutinarias, crear vínculos con otros
programas (por ejemplo, un servidor de bases de datos) y utilizar scripts predefinidos para llevar a
cabo actividades complejas con una simple pulsación de botón.
StarOffice Basic ofrece acceso a la totalidad de funciones de StarOffice, es compatible con todas
ellas, puede modificar los tipos de documentos y ofrece opciones para crear cuadros de diálogo
personalizados.
El entorno de desarrollo integrado (IDE) incluye un editor para la entrada y verificación de macros.
Las interfaces para diversas aplicaciones de StarOffice que permiten acceder directamente a
documentos de Office.
Estos capítulos ofrecen una visión general de StarOffice Basic; es conveniente leerlos antes de
escribir programas en StarOffice Basic.
El resto de capítulos describe con mayor detalle los componentes individuales de la API de
StarOffice; pueden leerse de forma selectiva según sea necesario:
Capítulo 5: Trabajo con documentos de StarOffice
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html
La Developer's Guide (Guía del desarrollador) describe la API de StarOffice con mayor detalle que
este manual, pero está principalmente dirigida a programadores de Java y C++. Quienes ya estén
familiarizados con el lenguaje de programación StarOffice Basic encontrarán en dicha guía
información adicional acerca de StarOffice Basic y la programación en StarOffice; se puede
descargar de la siguiente dirección de Internet:
http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html
Los programadores que deseen trabajar directamente con Java o C++ en vez de con StarOffice
Basic deberán consultar la Developer's Guide de StarOffice en lugar de este manual. La
programación en StarOffice mediante Java o C++ es considerablemente más compleja que
mediante StarOffice Basic.
Capítulo 1 Introducción 13
14 StarOffice™ 7 Manual de programación en Basic
CAPÍTULO 2
También podrá obtener todas las ventajas de la programación orientada a objetos, puesto que
StarOffice Basic dispone de una interfaz que permite utilizar bibliotecas de objetos externas. La
API de StarOffice se basa en este tipo de interfaces que se describen más adelante.
Este capítulo ofrece una visión general de los elementos y construcciones principales del lenguaje
StarOffice Basic, así como la estructura de las aplicaciones y bibliotecas desde el punto de vista de
StarOffice Basic.
Líneas de programa
El funcionamiento línea por línea del intérprete de Basic representa una de las diferencias
fundamentales entre Basic y otros lenguajes de programación. Mientras que la posición de los
saltos de línea duros en el código fuente de los programas en Java, C++ o Delphi, por ejemplo, es
irrelevante, cada una de las líneas de un programa en Basic constituye una unidad independiente.
Las llamadas a funciones, las expresiones matemáticas y otros elementos del lenguaje, como las
cabeceras de funciones y bucles, deben completarse en la misma línea en la que empiezan.
Si el espacio no es suficiente o si las líneas son muy largas, es posible enlazar varias líneas
mediante signos de subrayado (_). En el ejemplo siguiente se muestra cómo se enlazan cuatro
líneas que constituyen una única expresión matemática:
15
ExpresionLarga = (Expresion1 * Expresion2) + _
(Expresion3 * Expresion4) + _
(Expresion5 * Expresion6) + _
(Expresion7 * Expresion8)
El subrayado debe ser siempre el último carácter de una línea enlazada y no puede ir seguido de
un espacio o un tabulador; en caso contrario, el código generará un error.
Aparte de enlazar líneas individuales, StarOffice Basic permite a los programadores utilizar el
signo de dos puntos para dividir una línea en varias secciones y aprovechar el espacio para varias
expresiones. Las asignaciones
a = 1
a = a + 1
a = a + 1
a = 1 : a = a + 1 : a = a + 1
Comentarios
Además del código ejecutable, los programas de StarOffice Basic pueden contener comentarios en
los que se dan explicaciones acerca de las distintas partes del programa, así como información
importante mediante la cual se puede volver a analizar más adelante el código del programa para,
por ejemplo, solucionar errores.
StarOffice Basic ofrece dos métodos para introducir comentarios en el código del programa:
Un comentario suele incluir todos los caracteres hasta el final de la línea. StarOffice Basic interpreta
la línea siguiente de nuevo como una instrucción normal. Si los comentarios abarcan varias líneas,
es necesario identificar cada una de ellas como un comentario:
Los marcadores sólo pueden contener caracteres latinos, números y signos de subrayado (_).
El primer carácter de un marcador debe ser una letra o un subrayado.
Las reglas de construcción de marcadores son distintas en StarOffice Basic y en VBA. Por ejemplo, a
diferencia de VBA, StarOffice Basic no permite utilizar caracteres especiales en los marcadores, ya que
podrían provocar problemas en los proyectos internacionales.
a = b + c
Option Explicit
Esta opción debe aparecer en la primera línea de programa de cada uno de los módulos. La opción
garantiza que se genere un mensaje de error si alguna de las variables utilizadas no se ha
declarado. Es conveniente incluir la opción Option Explicit en todos los módulos de Basic.
Es su forma más simple, la orden de declaración explícita de una variable tiene el siguiente
aspecto:
Dim MiVar
En este ejemplo se declara una variable con el nombre MiVar y el tipo variant. Un variant es una
variable universal que puede contener cualquier tipo de valor concebible, incluidas cadenas de
caracteres, números enteros, números en coma flotante y valores lógicos o booleanos. He aquí
varios ejemplos de variables de tipo Variant:
Las variables declaradas de esta forma se pueden incluso utilizar para distintos tipos de variable
en un mismo programa. Aunque esta característica proporciona mucha flexibilidad, es más
conveniente restringir una variable a un único tipo. Cuando StarOffice Basic detecta un tipo de
variable definido incorrectamente en un contexto específico, se genera un mensaje de error.
Para hacer una declaración de variable de tipo fijo, utilice esta forma:
La variable se declara con el tipo entero, lo que le permite contener valores numéricos enteros.
También puede utilizar el siguiente estilo para declarar una variable de tipo entero:
Si desea asignar a estas variables un tipo permanente, deberá efectuar asignaciones independientes
para cada una de ellas:
En las secciones siguientes se enumeran los tipos de variable disponibles en StarOffice Basic y se
describa la forma de usarlos y declararlos.
Cadenas
Las cadenas, conjuntamente con los números, son los tipos básicos más importantes de StarOffice
Basic. Una cadena consta de una secuencia de caracteres individuales consecutivos. El sistema
guarda internamente las cadenas como secuencias de números, en las que cada número representa
un carácter específico.
No obstante, dicho juego de caracteres no incluye, por ejemplo, muchos de los caracteres especiales
utilizados en Europa, como â, ä e î, ni otros formatos de caracteres, como el alfabeto cirílico.
Páginas de códigos
Los juegos de caracteres ISO 8859 han ofrecido un estándar internacional que está obsoleto desde
hace tiempo. Los primeros 128 caracteres del juego de caracteres ISO corresponden a los caracteres
ASCII. El estándar ISO introduce nuevos juegos de caracteres (páginas de códigos) para poder
mostrar correctamente más idiomas. Sin embargo, la consecuencia es que el mismo valor
representa caracteres distintos en los distintos idiomas.
Variables de cadena
StarOffice Basic guarda las cadenas de caracteres como variables de cadena en Unicode. Una
variable de cadena puede almacenar un máximo de 65535 caracteres. Internamente, StarOffice
Basic guarda el valor Unicode asociado a cada carácter. La memoria de trabajo necesaria para una
variable de cadena depende de la longitud de ésta.
Ejemplo de declaración de una variable de cadena:
Dim Variable$
Al portar aplicaciones de VBA, compruebe que se respete la máxima longitud de cadena permitida en
StarOffice Basic (65535 caracteres).
Para dividir una cadena en dos líneas, agregue un signo más al final de la primera línea:
Para incluir un signo de comillas (") dentro de una cadena, escríbalo dos veces en el lugar
correspondiente:
Integer
Las variables de tipo Integer pueden almacenar cualquier número entero entre -32768 y 32767. Una
variable entera puede ocupar un máximo de dos bytes de memoria. EL símbolo de declaración de
tipo para una variable entera es %. Los cálculos con variables enteras son muy rápidos, por lo que
son especialmente útiles en contadores de bucles. Si asigna un número de coma flotante a una
variable entera, el número se redondeará hacia arriba o hacia abajo al número entero más próximo.
Ejemplos de declaraciones de variables enteras:
Long Integer
Las variables de tipo Long integer (entero largo) pueden almacenar cualquier número entero entre
2147483648 y 2147483647. Una variable de tipo entero largo puede ocupar un máximo de cuatro
bytes de memoria. El símbolo de declaración de tipo para una variable de tipo entero largo es &.
Los cálculos con variables de tipo entero largo son muy rápidos, por lo que son especialmente
útiles en contadores de bucles. Si asigna un número de coma flotante a una variable de tipo entero
largo, el número se redondeará hacia arriba o hacia abajo al número entero más próximo.
Single
Las variables Single (coma flotante de precisión simple) pueden almacenar números de coma
flotante positivos o negativos entre 3,402823 x 1038 y 1,401298 x 10-45. Una variable de tipo simple
puede ocupar un máximo de cuatro bytes de memoria. El símbolo de declaración de tipo para una
variable de tipo simple es !.
Originalmente, las variables de tipo simple se utilizaban para reducir el tiempo de cálculo
requerido por las variables de doble precisión. No obstante, las consideraciones de velocidad son
ya irrelevantes, lo que reduce la necesidad de utilizarlas.
Double
Las variables Double (coma flotante de doble precisión) pueden almacenar números de coma
flotante positivos o negativos entre 1,79769313486232 x 10308 y 4.94065645841247 x 10-324. Una
variable doble puede ocupar un máximo de ocho bytes de memoria. Las variables dobles son
adecuadas para cálculos precisos. El símbolo de declaración de tipo es #.
Variables Currency
Las variables de tipo Currency (moneda) difieren del resto de tipos de variables en la forma en que
manejan los valores. El signo decimal es fijo y va seguido de cuatro decimales. La variable puede
contener un máximo de 15 números antes del signo decimal. Una variable de moneda puede
almacenar valores entre -922337203685477,5808 y +922337203685477,5807 y ocupa un máximo de
ocho bytes de memoria. El símbolo de declaración de tipo para una variable de moneda es @.
Las variables de moneda se utilizan principalmente en cálculos económicos que generan errores de
redondeo no previsibles con el uso de variables de coma flotante.
Números enteros
El método más simple es trabajar con números enteros. En el texto fuente aparecen sin la coma de
separación de miles:
Dim A As Integer
Dim B As Float
A = 1210
B = 2438
Dim A As Integer
Dim B As Float
A = + 121
B = - 243
Números decimales
Al introducir un número decimal, utilice el punto (.) como separador de decimales. De esta forma
se garantiza que el código fuente se puede transferir de un país a otro sin necesidad de conversión.
Dim A As Integer
Dim B As Integer
Dim C As Float
También puede usar los signos más (+) o menos (-) como prefijos de los números decimales (con o
sin espacios).
Si se asigna un número decimal a una variable entera, StarOffice Basic redondea la cifra hacia
arriba o hacia abajo.
Dim A As Double
A = 1.43E -2 ' Incorrecto (no se permiten los espacios dentro del número)
A = 1,43E-2 ' Incorrecto (no se permite utilizar comas como separadores
decimales)
A = 1.43E2.2 ' Incorrecto (el exponente debe ser un número entero)
Tenga en cuenta que los ejemplos incorrectos primero y tercero no generan ningún mensaje de
error, a pesar de que las variables devuelvan valores incorrectos. La expresión
A = 1.43E -2
A = 1.43E2.2
StarOffice Basic ignora la parte del exponente situada después del signo decimal e interpreta la
expresión como
A = 1.43E2
Valores hexadecimales
El sistema hexadecimal (sistema de base 16) tiene la ventaja de que un número de dos dígitos
corresponde exactamente a un byte. Esto permite manejar los números de una forma más próxima
a la arquitectura de la máquina. En el sistema hexadecimal se utilizan como dígitos los números
del 0 al 9 y las letras de la A a la F. La A representa el número decimal 10, mientras que la F
representa el 15. StarOffice Basic permite utilizar valores hexadecimales como números enteros,
mientras vayan precedidos de &H.
Dim A As Long
Valores octales
StarOffice Basic entiende también el sistema octal (base 8) que utiliza los números del 0 al 7; para ello
se deben especificar números enteros precedidos de &O.
Dim A As Long
Variables booleanas
Las variables lógicas o booleanas sólo pueden contener uno de estos dos valores: True (verdadero) y
False (falso). Son adecuadas para especificaciones binarias que sólo pueden adoptar uno de los dos
estados mencionados. Un valor booleano se guarda internamente como valor de dos bytes; 0
corresponde al valor False y cualquier otro valor a True. Las variables booleanas no tienen un
símbolo de declaración de tipo asociado. Sólo se puede efectuar la declaración mediante el uso del
fragmento As Boolean. Un ejemplo de declaración de una variable booleana es:
Campos de datos
Además de las variables sencillas (escalares), StarOffice Basic admite también campos de datos (
matrices). Un campo de datos contiene varias variables a las que se puede acceder a través de un
índice.
Matrices simples
Una declaración de matriz es similar a la de una variable simple pero, a diferencia de ésta, el
nombre de la matriz va seguido por un paréntesis que contiene la especificación del número de
elementos. La expresión
Dim MiMatriz(3)
declara una matriz con cuatro variables de tipo variant: MiMatriz(0), MiMatriz(1), MiMatriz
(2) y MiMatriz(3).
También se pueden declarar matrices de variables de tipos específicos; por ejemplo, la línea
siguiente representa una declaración de matriz con cuatro variables enteras:
En los ejemplos anteriores, el índice de la matriz empieza siempre por el valor inicial estándar de 0.
Es posible especificar un rango de validez con valores inicial y final en la declaración del campo de
datos. En el ejemplo siguiente se declara un campo de datos con seis valores enteros que tiene
asignados los índices 5 al 10:
Los índices no tienen por qué ser valores positivos. En el ejemplo siguiente se muestra una
declaración correcta con límites negativos.
A veces se aplican otros valores de límite para índices de campos de datos en VBA. El mismo tipo de
limitaciones se aplica, asimismo, al número máximo de elementos posibles por dimensión. Los valores
válidos aparecen en la documentación de VBA pertinente.
Option Base 1
Dicha llamada deberá incluirse en la cabecera de un módulo si se desea aplicar a todas las
declaraciones de matrices de éste. Esta llamada, no obstante, no afecta a las secuencias de UNO
definidas a través de la API de StarOffice, cuyo índice empieza siempre por 0. Para mejorar la
claridad, es conveniente no utilizar Option Base 1.
El uso de Option Base 1 no afecta al número de elementos de la matriz, únicamente al índice inicial
de la ésta. La declaración
Option Base 1
' ...
Dim MiEntero(3)
crea 4 variables enteras que pueden describirse mediante las expresiones MiEntero(1),
MiEntero(2), MiEntero(3) y MiEntero(4).
Dim MiMatrizEntera(5, 5)
define una matriz entera de dos dimensiones, con 6 índices en cada una de ellas (a los que se puede
acceder mediante los valores 0 a 5). La matriz puede almacenar un total de 6 × 6 = 36 valores enteros.
ReDim MiMatriz(10)
A diferencia de VBA, que sólo permite especificar mediante Dim MiMatriz() las dimensiones de matrices
dinámicas, StarOffice Basic permite modificar tanto las matrices estáticas como las dinámicas mediante
ReDim.
En el ejemplo siguiente se modifica la dimensión de la matriz inicial para que pueda almacenar 11
o 21 valores:
' ...
' ...
Al restablecer las dimensiones de una matriz se puede utilizar cualquiera de las opciones indicadas
en las secciones anteriores. Entre éstas, la declaración de campos de datos multidimensionales o la
especificación de valores de inicio y final explícitos. Cuando se modifican las dimensiones de un
campo de datos, el contenido de éste se pierde . Si desea conservar los valores originales utilice la
orden Preserve:
' ...
Si utiliza ReDim junto con Preserve, deberá utilizar el mismo tipo de datos especificado en la declaración
original delcampo de datos.
Variables locales
Las variables declaradas dentro de una función o procedimiento se denominan variables locales:
Sub Prueba
Dim MiEntero As Integer
' ...
End Sub
Las variables locales sólo son válidas mientras la función o procedimiento se están ejecutando; a
continuación se reinician con el valor cero. Cada vez que se llama a la función, los valores
generados anteriormente ya no están disponibles.
Para conservar los valores anteriores se debe definir la variable como Static:
Sub Prueba
Static MiEntero As Integer
' ...
End Sub
A diferencia de VBA, StarOffice Basic comprueba que el nombre de una variable local no se utilice
simultáneamente como variable global y como variable privada en la cabecera del módulo. Al portar una
aplicación de VBA a StarOffice Basic será necesario cambiar los nombres de variable duplicados.
Módulo A:
Dim A As Integer
Sub Prueba
Flip
Flop
End Sub
Sub Flip
A = A +1
End Sub
Módulo B:
Sub Flop
A = A - 1
End Sub
El valor de la variable A no cambia por la función Prueba, pero la función Flip lo incrementa en
uno y la función Flop lo disminuye en uno. Ambos cambios en la variable son globales.
En lugar de Dim se puede utilizar la palabra clave Public para declarar una variable de dominio
público:
Public A As Integer
Una variable de dominio público sólo está disponible mientras se está ejecutando la macro
asociada; a continuación, la variable se reinicia.
Variables globales
Desde el punto de vista de su función, las variables globales son similares a las variables de
dominio público, con la excepción de que sus valores se conservan incluso después de que la
macro asociada se haya ejecutado. Las variables globales se declaran en la sección de cabecera de
un módulo mediante la palabra clave Global:
Global A As Integer
Si hay varios módulos que contienen una variable privada con el mismo nombre, StarOffice
Basic crea una variable distinta para cada una de las apariciones del nombre. En el ejemplo
siguiente, tanto el módulo A como el módulo B contienen una variable privada denominada C. La
función Prueba en primer lugar establece la variable privada del módulo A y a continuación
hace lo mismo con la del módulo B.
Módulo A:
Private C As Integer
Sub Prueba
SetModuleA ' Establece la variable C del módulo A
SetModuleB ' Establece la variable C del módulo B
Sub SetmoduleeA
A = 10
End Sub
Sub ShowVarA
MsgBox C ' Muestra la variable C del módulo A.
End Sub
Módulo B:
Private C As Integer
Sub SetModuleB
A = 20
End Sub
Sub ShowVarB
MsgBox C ' Muestra la variable C del módulo B.
End Sub
Const A = 10
Const B As Double = 10
Operadores
StarOffice Basic comprende los operadores matemáticos, lógicos y de comparación comunes.
Operadores matemáticos
Los operadores matemáticos se pueden utilizar con todo tipo de números; asimismo, el operador +
puede utilizarse para enlazar cadenas.
* Multiplicación de números
/ División de números
Operadores lógicos
Los operadores lógicos permiten vincular elementos según las reglas del álgebra de Boole. Si los
operadores se aplican a variables booleanas, la operación proporciona directamente el resultado
requerido. Si se usan con valores enteros o enteros largos, la operación se efectúa a nivel de bit.
OR Operación de O lógico
IMP Implicación (si la primera expresión es verdadera [True], la segunda también debe ser
verdadera)
Bifurcación
Utilice expresiones de bifurcación para restringir la ejecución de un bloque de código mientras no se
cumpla una condición determinada.
If...Then...Else
La expresión de bifurcación más común es una expresión If.Por ejemplo:
If A > 3 Then
B = 2
End If
La asignación B = 2 sólo tiene lugar cuando el valor de la variable A es mayor que tres. Una
variación de la expresión If es la cláusula If/Else:
If A > 3 Then
B = 2
Else
B = 0
End If
En este ejemplo se asigna a la variable B el valor 2 si A es mayor que 3; en caso contrario se asigna a
B el valor 0.
Para construir expresiones más complejas, éstas se pueden unir en cascada, por ejemplo:
If A = 0 Then
B = 0
ElseIf A < 3 Then
B = 1
Else
B = 2
End If
Select...Case
La instrucción Select...Case es una alternativa a las expresiones If en cascada y se utiliza
cuando se debe comprobar el valor de una variable con varias condiciones:
Case 6, 7, 8
Case Else
End Select
For...Next
El bucle For...Next se ejecuta un número fijo de veces. El contador del bucle define el número
de veces que éste se ejecuta. En el ejemplo siguiente,
Dim I
For I = 1 To 10
Next I
Si desea incrementar el contador del bucle al final de cada pase en un valor distinto de 1, utilice la
función Step:
Dim I
Next I
En el ejemplo anterior, el contador se incrementa en 0,5 al final de cada pase y el bucle se ejecuta 19
veces.
También se pueden utilizar valores de Step negativos:
Dim I
For I = 10 To 1 Step -1
Next I
En este ejemplo, el contador empieza en 10 y se reduce en 1 al final de cada pase hasta que llega a 1.
Dim I
If I = 5 Then
Exit For
End If
Next I
Do...Loop
El bucle Do...Loop no está vinculado con un número de pases fijo. En vez de eso, Do...Loop se
ejecuta hasta que se cumple una condición determinada. Hay cuatro variantes de Do...Loop (en
los ejemplos siguientes, A > 10 representa cualquier condición):
1. La variante Do While...Loop
Do While A > 10
' ... cuerpo del bucle
Loop
comprueba si la condición se sigue cumpliendo antes de cada pase y, en caso afirmativo, ejecuta
el bucle.
2. La variante Do Until...Loop
Do Until A > 10
' ... cuerpo del bucle
Loop
Do
' ... cuerpo del bucle
Loop While A > 10
sólo comprueba la condición después del primer pase del bucle y termina si la condición se cumple .
Do
' ... cuerpo del bucle
Loop Until A > 10
también comprueba la condición después del primer pase, pero ejecuta el bucle hasta que la
condición deja de cumplirse.
Do
If A = 4 Then
Exit Do
End If
Sub Sort
Dim Entrada(1 To 10) As String
Dim Contador As Integer
Dim Contador2 As Integer
Dim Temp As String
Entrada(1) = "Patricia"
Entrada(2) = "Carlos"
Entrada(3) = "Tomás"
Entrada(4) = "Miguel"
Entrada(5) = "David"
Entrada(6) = "Catalina"
Entrada(7) = "Susana"
Entrada(8) = "Eduardo"
Entrada(9) = "Cristina"
Entrada(10) = "Gerardo"
For Contador = 1 To 10
For Contador2 = Contador + 1 To 10
If Entrada(Contador) > Entrada(Contador2) Then
Temp = Entrada(Contador)
Entrada(Contador) = Entrada(Contador2)
Entrada(Contador2) = Temp
End If
Next Contador2
Next Contador
For Contador = 1 To 10
Print Entrada(Contador)
Next Contador
End Sub
Procedimientos y funciones
Los procedimientos y las funciones son puntos clave dentro de un programa. Constituyen la
estructura que permite dividir un problema complejo en varias subtareas.
Procedimientos
Un procedimiento ejecuta una acción sin devolver un valor de forma explícita. Su sintaxis es
Sub Prueba
End Sub
El ejemplo define un procedimiento denominado Prueba que contiene código al que se puede
acceder desde cualquier punto del programa. La llamada se efectúa especificando el nombre del
procedimiento en el lugar pertinente del programa:
Prueba
Funciones
Una función, igual que un procedimiento, combina en una unidad lógica un bloque de programa
que debe ejecutarse. Sin embargo, a diferencia de un procedimiento, las funciones devuelven un
valor.
Function Prueba
Prueba = 123
End Function
El valor de retorno se indica mediante una simple asignación. Ésta no tiene por qué situarse al final
de la función; puede estar en cualquier lugar dentro de la función.
La función superior se puede llamar desde un programa, de la siguiente forma:
Dim A
A = Prueba
Function Prueba
Prueba = 12
' ...
Prueba = 123
End Function
Si se para una asignación, la función devuelve un valor cero (el número 0 en el caso de valores
numéricos, un espacio en blanco en el caso de cadenas).
El valor de retorno de la función puede ser de cualquier tipo. El tipo se declara de la misma forma
que en las declaraciones de variables:
End Function
Sub Prueba
Dim ErrorOcurrido As Boolean
' ...
If ErrorOcurrido Then
Exit Sub
End If
' ...
End Sub
define un procedimiento que espera recibir como parámetros un valor entero A y una cadena B.
En StarOffice Basic, los parámetros se suelen pasar por referencia. Los cambios efectuados en las
variables se conservan al salir del procedimiento o función:
Sub Prueba
Dim A As Integer
A = 10
CambiarValor(A)
' El valor del parámetro A es ahora 20
End Sub
Sub CambiarValor(ElValor As Integer)
ElValor = 20
End Sub
En este ejemplo, el valor A definido en la función Prueba se pasa como parámetro a la función
CambiarValor. A continuación, el valor se cambia a 20 y se pasa a ElValor, que se conserva al
salir de la función.
También se puede pasar un parámetro como valor, en el caso de que no desee que los cambios
subsiguientes del parámetro afecten al valor que se pasa originalmente. Para especificar que un
parámetro se pasará como valor, compruebe que la palabra clave ByVal preceda a la declaración
de la variable en la cabecera de la función.
Por regla general, las funciones y procedimientos de StarOffice Basic son públicos. Las palabras clave
Public y Private que se utilizan en VBA no se admiten en StarOffice Basic.
End Sub
End Sub
Recursión
StarOffice Basic permite ahora la recursión. Un procedimiento o una función recursivos pueden
llamarse a sí mismos hasta que detectan el cumplimento de una condición de base. Al llamar a la
función con la condición base, se devuelve un resultado.
El ejemplo siguiente utiliza una función recursiva para calcular el factorial de los números 42,
-42 y 3,14:
Sub Main
Msgbox CalcularFactorial( 42 ) ' Muestra 1,40500611775288E+51
Msgbox CalcularFactorial( -42 ) ' Muestra "N 伹 ero no v 疝 ido para c 疝 culo del
factorial!"
Tenga en cuenta que el nivel de recursión de StarOffice Basic está limitado a 500.
Gestión de errores
La gestión correcta de las situaciones de error es una de las tareas más costosas de la programación
desde el punto de vista del tiempo dedicado. StarOffice Basic ofrece una gama de herramientas
para simplificar la gestión de errores.
La instrucción On Error
La instrucción On Error es la clave de cualquier sistema de gestión de errores:
Sub Prueba
On Error Goto ManejadorError
' ... efectuar tarea durante la cual puede tener lugar un error
Exit Sub
ManejadorError:
End Sub
ManejadorError:
Resume Next
Utilice la orden Resume Proceed para especificar un punto de salto para continuar con el
programa después de la gestión del error:
ManejadorError:
Proceed:
Para proseguir con un programa sin mostrar un mensaje de error cuando un error tiene lugar,
utilice el formato siguiente:
Sub Prueba
On Error Resume Next
' ... efectuar tarea durante la cual puede tener lugar un error
End Sub
Utilice la orden On Error Resume Next con precaución, ya que sus efectos son globales. Para
obtener más información, consulte Consejos para el manejo estructurado de errores.
La llamada
MsgBox "Error " & Err & ": " & Error$ & " (línea: " & Erl & ")"
La información de estado sigue siendo válida hasta que el programa llega a una orden Resume u
On Error; en ese momento la información se reinicia.
En VBA, el método Err.Clear del objeto Err reinicia el estado de error después de un error. En
StarOffice Basic se utilizan para ello las órdenes On Error o Resume.
Si desea estructurar el código de forma clara para impedir que se generen errores al emplear esta
construcción, deberá evitar utilizar órdenes de salto sin supervisarlas.
Debe utilizar la orden On Error Resume Next con precaución, ya que ésta desecha todos los
mensajes de error abiertos.
La mejor solución es utilizar una única estrategia de gestión de errores en un programa, mantener
el código de gestión de errores separado del propio código del programa y no volver al código
original después de un error.
Sub Ejemplo
La llamada On Error Goto 0 al final del código reinicia la información de estado del error (el
código del error en las variables de sistema Err) de forma que se pueda reconocer con claridad un
error que tenga lugar en un momento posterior.
Funciones de conversión
En diversas situaciones concurren circunstancias en las que una variable de un tipo debe
convertirse en una variable de un tipo distinto.
Dim A As String
Dim B As Integer
B = 101
A = B
En este ejemplo, la variable A es una cadena y la variable B es un entero. StarOffice Basic convierte
la variable B en cadena durante la asignación a la variable A. Esta conversión es mucho más
compleja de lo que parece: el entero B permanece en la memoria de trabajo en forma de número de
dos bytes de longitud; por otra parte, A es una cadena y el sistema guarda un valor de uno o dos
bytes de longitud para cada carácter (cada número), por consiguiente, antes de copiar el contenido
de B en A, es necesario convertir B al formato interno de A.
A diferencia de casi todos los demás lenguajes de programación, Basic efectúa la conversión de
tipos de forma automática. No obstante, las consecuencias de dicha conversión pueden ser fatales.
Al examinar detenidamente la siguiente secuencia de código
Dim A As String
Dim B As Integer
Dim C As Integer
B = 1
C = 1
A = B + C
que parece bastante directa a primera vista, resulta ser más bien una trampa. El intérprete de Basic
calcula primero el resultado del proceso de suma y a continuación efectúa la conversión de éste en
una cadena, lo que produce como resultado la cadena 2. Si, en cambio, el intérprete de Basic
45
convierte primero los valores iniciales B y C en una cadena y aplica al resultado el operador de
suma, se genera el resultado 11.
Lo mismo sucede cuando se utilizan variables de tipo variant:
Dim A
Dim B
Dim C
B = 1
C = "1"
A = B + C
Puesto que las variables de tipo variant pueden contener tanto números como cadenas, no está
claro si se asigna a la variable A el número 2 o la cadena 11.
Las fuentes de error indicadas para las conversiones de tipo implícitas sólo pueden evitarse
mediante una disciplina de programación adecuada; evitando, por ejemplo, el uso del tipo de
datos variant (una recomendación en la insistimos).
Para evitar otro tipo de errores provocados por la conversión de tipos implícita, StarOffice Basic
ofrece una amplia gama de funciones de conversión que se pueden utilizar para definir cuándo se
debe convertir el tipo de datos de una operación:
CDbl(Var) : convierte cualquier tipo de datos en un valor de coma flotante de precisión doble.
Estas funciones de conversión se pueden utilizar para definir cómo StarOffice Basic efectúa esas
operaciones de conversión de tipo:
Dim A As String
Dim B As Integer
Dim C As Integer
B = 1
C = 1
Las funciones de conversión numéricas CSng y CDbl aceptan también como argumentos números
decimales. Se debe utilizar como signo decimal el símbolo definido en la configuración específica
de cada país. De forma similar, el método CStr utiliza la configuración específica de país
actualmente seleccionada para dar formato a números, fechas y horas.
La función Val es distinta de los métodos Csng, Cdbl y Cstr. Esta función convierte una cadena
en un número; pero, siempre espera un punto como símbolo de separación de decimales.
Dim A As String
Dim B As Double
A = "2.22"
B = Val(A) ' La conversión es correcta independientemente de la configuración
específica del país
Dim A As String
Dim B As Date
A = "prueba"
B = A ' Crea un mensaje de error
En este ejemplo, la asignación de la cadena prueba a una variable de fecha no tiene sentido, por lo
que el intérprete de Basic genera un error. Es similar al caso de intentar asignar una cadena a una
variable booleana:
Dim A As String
Dim B As Boolean
A = "prueba"
B = A ' Crea un mensaje de error
If IsNumeric(EntradaUsuario) Then
EntradaValida = EntradaUsuario
Else
EntradaValida = 0
MsgBox "Mensaje de error."
End If
Dummy = Valor
IsBoolean = True
On Error Goto 0
Exit Sub
ErrorEsBooleano:
IsBoolean = False
On Error Goto 0
End Function
La función IsBoolean define un variable intermedia interna Dummy de tipo booleano e intenta
asignarle el valor transferido. Si la asignación es posible, la función devuelve True. En caso
contrario se genera un error de ejecución que la función de prueba intercepta para devolver un
error.
En StarOffice Basic, si una cadena contiene un valor no numérico y se asigna a un número, no se genera
un mensaje de error, sino que se transfiere a la variable el valor 0. Este procedimiento es distinto en VBA.
En VBA, la ejecución de una asignación de este tipo activa un error y la implementación del programa
finaliza.
A su vez, la expresión
MiCadena = Chr(13)
garantiza que la cadena MiCadena se inicializará con el valor del número 13 que corresponde a un
salto de línea forzado.
La orden Chr se suele utilizar en los lenguajes Basic para insertar caracteres de control en una
cadena. La asignación
antepone al texto un carácter de tabulador (valor Unicode 9) y pospone un salto de línea forzado
(valor Unicode 13).
Buscar y reemplazar
StarOffice Basic ofrece la función InStr para buscar una cadena parcial contenida dentro de otra
cadena:
El parámetro Cadena búsqueda especifica la cadena que se debe buscar dentro de MiCadena. La
función devuelve un número que contiene la posición en la que aparece por primera vez Cadena
búsqueda dentro de MiCadena. Si desea buscar otras apariciones de la cadena, la función ofrece
también la oportunidad de especificar opcionalmente una posición inicial desde la que StarOffice
Basic comienza la búsqueda. En este caso, la sintaxis de la función es:
En los ejemplos anteriores, InStr no distingue entre caracteres en mayúscula y en minúscula. Para
cambiar el método de búsqueda para que InStr distinga entre mayúsculas y minúsculas,
agregue el parámetro 0, como se muestra en el ejemplo siguiente:
Mediante las funciones de cadena mencionadas, los programadores pueden buscar y reemplazar
una cadena dentro de otra:
Resultado = ""
PosInicial = 1
PosActual = 1
reemplaza tres caracteres por la cadena es a partir de la sexta posición de la cadena MiCadena.
Formato de cadenas
La función Format formatea números como cadenas. Para ello, la función toma como parámetro
una expresión Format y la utiliza como plantilla para dar formato a los números. Cada uno de los
comodines de la plantilla garantiza que el elemento correspondiente adquirirá el formato
adecuado en el valor de salida. Los cinco comodines más importantes en una plantilla son el cero
(0), el signo de almohadilla (#), el punto (.), la coma (,) y el signo de dólar ($).
En una plantilla, el carácter cero garantiza que un número se sitúe siempre en el punto
correspondiente. Si no se proporciona un número, en su lugar aparece 0.
El punto simboliza el signo de decimales definido por el sistema operativo en la configuración
regional.
En el ejemplo siguiente se muestra de qué forma los caracteres cero y punto pueden definir los
dígitos que aparecen después del signo decimal en una expresión:
MiFormato = "0.00"
De forma similar, se pueden agregar ceros precediendo a un número hasta adquirir la longitud
deseada:
MiFormato = "0000.00"
La coma representa el carácter utilizado por el sistema operativo como separador de miles y el signo
de almohadilla corresponde a un dígito o lugar que sólo se muestra si la cadena de entrada lo
requiere.
MiFormato = "#,##0.00"
En el lugar del comodín signo de dólar, la función Format muestra el símbolo de moneda
correspondiente definido por el sistema:
Las instrucciones de formato que VBA utiliza para fechas y horas no se admiten en StarOffice Basic.
Fechas y horas
StarOffice Basic ofrece el tipo de datos Date , que guarda los detalles de fecha y hora en formato
binario.
MiFecha = "1.1.2002"
Los parámetros de la función deben estar en el orden: año, mes, día. La función garantiza que la
asignación es el valor correcto, independientemente de la configuración específica del país
La función TimeSerial formatea las horas igual que la función DateSerial las fechas:
Estas. funciones extraen las secciones de fecha u hora de una variable de tipo Date especificada. El
ejemplo
La función Weekday devuelve el número del día de la semana correspondiente a la fecha indicada:
Archivos y directorios
El trabajo con archivos representa una de las tareas básicas de una aplicación. La API de StarOffice
ofrece una amplia gama de objetos que permiten crear, abrir y modificar documentos de Office.
Dichas funciones se comentan en detalle en el capítulo 4. A pesar de ello, en ciertos casos se deberá
StarOffice 6.x ha dejado de incorporar algunas funciones de archivos y directorios específicas de DOS o
las ha limitado. Por ejemplo, no se admiten las funciones ChDir, ChDrive y CurDir. Ciertas
propiedades específicas de DOS ya no se utilizan en las funciones que aceptan como parámetros
propiedades de archivos (por ejemplo, para diferenciar entre archivos ocultos y archivos de sistema). Este
cambio ha sido necesario para garantizar la máxima independencia de la plataforma de StarOffice.
Administración de archivos
Búsqueda en directorios
En StarOffice Basic, la función Dir es responsable de buscar archivos y subdirectorios dentro de
directorios. La primera vez que se solicita, es necesario asignarle como primer parámetro una cadena
con la ruta de los directorios en los que se debe buscar. El segundo parámetro de Dir especifica el
archivo o directorio que se debe buscar. StarOffice Basic devuelve el nombre de la primera entrada
de directorio encontrada. Para recuperar la siguiente entrada deberá llamar a la función Dir sin
parámetros. Si la función Dir no encuentra más entradas, devolverá una cadena vacía.
En el ejemplo siguiente se muestra cómo se puede utilizar la función Dir para solicitar todos los
archivos contenidos en un directorio. El procedimiento guarda los nombres de archivo individuales
en la variable TodosLosArchivos y luego la muestra en un cuadro de mensaje.
Sub MostrarArchivos
Dim SiguienteArchivo As String
Dim TodosLosArchivos As String
TodosLosArchivos = ""
SiguienteArchivo = Dir("C:\", 0)
MsgBox TodosLosArchivos
End Sub
El 0 utilizado como segundo parámetro de la función Dir garantiza que ésta devolverá
únicamente nombres de archivo e ignorará los directorios. Se pueden especificar los parámetros
siguientes:
16 : subdirectorios
El ejemplo siguiente es prácticamente idéntico al anterior, pero la función Dir recibe como
parámetro el valor 16 que indica que devuelva los directorios de una carpeta en lugar de los
nombres de archivo.
A diferencia de VBA, al llamar a la función Dir en StarOffice Basic con el parámetro 16, dicha función
devuelve únicamente los subdirectorios de una carpeta. (En VBA, la función devuelve también los
nombres de los archivos estándar, por lo que es necesario una comprobación posterior para recuperar
únicamente los directorios).
Las opciones que VBA ofrece para buscar específicamente archivos con las propiedades oculto, sistema,
archivo y nombre de volumen no existe en StarOffice Basic, debido a que las funciones de sistemas de
archivos correspondientes no están disponibles en todos los sistemas operativos.
En las especificaciones de ruta indicadas en Dir se pueden utilizar los comodines * y ?, tanto en VBA
como en StarOffice Basic. No obstante, en StarOffice Basic, el comodín * sólo puede ser el último
carácter de un nombre de archivo o de una extensión; éste no es el caso en VBA.
MkDir ("C:\SubDir1")
Esta función crea directorios y subdirectorios. Si es necesario se pueden crear todos los directorios
dentro de una jerarquía. Por ejemplo, si sólo existe el directorio C:\SubDir1, la llamada
MkDir ("C:\SubDir1\SubDir2\SubDir3\")
RmDir ("C:\SubDir1\SubDir2\SubDir3\")
En VBA, RmDir genera un mensaje de error en el caso de que el directorio contenga un archivo. En StarOffice
Basic se borran el directorio y todos los archivos que contenga.
FileCopy(Origen, Destino)
La llamada
Kill(NombreArchivo)
borra el archivo NombreArchivo. Si desea borrar todo un directorio (incluidos sus archivos)
utilice la función RmDir.
If FileExists(NombreArchivo) Then
MsgBox "el archivo existe."
End If
16 : nombre de un directorio
El ejemplo
MascaraArchivo = GetAttr("prueba.txt")
MsgBox DescripcionArchivo
Los indicadores que se utilizan en VBA para consultar las propiedades del archivo, oculto, sistema,
archivo y nombre de volumen, no se admiten en StarOffice Basic, ya que son específicos de Windows y
no están disponibles en otros sistemas operativos, o lo están sólo de modo parcial.
SetAttr("prueba.txt", 1)
se puede utilizar para asignar a un archivo el estado de sólo lectura. Si un archivo es de sólo
lectura, se puede suprimir dicho estado mediante la llamada:
SetAttr("prueba.txt", 0)
La función FileLen determina la longitud de un archivo en bytes (en forma de un valor de tipo
entero largo).
NombreArchivo es una cadena que contiene el nombre del archivo. NumArchivo es el manejador
creado por la función FreeFile.
Una vez abierto el archivo, la instrucción Print puede describirse línea por línea:
Una vez completado el proceso de escritura, se debe cerrar el archivo mediante una llamada a Close:
Close #NumArchivo
eof(NumArchivo)
Loop
Msgbox Mensaje
Presentación de mensajes
MsgBox muestra un cuadro de información simple con uno o más botones. En su variante más
sencilla
0: botón Aceptar
4: botones Sí y No
5: botones Reintentar y Cancelar
Para establecer un botón como predeterminado, sume uno de los valores siguientes al valor del
parámetro de la lista de selecciones de botones. Por ejemplo, para crear los botones Sí, No y
Cancelar (valor 3) y que Cancelar sea el botón predeterminado (valor 512), el valor del parámetro
deberá ser 3 + 512 = 515.
Finalmente, se dispone de los siguientes símbolos de información que pueden mostrarse sumando
los valores relevantes:
La llamada
muestra un cuadro de información con los botones Sí y no (valor 4), siendo el segundo de ellos (no)
el valor predeterminado (valor 256); el cuadro contiene además un signo de interrogación (valor
32), 4+256+32=292
Si un cuadro de información contiene varios botones, se debe consultar el valor de retorno para
determinar el botón pulsado. Los valores de retorno disponibles en este caso son los siguientes:
1: Aceptar
2: Cancelar
4: Reintentar
5: Ignorar
6: Sí
7: No
Aparte del texto de información y del parámetro para organizar el cuadro de información, MsgBox
permite especificar un tercer parámetro que define el texto del título del cuadro:
un texto de información,
Otras funciones
Beep
La función Beep hace que el sistema emita un sonido que se puede utilizar para advertir al usuario
de una acción incorrecta. Beep no tiene ningún parámetro:
NombreRuta define la ruta del programa que se debe ejecutar. EstiloVentana define la ventana
en la que se inicia el programa. Se pueden especificar los valores siguientes:
Wait
La función Wait interrumpe la ejecución del programa durante un tiempo especificado. El período
de espera se debe indicar en milisegundos. La orden
Wait 2000
Environ
La función Environ devuelve las variables de entorno del sistema operativo. En función del
sistema y de la configuración, dichas variables almacenan diversos tipos de datos. La llamada
Dim DirTemporal
DirTemporal=Environ ("TEMP")
determina las variables de entorno del directorio temporal del sistema operativo.
En este capítulo se explica el uso de la API de StarOffice Basic en StarOffice Basic con la ayuda de
UNO y se describen los conceptos principales de UNO desde el punto de vista del programador de
StarOffice Basic. En los siguientes capítulos se detalla el trabajo con las diversas partes de la API de
StarOffice.
Puesto que StarOffice Basic es un lenguaje de programación por procedimientos, ha sido necesario
agregarle diversas construcciones lingüísticas que hagan posible el uso de UNO.
Para poder utilizar un Objeto de red universal en StarOffice Basic, se necesita una declaración de
variables para el objeto asociado; ésta se efectúa mediante la instrucción Dim (consulte el capítulo 2).
Se debe utilizar la designación de tipo Object para declarar una variable de objeto:
La variable de objeto creada se debe inicializar para poder utilizarla. Para ello se emplea la función
createUnoService:
Obj = createUnoService("com.sun.star.frame.Desktop")
Esta llamada asigna a la variable Obj una referencia al objeto recién creado.
com.sun.star.frame.Desktop parece un tipo de objeto; sin embargo, en la terminología de
UNO, no se denomina tipo sino •gservicio•h
gservicio•h. De acuerdo con la filosofía de UNO, Obj se describe
65
como una referencia a un objeto que admite el servicio com.sun.star.frame.Desktop. El
gservicio•h utilizado en StarOffice Basic se corresponde por tanto con los términos tipo y
término •gservicio•h
clase empleados en otros lenguajes de programación.
No obstante, hay una diferencia importante: un Objeto de red universal puede admitir varios
servicios simultáneamente que, a su vez, pueden admitir otros servicios de forma que un único
objeto proporciona una amplia gama de servicios. Por ejemplo, es posible que el objeto
mencionado anteriormente, basado en el servicio com.sun.star.frame.Desktop, incluya
también otros servicios para cargar documentos o finalizar un programa.
Mientras que la estructura de un objeto en VBA la define la clase a la que pertenece, en StarOffice Basic
son los servicios que el objeto admite los que definen dicha estructura. Un objeto de VBA tiene asignada
siempre una única clase. En cambio, un objeto de StarOffice Basic puede admitir varios servicios.
Propiedades y métodos
Un objeto de StarOffice Basic ofrece una gama de propiedades y métodos que se pueden llamar a
través del objeto.
Propiedades
Las propiedades son como las propiedades de un objeto; por ejemplo, Filename (nombre de
archivo) y Title (título) para un objeto Document.
Una propiedad, igual que una variable normal, tiene un tipo que define los valores que puede
almacenar. Las propiedades Filename y Title indicadas son de tipo cadena de caracteres.
Document.Save()
Los métodos, igual que las funciones, pueden llevar asociados parámetros y valores de retorno. La
sintaxis de las llamadas a métodos es similar a la de las funciones clásicas. La llamada
Ok = Document.Save(True)
especifica también el parámetro True para el objeto de documento al solicitar el método Save. Una
vez finalizado el método, Save guarda un valor de retorno en la variable Ok.
com.sun.star.frame.Desktop
Algunas de las principales interfaces se utilizan con tanta frecuencia que vuelven a aparecer al
final de este capítulo, asociadas a distintos servicios.
El método supportsService
Algunos de los objetos UNO admiten el método supportsService que permite establecer si un
objeto admite un servicio específico o no. La llamada
Ok = TextElement.supportsService("com.sun.star.text.Paragraph")
Propiedades de depuración
Todos los objetos UNO de StarOffice Basic saben qué propiedades, métodos e interfaces contienen.
Dichos objetos contienen propiedades que devuelven una lista de estos métodos, interfaces y
propiedades. Las propiedades correspondientes son:
DBG_properties : devuelve una cadena que contiene todas las propiedades de un objeto
DBG_methods : devuelve una cadena que contiene todos los métodos de un objeto
DBG_supportetInterfaces : devuelve una cadena que contiene todas las interfaces admitidas
por un objeto.
MsgBox Obj.DBG_Propierties
MsgBox Obj.DBG_methods
Cuando utilice DBG_properties, tenga en cuenta que la función devuelve todas las propiedades
que un servicio específico puede potencialmente admitir. No obstante, no se garantiza que el objeto
pueda utilizarlas. Antes de hacer una llamada a las propiedades se deberá utilizar la función
IsEmpty para comprobar si están disponibles.
http://api.openoffice.org/common/ref/com/sun/star/module-ix.html
Interfaz com.sun.star.lang.XMultiServiceFactory
Los objetos dependientes del contexto se suelen crear mediante un método de objeto del que
dependen. El método createInstance, definido en la interfaz XMultiServiceFactory, se
utiliza específicamente en los objetos de documento.
El objeto de dibujo mencionado arriba se podría crear, por ejemplo, de la siguiente forma a partir
de un objeto de hoja de cálculo:
FormaRectangular = _
Spreadsheet.createInstance("com.sun.star.drawing.RectangleShape")
Interfaz com.sun.star.container.XNameAccess
En ejemplo de uso de XNameAccess lo ofrece el objeto de hoja de una hoja de cálculo; éste
combina todas las páginas que contiene aquélla. Para acceder a las páginas individuales se utiliza
el método getByName de XNameAccess:
Hojas = Spreadsheet.Sheets
Hoja = Sheets.getByName("Hoja1")
El método getElementNames proporciona una lista con los nombres de todos los elementos.
Devuelve como resultado un campo de datos que contiene dichos nombres. En el ejemplo siguiente
se muestra cómo se pueden determinar y mostrar los nombres de los elementos en un bucle:
Hojas = Spreadsheet.Sheets
NombresHojas = Sheets.getElementNames
El método hasByName de la interfaz XNameAccess revela si dentro del objeto básico hay un
objeto subordinado con un nombre específico. En el ejemplo siguiente se muestra, por tanto, un
mensaje en el que se informa al usuario si el objeto Spreadsheet contiene una página con el
nombre Hoja1.
Hojas = Spreadsheet.Sheets
If Hojas.HasByName("Hoja1") Then
MsgBox " Hoja1 está disponible"
Else
MsgBox " Hoja1 no está disponible"
End If
FamiliasDeEstilos = Textdoc.StyleFamilies
EstilosDeParrafo = StyleFamilies.getByName("ParagraphStyles")
EstilosDeParrafo.insertByName("EstiloNuevo", EstiloNuevo)
EstilosDeParrafo.replaceByName("EstiloQueSeModifica", EstiloNuevo)
EstilosDeParrafo.removeByName("EstiloAntiguo")
Interfaz com.sun.star.container.XIndexAccess
XIndexAccess ofrece los métodos getByIndex y getCount para llamar a los objetos
subordinados. getByIndex proporciona un objeto con un índice específico. getCount devuelve
el número de objetos disponibles.
Hojas = Spreadsheet.Sheets
For I = 0 to Hojas.getCount() - 1
Hoja = Hojas.getByIndex(I)
' Editar hoja
Next I
Interfaz com.sun.star.container.XIndexContainer
La interfaz XIndexContainer ofrece las funciones insertByIndex y removeByIndex. Los
parámetros están estructurados de la misma forma que las funciones correspondientes de
XNameContainer.
EnumeracionDeParrafos = Textdoc.Text.createEnumeration
While EnumeracionDeParrafos.hasMoreElements()
Parrafo = ParagraphElements.nextElement()
Wend
El objeto StarDesktop
Durante el trabajo con documentos, dos son los servicios que se utilizan con mayor frecuencia:
El servicio com.sun.star.frame.Desktop, similar al servicio de núcleo de StarOffice.
Ofrece las funciones del objeto marco de StarOffice que abarca todas las ventanas del
documento. Este servicio permite asimismo crear, abrir e importar objetos.
El servicio com.sun.star.document.OfficeDocument proporciona la funcionalidad
básica para los objetos de documento individuales. Dicho servicio contiene los métodos
utilizados para guardar, exportar e imprimir documentos.
El servicio com.sun.star.frame.Desktop se abre automáticamente al iniciar StarOffice. Para
ello, StarOffice crea un objeto al que se puede acceder mediante el nombre global StarDesktop.
La interfaz más importante del objeto StarDesktop es com.sun.star.frame.
XComponentLoader que incluye básicamente el método loadComponentFromURL, responsable
de crear, importar y abrir documentos.
El nombre del objeto StarDesktop procede de StarOffice 5 que incluía todas las variables de documento en
una aplicación común denominada StarDesktop. En la versión actual de StarOffice ya no se usa un
StarDesktop visible. No obstante, se ha conservado el nombre StarDesktop para el objeto marco de
StarOffice debido a que indica claramente que se trata de un objeto básico para la totalidad de la aplicación.
El objeto StarDesktop adquiere el papel de sucesor del objeto Application de StarOffice 5 que se
consideraba anteriormente el objeto raíz. Sin embargo, a diferencia del antiguo objeto Application ,
StarDesktop es principalmente responsable de abrir documentos nuevos. Las funciones de control del
aspecto en pantalla de StarOffice Basic que residían en el objeto Application (por ejemplo,
FullScreen, FunctionBarVisible, Height, Width, Top, Visible) han dejado de utilizarse.
73
Información básica acerca de los documentos en StarOffice
Al trabajar con documentos de StarOffice, resulta útil tener en cuenta algunos de los aspectos básicos de la
administración de documentos en StarOffice. Estos aspectos incluyen la estructura de los nombres de
archivo de los documentos de StarOffice, así como el formato en el que se guardan los archivos.
file:///
seguido por la ruta local. Si el nombre del archivo contiene subdirectorios, éstos se separan
mediante una barra, en lugar de la contrabarra utilizada en Windows. La ruta siguiente hace
referencia al archivo prueba.sxw situado en el directorio doc de la unidad C:.
file:///C:/doc/prueba.sxw
Para convertir nombres de archivo locales en URL, StarOffice ofrece la función ConvertToUrl.
Para convertir una URL en un nombre de archivo local, ofrece la función ConvertFromUrl.
MsgBox ConvertToUrl("C:\doc\prueba.sxw")
' proporciona file:///C:/doc/prueba.sxw
MsgBox ConvertFromUrl("file:///C:/doc/prueba.sxw")
' proporciona (en Windows) c:\doc\prueba.sxw
En el ejemplo se convierte un nombre de archivo local en una URL y se muestra ésta en un cuadro
de mensaje. A continuación se convierte una URL en un nombre de archivo local y se muestra
también dicho nombre.
La normativa Internet Standard RFC 1738 en la que se basa esta funcionalidad permite utilizar los
caracteres 0-9, a-z y A-Z. El resto de caracteres se insertan en la URL en forma de códigos de
escape. Para ello se convierten en su valor hexadecimal en el juego de caracteres ISO 8859-1 (ISO-
Latin) y se les antepone un signo de porcentaje. Por consiguiente, un espacio en un nombre de
archivo se convierte en %20 en la URL.
Compresión de archivos
Puesto que XML se basa en archivos de texto estándar, los archivos resultantes suelen ser de gran
tamaño. Por tanto, StarOffice los comprime y los guarda en forma de archivos ZIP.
Una opción del método storeAsURL permite al usuario guardar directamente los archivos XML
originales. Consulte Opciones del método storeAsURL en la página 78.
StarDesktop.loadComponentFromURL(URL, Frame, _
IndicadoresBusqueda, PropiedadesArchivo)
Url = "file:///C:/prueba.sxw"
IndicadoresBusqueda = com.sun.star.frame.FrameSearchFlag.CREATE + _
com.sun.star.frame.FrameSearchFlag.ALL
En el ejemplo siguiente se muestra cómo sustituir el contenido de una ventana abierta con la ayuda
del parámetro Frame y de IndicadoresBusqueda:
IndicadoresBusqueda = com.sun.star.frame.FrameSearchFlag.CREATE + _
com.sun.star.frame.FrameSearchFlag.ALL
Url = "file:///C:/prueba.sxw"
Doc = StarDesktop.loadComponentFromURL(Url, "MiMarco", _
IndicadoresBusqueda, Dummy)
Url = "file:///C:/prueba2.sxw"
Doc = StarDesktop.loadComponentFromURL(Url, "MiMarco", _
IndicadoresBusqueda, Dummy)
En el ejemplo, en primer lugar, se abre el archivo prueba.sxw en una ventana nueva con el
nombre de marco MiMarco. Una vez confirmado el cuadro de mensaje, se sustituye el contenido
de la ventana por el archivo prueba2.sxw.
Url = "file:///C:/csv.doc"
PropiedadesArchivo(0).Name = "FilterName"
PropiedadesArchivo(0).Value = "scalc: Text - txt - csv (StarOffice Calc)"
Otra posibilidad, en el caso de necesitar únicamente un documento vacío sin ninguna adaptación,
es especificar una URL private:factory:
Dim Dummy()
Dim Url As String
Dim Doc As Object
Url = "private:factory/swriter"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())
Objetos documento
La función loadComponentFromURL presentada en la sección anterior devuelve un objeto
documento. Éste admite el servicio com.sun.star.document.OfficeDocument que, a su vez,
proporciona dos interfaces principales:
Al cambiar a StarOffice 6 verá que el ámbito funcional de los objetos documento no ha cambiado en
general. Por ejemplo, los objetos documento siguen proporcionando métodos para guardar e imprimir
documentos. Sin embargo, los nombres y parámetros de los métodos han cambiado.
Doc.store()
Url = "file:///C:/prueba3.sxw"
Doc.storeAsURL(URL, Dummy())
El código para guardar un documento se puede ampliar con estas opciones, de forma que sólo se
guarde si el objeto se ha modificado y sólo se solicite el nombre de archivo si es necesario:
If (Doc.isModified) Then
If (Doc.hasLocation And (Not Doc.isReadOnly)) Then
Doc.store()
Else
Doc.storeAsURL(URL, Dummy())
End If
End If
En el ejemplo siguiente se muestra cómo se puede utilizar la opción Overwrite en conjunción con
storeAsURL:
Url = "file:///c:/prueba3.sxw"
PropiedadesArchivo(0).Name = "Overwrite"
PropiedadesArchivo(0).Value = True
Doc.storeAsURL(Url, PropiedadesArchivo())
Impresión de documentos
De forma similar al proceso de guardar, los documentos se imprimen directamente a través del
objeto documento. Para ello se incluye el método print de la interfaz
com.sun.star.view.Xprintable. En su forma más sencilla, la llamada a print es:
Dim Dummy()
Doc.print(Dummy())
Collate (booleano): indica a la impresora que intercale las páginas de las copias.
Sort (booleano) : ordena las páginas cuando se imprimen varias copias (CopyCount > 1).
Pages (String): contiene la lista de las páginas que se deben imprimir (la sintaxis es la
misma que se usa en el diálogo de imprimir).
PropiedadesImpresion(0).Name="Pages"
PropiedadesImpresion(0).Value="1-3; 7; 9"
Doc.print(PropiedadesImpresion())
En el ejemplo siguiente se muestra cómo cambiar una impresora y establecer el tamaño del papel
mediante la propiedad Printer.
PropiedadesImpresora(0).Name="Name"
PropiedadesImpresora(0).Value="Mi HP Laserjet"
PropiedadesImpresora (1).Name="PaperSize"
PrinterProperties (1).Value=TamanoPapel
Doc.Printer = PropiedadesImpresora()
plantillas de caracteres,
plantillas de párrafo,
plantillas de marco,
plantillas de página
plantillas de numeración
plantillas de celda
plantillas de página
Doc = StarDesktop.CurrentComponent
FamiliasDeEstilos = Doc.StyleFamilies
EstilosDeCelda = StyleFamilies.getByName("CellStyles")
Doc = StarDesktop.CurrentComponent
FamiliasDeEstilos = Doc.StyleFamilies
EstilosDeCelda = StyleFamilies.getByName("CellStyles")
For I = 0 To EstilosDeCelda.Count - 1
EstiloDeCelda = EstilosDeCelda(I)
MsgBox CellStyle.Name
Next I
El bucle agregado muestra los nombres de todos los estilos de celda sucesivamente en un cuadro
de mensaje.
Las propiedades de formato no están en absoluto restringidas a las aplicaciones en las que se
explican, sino que pueden utilizarse de forma universal. Por ejemplo, la mayoría de las
propiedades de página descritas en el capítulo 7 pueden utilizarse tanto en StarOffice Calc como
en StarOffice Writer.
Para obtener más información acerca del trabajo con plantillas consulte la sección Valores
predeterminados de las propiedades de carácter y de párrafo en el capítulo 6, Documentos de
texto:.
6 Documentos de texto:
Aparte de cadenas de caracteres puras, los documentos de texto contienen también información de
formato que puede aparecer en cualquier lugar del texto. En el caso de las tablas, la estructura es
mucho más complicada, ya que éstas no sólo contienen cadenas unidimensionales, sino también
campos bidimensionales. La mayoría de los programas de procesamiento de textos ofrecen
también la opción de insertar objetos de dibujo, marcos de texto y otros objetos dentro de un texto
que pueden estar tanto fuera del flujo de texto como situados en cualquier lugar de la página.
En este capítulo se presentan las interfaces y los servicios fundamentales de los documentos de
texto. La primera sección trata sobre la estructura de los documentos de texto y el uso de los
programas en StarOffice Basic para efectuar tareas iterativas en un documento de StarOffice. Se
centra en párrafos, fragmentos de párrafo y su formato.
La segunda sección trata sobre el trabajo eficiente con documentos de texto para el que StarOffice ofrece
varios objetos de ayuda, como TextCursor, que se añaden a los especificados en la primera sección.
La tercera sección trata de otros temas distintos al trabajo con textos; se centra en las tablas, marcos
de texto, marcadores, listas de contenidos, etc.
La información sobre cómo crear, abrir, guardar e imprimir documentos se describe en el capítulo 5,
ya que no sólo es válida para los documentos de texto, sino para otros tipos de documentos.
el texto en sí
plantillas para el formato de caracteres, párrafos y páginas
Esta sección se centra especialmente en el texto y en las opciones de formato asociadas con aquél.
El diseño de la API de StarOffice 6.x para StarOffice Writer es distinto de la versión anterior. La versión
antigua de la API estaba centrada en el trabajo con el objeto Selection, claramente orientado hacia la
idea de la interfaz de usuario para usuarios finales, basado en resaltar mediante el ratón.
La API de StarOffice 6.x ha reemplazado estas conexiones entre las interfaces del usuario y del programador.
Por tanto, éste puede acceder en paralelo a todas las partes de una aplicación y trabajar con objetos de
distintas subsecciones de un documento al mismo tiempo. El antiguo objeto Selection ya no está disponible.
83
Párrafos y fragmentos de párrafo
El núcleo de un documento de texto lo constituye una serie de párrafos sin nombre ni índice, por lo
que no hay posibilidad de acceder directamente a los párrafos individuales; no obstante, se pueden
recorrer secuencialmente con la ayuda del objeto Enumeration descrito en el capítulo 4. Esto
permite editar los párrafos.
Cuando se trabaja con el objeto Enumeration se debe tener en cuenta una característica especial:
no sólo devuelve párrafos, sino también tablas (estrictamente, en StarOffice Writer, una tabla es un
tipo especial de párrafo). Para poder acceder a un objeto devuelto se debe comprobar si éste
admite el servicio com.sun.star.text.Paragraph para párrafos o el servicio
com.sun.star.text.TextTable para tablas.
If ElementoTexto.supportsService("com.sun.star.text.TextTable") Then
MsgBox "El bloque actual contiene una tabla."
End If
If ElementoTexto.supportsService("com.sun.star.text.Paragraph") Then
MsgBox "El bloque actual contiene un párrafo."
End If
Wend
En el ejemplo se crea un objeto documento Doc que hace referencia al documento de StarOffice
actual. Con la ayuda de Doc se crea un objeto Enumeration que recorre las partes individuales
del texto (párrafos y tablas) y asigna el elemento actual al objeto ElementoTexto. El ejemplo
utiliza el método supportsService para comprobar si ElementoTexto es un párrafo o una
tabla para mostrar el mensaje correspondiente.
Párrafos
El servicio com.sun.star.text.Paragraph ofrece acceso al contenido de un párrafo. El texto
del párrafo se puede recuperar y modificar mediante la propiedad String:
Doc = StarDesktop.CurrentComponent
Enum = Doc.Text.createEnumeration
While Enum.hasMoreElements
ElementoTexto = Enum.nextElement
If ElementoTexto.supportsService("com.sun.star.text.Paragraph") Then
TextElement.String = Replace(TextElement.String, "dos", "2")
TextElement.String = Replace(TextElement.String, "tres", "3")
TextElement.String = Replace(TextElement.String, "cuatro", "4")
End If
Wend
En el ejemplo se abre el documento de texto actual y se recorre con la ayuda del objeto Enumeration.
Se utiliza la propiedad TextElement.String en todos los párrafos para acceder a los párrafos
pertinentes y se sustituyen las cadenas dos, tres y cuatro por los caracteres 2, 3 y 4. La función
Replace que se utiliza para la sustitución no está dentro del ámbito lingüístico estándar de
StarOffice Basic. Se trata de un uso de la función de ejemplo descrita en el capítulo 3, sección
Buscar y reemplazar.
El contenido del procedimiento descrito aquí para acceder a los párrafos de un texto se puede comparar
con la lista Paragraphs, utilizada en VBA, que se encuentra en los objetos Range y Document de VBA.
Mientras que, en VBA, se accede a los párrafos por su número (por ejemplo, mediante la llamada
Paragraph(1)), en StarOffice Basic se debe utilizar el objeto Enumeration descrito anteriormente.
Las listas Characters, Sentences y Words de VBA no tienen una contrapartida directa en StarOffice
Basic. Sí existe la opción de cambiar a un objeto TextCursor (cursor de texto) que permite desplazarse
en el nivel de caracteres, frases y palabras (consulte El objeto TextCursor).
Partes de párrafos
El ejemplo anterior puede modificar el texto según se solicite, pero a veces también puede destruir
el formato.
El motivo es que un párrafo consta a su vez de subobjetos individuales cada uno de ellos con su
propia información de formato. Si un párrafo, por ejemplo, contiene una palabra en negrita, el
párrafo se representará en StarOffice en forma de tres fragmentos de párrafo: el fragmento anterior
a la negrita, la palabra en negrita y, finalmente, el fragmento posterior a la negrita, que vuelve a
tener el aspecto normal.
Si se modifica el texto del párrafo mediante la propiedad String del párrafo, StarOffice en primer
lugar borra los fragmentos de párrafo antiguos e inserta un fragmento nuevo. El formato de las
secciones anteriores se pierde.
Para impedirlo, el usuario puede acceder a los fragmentos de párrafo asociados en lugar de al
párrafo entero. Los párrafos proporcionan para ello su propio objeto Enumeration. En el ejemplo
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
End If
Wend
El ejemplo se ejecuta en todo el documento de texto mediante un doble bucle. El bucle exterior hace
referencia a los párrafos del texto. El bucle interior procesa los fragmentos de estos párrafos. El código
de ejemplo modifica el contenido de los fragmentos de párrafo mediante la propiedad String del
fragmento, como sucedía en el ejemplo anterior con los párrafos. Pero, como los fragmentos de párrafo
se editan directamente, su información de formato se conserva al sustituir la cadena.
Formato
Hay diversas formas de dar formato a un texto. La más sencilla es asignar las propiedades de
formato directamente a la secuencia de texto; este procedimiento se denomina formato directo y se
utiliza especialmente con documentos breves, porque es el propio usuario quien asigna los
parámetros de formato mediante el ratón: se puede, por ejemplo, destacar una palabra
determinada de un texto poniéndola en negrita o centrar una línea.
Otra forma de asignar formato al texto es mediante el uso plantillas. Este procedimiento se denomina
formato indirecto y permite al usuario asignar una plantilla predeterminada al fragmento de texto
pertinente; Si el diseño de éste se modifica posteriormente, el usuario no tiene más que modificar la
plantilla y StarOffice cambiará el aspecto de todos los fragmentos de texto que utilizan ésta.
En VBA, las propiedades de formato de un objeto suelen abarcar diversos subobjetos (por ejemplo,
En la antigua API de StarOffice, el formato de un texto se efectuaba esencialmente a través del objeto
Selection y sus objetos subordinados (por ejemplo, Selection.Font, Selection.Paragraph y
Selection.Border). En la API nueva, las propiedades de formato se encuentran en cada objeto
(Paragraph, TextCursor, etc) y pueden aplicarse directamente. A continuación se enumeran las
propiedades de carácter y párrafo disponibles.
Propiedades de carácter
Las propiedades de formato que hacen referencia a caracteres individuales se denominan
propiedades de carácter. Entre éstas se encuentran las negritas y las fuentes. Los objetos que
permitan establecer propiedades de carácter deben admitir el servicio
com.sun.star.style.CharacterProperties. StarOffice reconoce una amplia gama de
servicios que admiten este servicio. Entre ellos se encuentran los servicios para párrafos
com.sun.star.text.Paragraph y los servicios para fragmentos de párrafo
com.sun.star.text.TextPortion.
Las propiedades de párrafo están disponibles en diversos objetos. Todos los objetos que admiten el
servicio com.sun.star.text.Paragraph admiten también las propiedades de párrafo de
com.sun.star.style.ParagraphProperties.
En la referencia de la API de StarOffice se puede consultar una lista completa de las propiedades
de párrafo. Las más comunes son:
NombreArchivo = "c:\texto.html"
NumArchivo = Freefile
Open NombreArchivo For Output As #NumArchivo
Print #NumArchivo, "<HTML><BODY>"
Doc = StarDesktop.CurrentComponent
End If
Wend
La estructura básica del ejemplo está orientada como los ejemplos de recorrido de los fragmentos
de párrafo de un texto comentados con anterioridad. Se han agregado las funciones para escribir el
archivo HTML, así como un código que comprueba el peso de la fuente de los fragmentos de
párrafo correspondientes y escribe fragmentos de párrafo con la etiqueta HTML pertinente.
No es fácil establecer si el formato de una sección del texto es directo o indirecto. Las barras de
símbolos que proporciona StarOffice muestran las propiedades de texto más comunes, como la
fuente, el peso y el tamaño. No obstante, no está del todo claro si la configuración correspondiente
está basada en una plantilla o se ha asignado directamente.
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
FragmentoTexto.setPropertyToDefault("CharWeight")
FragmentoTexto.CharStyleName = "MiNegrita"
End If
Wend
End If
Wend
El objeto TextCursor
Un TextCursor de la API de StarOffice es comparable al cursor visible de un documento de
StarOffice. Marca un punto específico dentro de un documento de texto y puede desplazarse en
todas direcciones mediante órdenes. Sin embargo, los objetos TextCursor disponibles en
StarOffice Basic no deben confundirse con el cursor visible. Se trata de dos cosas muy distintas.
El objeto TextCursor de StarOffice, por ejemplo, ofrece métodos para desplazarse en el texto y modificarlo
que se incluyen en el objeto Range de VBA (por ejemplo, MoveStart, MoveEnd, InsertBefore,
InsertAfter). Las contrapartidas del objeto TextCursor de StarOffice se describen en las próximas
secciones.
Doc = StarDesktop.CurrentComponent
Cursor = TextDocument.Text.createTextCursor()
Cursor.goLeft(10, False)
Cursor.goRight(3, False)
Cursor.goLeft(10, False)
Cursor.goRight(3, True)
primero se mueve diez caracteres hacia la derecha sin destacarlos y luego vuelve hacia atrás tres
caracteres y los destaca. El área destacada por el TextCursor empieza por tanto a partir del
séptimo carácter del texto y finaliza después del décimo.
A continuación se enumeran diversos métodos para editar las áreas destacadas mediante un
TextCursor y que admiten también el servicio com.sun.star.text.TextCursor:
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
Proseguir = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
En el ejemplo se crea en primer lugar un objeto documento para el texto que se acaba de abrir. A
continuación recorre iterativamente todo el texto, frase por frase, destaca todas las primeras
palabras y las formatea en negrita.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
MsgBox Cursor.String
Proseguir = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
De forma similar se puede modificar la primera palabra de cada frase mediante la propiedad
String:
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Do
Cursor.gotoEndOfWord(True)
Cursor.String = "Arr"
Proseguir = Cursor.gotoNextSentence(False)
Cursor.gotoNextWord(False)
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Cursor.goRight(20, False)
Doc.Text.insertControlCharacter(Cursor, _
com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
Una vez creado el SearchDescriptor, éste recibe el texto que se debe buscar:
DescBusqueda.searchString="cualquier texto"
Do While Encontrado
' Editar resultados de búsqueda
Encontrado = Doc.findNext( Encontrado.End, Search)
Loop
El ejemplo busca todas las apariciones mediante un bucle y devuelve un objeto TextRange que
hace referencia al fragmento de texto encontrado.
Doc = StarDesktop.CurrentComponent
DescBusqueda = Doc.createSearchDescriptor
DescBusqueda.SearchString="beneficio"
DescBusqueda.SearchSimilarity = True
DescBusqueda.SearchSimilarityAdd = 2
DescBusqueda.SearchSimilarityExchange = 2
DescBusqueda.SearchSimilarityRemove = 2
DescBusqueda.SearchSimilarityRelax = False
Do While Encontrado
Encontrado.CharWeight = com.sun.star.awt.FontWeight.BOLD
Encontrado = Doc.findNext( Encontrado.End, Search)
Loop
Igual que en la API antigua de StarOffice, en la nueva las operaciones de buscar y reemplazar texto se
efectúan mediante el objeto documento. Mientras que anteriormente existía un objeto denominado
SearchSettings especial para definir las opciones de búsqueda, las búsquedas en el nuevo objeto se
efectúan utilizando un objeto SearchDescriptor, o un objeto ReplaceDescriptor para reemplazar
texto automáticamente. Estos objetos no sólo contienen las opciones, sino también el texto de búsqueda
actual y, si es necesario, el texto sustituto asociado. Los objetos descriptor se crean mediante el objeto
documento, se completan según las necesidades específicas y se devuelven al objeto documento en
forma de parámetros para los métodos de búsqueda.
Dim I As Long
Dim Doc As Object
Dim Reemplazar As Object
Dim PalabrasBritanicas(5) As String
Dim PalabrasEEUU(5) As String
Doc = StarDesktop.CurrentComponent
Reemplazar = Doc.createReplaceDescriptor
For O = 0 To 5
Reemplazar.SearchString = PalabrasBritanicas(I)
Reemplazar.ReplaceString = PalabrasEEUU(I)
Doc.replaceAll(Reemplazar)
Next n
Las expresiones para buscar y reemplazar se establecen mediante las propiedades SearchString
y ReplaceString de los ReplaceDescriptors. El proceso de sustitución en sí se implementa
finalmente mediante el método replaceAll del objeto documento, que sustituye todas las
apariciones de la expresión de búsqueda.
Las expresiones regulares admitidas por StarOffice se describen con detalle en la sección de ayuda
en línea de StarOffice. Éstos son algunos ejemplos:
El carácter $ marca un final de párrafo. Así, se pueden buscar todas las apariciones del nombre
Pedro al final de un párrafo mediante la expresión de búsqueda Pedro$.
El signo * indica que el carácter anterior puede estar repetido cualquier número de veces. Se
puede combinar con el punto como comodín para cualquier carácter. Por ejemplo, la expresión
temp.*a puede significar tanto templanza como temperatura.
En el ejemplo siguiente se muestra cómo suprimir las líneas vacías de un documento de texto con
la ayuda de la expresión regular ^$:
Doc = StarDesktop.CurrentComponent
Reemplazar = Doc.createReplaceDescriptor
Reemplazar.SearchRegularExpression = True
Reemplazar.SearchString = "^$"
Reemplazar.ReplaceString = ""
Doc.replaceAll(Reemplazar)
Gracias a estas características comunes, todos estos objetos de StarOffice admiten un servicio
básico común denominado com.sun.star.text.TextContent con las propiedades siguientes:
Los objetos TextContent comparten también algunos métodos (específicamente, métodos para
crear, insertar y borrar objetos).
Para crear un nuevo objeto TextContent se usa el método createInstance del objeto documento.
Para insertar un objeto se emplea el método insertTextContent del objeto de texto.
Los objetos TextContent se borran mediante el método removeTextContent.
Tablas
En el ejemplo siguiente se crea una tabla con la ayuda del método createInstance descrito
anteriormente.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Tabla = Doc.createInstance("com.sun.star.text.TextTable")
Tabla.initialize(5, 4)
Una vez creada la tabla, se establece el número de filas y columnas solicitado mediante una
llamada a initialize y a continuación se inserta en el documento de texto mediante
insertTextContent.
Como se puede ver en el ejemplo, el método insertTextContent no sólo espera el objeto
Content que se debe insertar, sino dos parámetros más:
un objeto Cursor que determina la posición de inserción
una variable booleana que especifica si el objeto Content debe sustituir la actual selección del
cursor (valor True) o si se debe insertar antes de la selección actual (False)
Al crear e insertar tablas en un documento de texto, StarOffice Basic utiliza objetos similares a los
disponibles en VBA: el objeto documento y un objeto TextCursor en StarOffice Basic o el objeto Range,
la contrapartida en VBA. Mientras que el método Document.Tables.Add asume la tarea de crear y
configurar la tabla en VBA, en StarOffice Basic ésta se crea, como se muestra en el ejemplo anterior,
mediante createInstance y se inicializa e inserta en el documento con insertTextContent.
Las tablas insertadas en un documento de texto se pueden determinar mediante un bucle simple.
Para ello se utiliza el método getTextTables() del objeto documento:
Doc = StarDesktop.CurrentComponent
TablasTexto = Doc.getTextTables()
For I = 0 To TablasTexto.count - 1
Tabla = TablasTexto(I)
Edición de tablas
Una tabla consta de filas individuales que, a su vez, contienen las diversas celdas. Estrictamente, en
StarOffice no hay columnas de tabla. Ésta se generan de forma implícita al disponer las filas (una
debajo de otra) juntas. No obstante, para simplificar el acceso a las tablas, StarOffice ofrece algunos
métodos que funcionan con columnas y que son útiles si la tabla no contiene celdas unidas.
Consideremos en primer lugar las propiedades de la tabla en sí. Éstas se definen en el servicio
com.sun.star.text.TextTable. He aquí una lista de las propiedades más importantes del
objeto tabla:
Filas
Una tabla consiste en una lista de filas. En el ejemplo siguiente se muestra cómo recuperar y dar
formato a las filas de una tabla.
Tabla = Doc.createInstance("com.sun.star.text.TextTable")
Tabla.initialize(5, 4)
Mientras que los métodos getByIndex y getCount están disponibles para todas las tablas, los
métodos insertByIndex y removeByIndex sólo se pueden utilizar en tablas que no contengan
celdas unidas.
Columnas
El acceso a las columnas, como en el caso de las filas, se lleva a cabo mediante los métodos
getByIndex, getCount, insertByIndex y removeByIndex del objeto Column, al que se
accede a través de getColumns. No obstante, dichos métodos sólo pueden emplearse en tablas
que no contengan celdas unidas. En StarOffice Basic no es posible formatear las celdas por
columnas. Para ello se deben formatear las celdas de forma individual.
Celdas
Cada una de las celdas de un documento de StarOffice tiene un nombre exclusivo. Si el cursor de
StarOffice se encuentra en una celda, en la barra de estado se puede leer el nombre de la misma. La
celda superior izquierda se suele denominar A1 y la inferior derecha se suele denominar Xn,
siendo X la letra correspondiente a la última columna y n el número correspondiente a la última
fila. Los objetos celda están disponibles a través del método getCellByName() del objeto tabla.
En el ejemplo siguiente se muestra un bucle que recorre todas las celdas de una tabla y escribe en
cada una de ellas las coordenadas de fila y columna correspondientes.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Tabla = Doc.createInstance("com.sun.star.text.TextTable")
Tabla.initialize(5, 4)
Filas = Tabla.getRows
Columnas = Tabla.getColumns
La celda de una tabla es similar a un texto estándar. Admite la interfaz createTextCursor para
crear un objeto TextCursor asociado.
CursorCelda = Celda.createTextCursor()
Por consiguiente, todas las opciones de formato para caracteres individuales y párrafos están
automáticamente disponibles.
En el ejemplo siguiente se efectúa una búsqueda a través de todas las tablas de un documento de
texto y se aplica el formato alineación derecha a todas las celdas con valores numéricos, mediante
la propiedad de párrafo correspondiente.
Doc = StarDesktop.CurrentComponent
For I = 0 To TablasTexto.count - 1
Tabla = TablasTexto(I)
NombresCelda = Tabla.getCellNames()
For J = 0 to UBound(NombresCelda)
Celda = Tabla.getCellByName(NombresCelda(J))
If IsNumeric(Celda.String) Then
CursorCelda = Celda.createTextCursor()
CursorCelda.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
End If
Next
Next
En el ejemplo se crea una lista TextTables que contiene todas las tablas de un texto que se recorren
en un bucle. StarOffice crea a continuación una lista con los nombres de celda asociados para cada
una de dichas tablas. Las celdas se recorren mediante un bucle. Si una celda contiene un valor
numérico, el ejemplo cambia el formato de la misma. Para ello crea en primer lugar un objeto
TextCursor que hace referencia al contenido de la celda de la tabla y a continuación adapta las
propiedades de párrafo de la celda.
Marcos de texto
Los marcos de texto se consideran objetos TextContent, como las tablas y las imágenes. Pueden
constar esencialmente de texto estándar, pero es posible situarlos en cualquier lugar de la página y
no se incluyen en el flujo del texto.
Como sucede con todos los objetos TextContent, en los marcos de texto se debe distinguir entre
la creación propiamente dicha y la inserción en el documento.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Marco = Doc.createInstance("com.sun.star.text.TextFrame")
El marco de texto se crea mediante el método createInstance del objeto documento. El marco
de texto así creado se puede insertar en el documento mediante el método insertTextContent
del objeto Text. Al hacerlo se debe especificar el nombre del servicio
com.sun.star.text.TextFrame adecuado.
Un objeto Cursor, que se ejecuta también al insertarse, determina la posición de inserción del
marco de texto.
Los objetos marco de texto ofrecen diversas propiedades que afectan a la posición y al
comportamiento del marco. La mayoría de ellas se definen en el servicio
com.sun.star.text.BaseFrameProperties que también admite cada uno de los servicios
TextFrame. Las propiedades fundamentales son:
HoriOrient (const): orientación horizontal del marco de texto (de acuerdo con
com.sun.star.text.HoriOrientation).
VertOrient (const): orientación vertical del marco de texto (de acuerdo con
com.sun.star.text.VertOrientation).
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Marco = Doc.createInstance("com.sun.star.text.TextFrame")
Marco.Width = 3000
Marco.Height = 1000
Marco.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
Marco.TopMargin = 0
Marco.BottomMargin = 0
Marco.LeftMargin = 0
Marco.RightMargin = 0
Marco.BorderDistance = 0
Marco.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Marco.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
Para editar el contenido de un marco de texto, el usuario utiliza el objeto TextCursor, que ya se
ha tratado en numerosas ocasiones y que está también disponible en los marcos de texto.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Marco = Doc.createInstance("com.sun.star.text.TextFrame")
Marco.Width = 3000
Marco.Height = 1000
CursorMarco = Marco.createTextCursor()
CursorMarco.CharWeight = com.sun.star.awt.FontWeight.BOLD
CursorMarco.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
CursorMarco.String = " Esto es una pequeña prueba"
Campos de texto
Los campos de texto son objetos TextContent porque proporcionan caracteres lógicos
adicionales que van más allá del puro texto. Los campos de texto se pueden insertar en un
documento de texto con los mismos métodos utilizados para otros objetos TextContent:
CampoFechaHora = Doc.createInstance("com.sun.star.text.TextField.DateTime")
CampoFechaHora.IsFixed = False
CampoFechaHora.IsDate = True
Doc.Text.insertTextContent(Cursor, CampoFechaHora, False)
En el ejemplo se inserta un campo de texto con la fecha actual al principio del documento de texto
actual. El valor True de la propiedad IsDate hace que se muestre únicamente la fecha, no la
hora. El valor False de IsFixed garantiza la actualización automática de la fecha al abrir el
documento.
Mientras que en VBA el tipo de un campo se especifica mediante un parámetro del método
Document.Fields.Add, el nombre del servicio responsable del tipo de campo en cuestión es el que
lo define en StarOffice Basic.
Anteriormente, el acceso a los campos de texto se efectuaba mediante numerosos métodos que
StarOffice ofrecía a través del antiguo objeto Selection (por ejemplo, InsertField,
DeleteUserField, SetCurField).
En StarOffice 6, el concepto de administración de los campos es orientado al objeto. Para crear un campo
de texto, se debe crear e inicializar en primer lugar un campo de texto utilizando las propiedades
requeridas. A continuación dicho campo de texto se inserta en el documento mediante el método
insertTextContent. En el ejemplo anterior se puede ver un texto fuente correspondiente. En las
secciones siguientes se describen los tipos de campo más importantes y sus propiedades.
Doc = StarDesktop.CurrentComponent
EnumCamposTexto = Doc.getTextFields.createEnumeration
While EnumCamposTexto.hasMoreElements()
CampoTexto = EnumCamposTexto.nextElement()
If CampoTexto.supportsService("com.sun.star.text.TextField.DateTime") Then
MsgBox "Fecha/hora"
ElseIf CampoTexto.supportsService("com.sun.star.text.TextField.Annotation") Then
Wend
El punto de partida para establecer qué campos de texto están presentes es la lista TextFields
del objeto documento. El ejemplo crea un objeto Enumeration a partir de dicha lista que permite
consultar todos los campos de texto uno por uno en un bucle. El servicio admitido por los campos
de texto encontrados se comprueba mediante el método supportsService. Si el campo es de
fecha/hora o de anotación, el tipo del campo se muestra en un cuadro de información. Si, por el
contrario, el ejemplo encuentra un campo de otro tipo, la información que se muestra es •
gdesconocido•h. h.
A continuación se enumeran los tipos de campos de texto más importantes y sus propiedades
asociadas. Para ver una lista completa de todos los campos consulte, en la referencia de la API, el
módulo com.sun.star.text.TextField. (En el nombre de servicio de un campo de texto en
StarOffice Basic se deben usar mayúsculas y minúsculas, como aparecía en el ejemplo anterior.)
com.sun.star.text.TextField.PageCount
com.sun.star.text.TextField.WordCount
com.sun.star.text.TextField.CharacterCount
devuelven el número de páginas, palabras o caracteres de un texto. Admiten la propiedad siguiente:
Página actual
El número de la página actual se puede insertar en un documento mediante el campo de texto
com.sun.star.text.TextField.PageNumber. Se pueden especificar las propiedades siguientes:
Doc = StarDesktop.CurrentComponent
NumeroPagina = Doc.createInstance("com.sun.star.text.TextField.PageNumber")
NumeroPagina.NumberingType = com.sun.star.style.NumberingType.ARABIC
EstilosPagina = Doc.StyleFamilies.getByName("PageStyles")
PaginaEstandar = PageStyles("Default")
PaginaEstandar.FooterIsOn = True
CursorPie = StdPage.FooterTextLeft.Text.createTextCursor()
PaginaEstandar.FooterTextLeft.Text.insertTextContent(CursorPie, NumeroPagina, False)
Para garantizar que la línea de pie de página esté visible, la propiedad FooterIsOn se establece en
True. A continuación se inserta el campo de texto en el documento mediante el objeto de texto
asociado de la línea de pie de la izquierda.
Anotaciones
Los campos de anotación (com.sun.star.text.TextField.Annotation) se indican
mediante un pequeño símbolo amarillo en el texto. Al hacer clic en dicho símbolo se abre un
campo de texto, en el que se puede almacenar un comentario relativo al punto actual del texto. Las
propiedades de un campo de anotación son:
Fecha / hora
Un campo de fecha/hora (com.sun.star.text.TextField.DateTime) representa la fecha o
la hora actuales. Admite las propiedades siguientes:
IsDate (booleano): si es True, el campo muestra la fecha actual; sino, muestra la hora actual.
Level (Integer): determina el nivel del capítulo cuyo nombre o número debe mostrarse. El
valor 0 representa el máximo nivel disponible.
Marcadores
Los marcadores (servicio com.sun.star.text.Bookmark) son objetos TextContent. Los
marcadores se crean e insertan utilizando el concepto descrito anteriormente:
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Marcador = Doc.createInstance("com.sun.star.text.Bookmark")
Marcador.Name = "Mis marcadores"
Doc.Text.insertTextContent(Cursor, Marcador, True)
Para acceder a los marcadores de un texto se utiliza la lista denominada Bookmarks. Se puede
acceder a ellos por número o por nombre.
En este ejemplo se muestra cómo buscar un marcador dentro de un texto y cómo insertar texto en
su posición.
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursorByRange(Marcador.Anchor)
Cursor.String = "Aquí está el marcador"
En este ejemplo se utiliza el método getByName para buscar el marcador requerido a partir de su
nombre. A continuación, la llamada createTextCursorByRange crea un Cursor que se sitúa
en la posición de anclaje del marcador. Finalmente, el cursor inserta en ese punto el texto
requerido.
La segunda sección se centra en cómo editar hojas de cálculo de la forma más eficiente a partir del
concepto de área de celdas y en cómo buscar y reemplazar el contenido de las celdas.
El objeto Range permite designar cualquier área de la tabla; en la nueva API se ha ampliado.
VBA y StarOffice Basic utilizan una terminología distinta para las hojas de cálculo y su contenido. Mientras
que en VBA el objeto documento se denomina Workbook (libro de trabajo) y sus páginas individuales
Worksheets (hojas de trabajo), en StarOffice Basic se denominan SpreadsheetDocument (documento hoja
de cálculo) y Sheet (hoja).
Hojas de cálculo
Se puede acceder a las hojas individuales de un documento mediante la lista Sheets.
En los ejemplos siguientes se muestra cómo acceder a una hoja a través de su número o de su
nombre.
111
Ejemplo 1: acceso a través del número (la numeración empieza en 0)
Doc = StarDesktop.CurrentComponent
Hoja = Doc. Sheets (0)
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets.getByName("Hoja 1")
En el primer ejemplo se accede a la hoja a través de su número (la numeración empieza en 0). En el
segundo ejemplo se accede por su nombre mediante el método getByName.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
If Doc.Sheets.hasByName("MiHoja") Then
Hoja = Doc.Sheets.getByName("MiHoja")
Else
Hoja = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
Doc.Sheets.insertByName("MiHoja", Hoja)
End If
En el ejemplo siguiente se crean dos objetos que hacen referencia a la primera fila y a la primera
columna de una hoja y se almacenan las referencias en las variables de objeto PrimeraColumna y
PrimeraFila.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
PrimeraColumna = Hoja.Columns(0)
PrimeraFila = Hoja.Rows(0)
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
For I = 0 To 4
Fila = Hoja.Rows(I)
Fila.OptimalHeight = True
Next I
Columna = Hoja.Columns(1)
Columna.IsVisible = False
En StarOffice Basic se puede acceder a las listas Rows y Columns mediante un índice. A diferencia de
VBA, el índice de la primera columna es 0 y no 1.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Hoja.Columns.insertByIndex(3, 1)
Hoja.Columns.removeByIndex(5, 1)
Este ejemplo utiliza el método insertByIndex para insertar una columna nueva en la cuarta
posición de la hoja (índice 3; la numeración se inicia en 0). El segundo parámetro especifica el
número de columnas que se debe insertar (en el ejemplo, una).
El método removeByIndex borra la sexta columna (índice 5). De nuevo, el segundo parámetro
especifica el número de columnas que se desea borrar.
Los métodos para insertar y borrar filas utilizan la función objeto Rows de la misma forma que los
métodos para la edición de columnas emplean el objeto Columns.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(0, 0)
Celda.String = "Prueba"
Además de las coordenadas numéricas, cada una de las celdas de una hoja tiene un nombre; por
ejemplo, la celda superior izquierda (0,0) de una hoja de cálculo se denomina A1. La letra A
significa la columna y el número 1 la fila. Es importante no confundir el nombre y la posición de
una celda porque la numeración de las filas empieza en el 1, pero la numeración de la posición
empieza en el 0.
En StarOffice, una celda de una tabla puede estar vacía o contener texto, números o fórmulas. El
contenido almacenado en la celda no determina el tipo de ésta; lo establece la propiedad del objeto
utilizado para introducir aquél. Los números se pueden insertar y recuperar mediante la
propiedad Value, el texto utiliza la propiedad String y las fórmulas la propiedad Formula.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(0, 0)
Celda.Value = 100
Celda = Hoja.getCellByPosition(0, 1)
Celda.String = "Prueba"
Celda = Hoja.getCellByPosition(0, 2)
Celda.Formula = "=A1"
Las propiedades Value, String y Formula reemplazan al método PutCell para establecer los valores
de una celda.
StarOffice trata el contenido de una celda introducido mediante la propiedad String como texto,
aunque dicho contenido sea un número. Los números introducidos de esta forma están alineados a
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(0, 0)
Celda.Value = 100
Celda = Hoja.getCellByPosition(0, 1)
Celda.String = 1000
Celda = Hoja.getCellByPosition(0, 2)
Celda.Formula = "=A1+A2"
MsgBox Celda.Value
Aunque la celda A1 contiene el valor 100 y la celda A2 contiene el valor 1000, la fórmula A1+A2
devuelve el valor 100, debido a que el contenido de la celda A2 se ha introducido como cadena, no
como número.
Para comprobar si una celda contiene un número o una cadena, utilice la propiedad Type:
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(1,1)
Celda.Value = 1000
FORMULA: fórmula
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
DireccionAreaCeldas.Sheet = 0
DireccionAreaCeldas.StartColumn = 1
DireccionAreaCeldas.StartRow = 1
DireccionAreaCeldas.EndColumn = 2
DireccionAreaCeldas.EndRow = 2
Hoja.insertCells(DireccionAreaCeldas, com.sun.star.sheet.CellInsertMode.DOWN)
En este ejemplo se inserta un área de celdas de dos filas por dos columnas en la segunda columna
y fila (ambas identificadas por el número 1) de la primera hoja (número 0) de la hoja de cálculo.
Los posibles valores del área de celdas especificada se desplazan hacia abajo.
Para definir el área de celdas que se desee insertar se utiliza la estructura com.sun.star.table.
CellRangeAddress. En esta estructura se incluyen los siguientes valores:
StartColumn (long): primera columna del área de celdas (la numeración se inicia en 0).
StartRow (long): primera fila del área de celdas (la numeración se inicia en 0).
EndColumn (long): última columna del área de celdas (la numeración se inicia en 0).
EndRow (long): última fila del área de celdas (la numeración se inicia en 0).
RIGHT: las celdas situadas en la posición de inserción y a la derecha de ésta se desplazan hacia
la derecha.
ROWS: las celdas situadas después de la posición de inserción se desplazan hacia abajo.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
DireccionAreaCeldas.Sheet = 0
DireccionAreaCeldas.StartColumn = 1
DireccionAreaCeldas.StartRow = 1
DireccionAreaCeldas.EndColumn = 2
DireccionAreaCeldas.EndRow = 2
Hoja.removeRange(DireccionAreaCeldas, com.sun.star.sheet.CellDeleteMode.UP)
En este ejemplo se suprime de la hoja el área de celdas B2:C3 y las celdas de debajo de dicha área
se desplazan hacia arriba dos filas. El tipo de supresión se define mediante uno de los siguientes
valores de la enumeración com.sun.star.sheet.CellDeleteMode:
UP: las celdas situadas en la posición de inserción y debajo de ella se desplazan hacia arriba.
LEFT: las celdas situadas en la posición de inserción y a la derecha de ésta se desplazan hacia la
izquierda.
ROWS: las celdas situadas después de la posición de inserción se desplazan hacia arriba.
Doc = StarDesktop.CurrentComponent
DireccionAreaCeldas.Sheet = 0
DireccionAreaCeldas.StartColumn = 1
DireccionAreaCeldas.StartRow = 1
DireccionAreaCeldas.EndColumn = 2
DireccionAreaCeldas.EndRow = 2
DireccionCelda.Sheet = 0
DireccionCelda.Column = 0
DireccionCelda.Row = 5
Hoja.moveRange(DireccionCelda, DireccionAreaCeldas)
El método moveRange siempre sobrescribe el contenido de las celdas del área de destino.
A diferencia del método InsertCells, el método removeRange no proporciona un parámetro
para efectuar desplazamientos automáticos.
El método copyRange funciona de la misma forma que el método moveRange, salvo que
copyRange inserta una copia del área de celdas en lugar de desplazarla.
Formato
Los documentos hoja de cálculo proporcionan métodos y propiedades para dar formato a celdas y
páginas.
Propiedades de la celda
Las opciones de formato de celdas son abundantes; por ejemplo, especificar el tipo de fuente del texto y
su tamaño. Las celdas admiten los servicios com.sun.star.style.CharacterProperties y
com.sun.star.style.ParagraphProperties cuyas .principales propiedades se describen en
el capítulo 6 (Documentos de texto:). Los formatos de celda especiales los gestiona el servicio
com.sun.star.table.CellProperties. Las principales propiedades de este servicio se
describen en las próximas secciones.
Las propiedades especificadas se pueden aplicar a celdas individuales y a áreas de celdas.
En el ejemplo siguiente se escribe el número 1000 en la celda B2, se cambia el color de fondo a rojo
mediante la propiedad CellBackColor y se crea una sombra de color gris claro que se desplaza 1
mm hacia la izquierda y hacia abajo.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(1,1)
Celda.Value = 1000
Celda.CellBackColor = RGB(255, 0, 0)
FormatoSombra.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT
FormatoSombra.ShadowWidth = 100
FormatoSombra.Color = RGB(160, 160, 160)
Celda.ShadowFormat = FormatoSombra
Justificación
StarOffice ofrece diversas funciones para modificar la justificación de un texto en una celda.
Las propiedades siguientes definen la justificación horizontal y vertical de un texto:
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(1,1)
Celda.Value = 1000
Celda.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT
Celda.VertJustify = com.sun.star.table.CellVertJustify.TOP
Celda.Orientation = com.sun.star.table.CellOrientation.STACKED
FormatosNumericos = Doc.NumberFormats
Los formatos se especifican mediante una cadena de formato de estructura similar a la función de
formato de StarOffice Basic. No obstante, hay una diferencia fundamental: mientras que el formato
de la orden espera abreviaturas inglesas y puntos o caracteres decimales como separadores de
miles, se deben utilizar las abreviaturas específicas del país en la estructura del formato de la
orden para el objeto NumberFormats.
En el ejemplo siguiente se da formato a la celda B2 de modo que los números se muestren con tres
decimales y se utilice la coma como separador de miles.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
Celda = Hoja.getCellByPosition(1,1)
Celda.Value = 23400.3523565
ConfiguracionLocal.Language = "en"
ConfiguracionLocal.Country = "us"
FormatosNumericos = Doc.NumberFormats
CadenaFormatoNumerico = "#,##0.000"
MsgBox IdFormatoNumerico
Celda.NumberFormat = IdFormatoNumerico
El diálogo Formatear celdas de StarOffice Calc proporciona una visión general de las diversas
opciones del formato de celdas.
Propiedades de la página
Las propiedades de la página son las opciones de formato que sirven para situar el contenido del
documento en una página, así como los elementos visuales que se repiten en todas las páginas.
Incluyen:
Márgenes de la página
Encabezamientos y pies de página.
Fondo de la página
El servicio com.sun.star.style.PageProperties define las siguientes propiedades del
fondo de la página:
BackGraphicFilter (String): nombre del filtro para interpretar la imagen del fondo
Formato de la página
El formato de la página se define utilizando las propiedades siguientes del servicio
com.sun.star.style.PageProperties:
En el ejemplo siguiente se establece el tamaño del papel del estilo de página "Default" en el
formato DIN A5 horizontal (altura 14,8 cm, ancho 21 cm):
Doc = StarDesktop.CurrentComponent
FamiliasDeEstilos = Doc.StyleFamilies
EstilosDePagina = StyleFamilies.getByName("PageStyles")
PaginaPredeterminada = PageStyles.getByName("Default")
PaginaPredeterminada.IsLandscape = True
PaginaPredeterminada.Width = 21000
PaginaPredeterminada.Height = 14800
En el ejemplo siguiente se establecen en 1 centímetro los bordes izquierdo y derecho del estilo de
página "Default".
Doc = StarDesktop.CurrentComponent
FamiliasDeEstilos = Doc.StyleFamilies
EstilosDePagina = StyleFamilies.getByName("PageStyles")
PaginaPredeterminada = PageStyles.getByName("Default")
PaginaPredeterminada.LeftMargin = 1000
HeaderLeftBorder (struct): detalles del borde izquierdo del marco que rodea al
encabezamiento (estructura com.sun.star.table.BorderLine)
HeaderRightBorder (struct): detalles del borde derecho del marco que rodea al
encabezamiento (estructura com.sun.star.table.BorderLine)
HeaderTopBorder (struct): detalles del borde superior del marco que rodea al
encabezamiento (estructura com.sun.star.table.BorderLine)
HeaderBottomBorder (struct): detalles del borde inferior del marco que rodea al
encabezamiento (estructura com.sun.star.table.BorderLine)
FooterLeftBorder (struct): detalles de la línea izquierda del marco que rodea al pie de
página (estructura com.sun.star.table.BorderLine)
FooterRightBorder (struct): detalles de la línea derecha del marco que rodea al pie de
página (estructura com.sun.star.table.BorderLine)
FooterTopBorder (struct): detalles de la línea superior del marco que rodea al pie de
página (estructura com.sun.star.table.BorderLine)
FooterBottomBorder (struct): detalles de la línea inferior del marco que rodea al pie de
página (estructura com.sun.star.table.BorderLine)
Si no necesita distinguir entre los encabezamientos o los pies de página de las páginas pares e
impares (la propiedad FooterIsShared es False), defina las propiedades en las páginas
impares.
Todos los objetos mencionados devuelven un objeto que admite el servicio com.sun.star.sheet.
HeaderFooterContent. Mediante las propiedades (no genuinas) LeftText, CenterText y
RightText, este servicio proporciona tres elementos de texto para los encabezamientos y pies de
página de StarOffice Calc.
En el ejemplo siguiente se escribe el valor "Es una prueba." en el campo de texto izquierdo del
encabezamiento de la plantilla "Default".
PaginaPredeterminada.HeaderIsOn = True
ContenidoEnc = PaginaPredeterminada.RightPageHeaderContent
TextoEnc = ContenidoEnc.LeftText
TextoEnc.String = "Es una prueba."
PaginaPredeterminada.RightPageHeaderContent = ContenidoEnc
Observe la última línea del ejemplo: Una vez modificado el texto, el objeto TextContent se debe
asignar de nuevo al encabezamiento para que el cambio surta efecto.
Los documentos de texto (StarOffice Writer) disponen de otra posibilidad para modificar el texto de
los encabezamientos, ya que constan de un único bloque de texto. Las siguientes propiedades están
definidas en el servicio com.sun.star.style.PageProperties:
FooterLeft (objeto): objeto de texto con el contenido del pie de página (servicio
com.sun.star.text.XText)
FooterTextLeft (objeto): objeto de texto con el contenido de los pies de página de las
páginas del lado izquierdo (servicio com.sun.star.text.XText)
FooterTextRight (objeto): objeto de texto con el contenido de los pies de página de las
páginas del lado derecho (servicio com.sun.star.text.XText)
Doc = StarDesktop.CurrentComponent
FamiliasDeEstilos = Doc.StyleFamilies
EstilosDePagina = StyleFamilies.getByName("PageStyles")
PaginaPredeterminada = PageStyles.getByName("Default")
PaginaPredeterminada.HeaderIsOn = True
TextoEnc = PaginaPredeterminada.HeaderText
En este ejemplo, el acceso se efectúa a través de la propiedad HeaderText del estilo de página, en
lugar de usar el objeto HeaderFooterContent.
Áreas de celdas
Aparte de un objeto para las celdas individuales (servicio com.sun.star.table.Cell),
StarOffice ofrece también objetos para representar áreas de celdas. Estos objetos CellRange se
crean mediante la llamada getCellRangeByName del objeto hoja de cálculo:
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets.getByName("Hoja 1")
AreaDeCeldas = Hoja.getCellRangeByName("A1:C15")
El signo de dos puntos (:) se utiliza para especificar un área de celdas en un documento de hoja de
cálculo. Por ejemplo, A1:C15 representa todas las celdas de las filas 1 a 15 en las columnas A, B y C.
La ubicación de las celdas individuales en un área de celdas se puede determinar mediante el
método getCellByPosition, siendo (0, 0) las coordenadas de la celda superior izquierda del
área de celdas. En el ejemplo siguiente se utiliza este método para crear un objeto de la celda C3.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets.getByName("Hoja 1")
AreaDeCeldas = Hoja.getCellRangeByName("B2:D4")
Celda = AreaDeCeldas.getCellByPosition(1, 1)
VAR: varianza
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets.getByName("Hoja 1")
AreaDeCeldas = Hoja.getCellRangeByName("A1:C3")
MsgBox AreaDeCeldas.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
AreaDeCeldas = Hoja.getCellRangeByName("B2:C3")
Indicadores = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.HARDATTR
CellRange.clearContents(Indicadores)
FORMULA: fórmulas
EDITATTR: formatos de caracteres que se aplican únicamente a algunas partes de las celdas
También se pueden agregar constantes para borrar distintos tipos de información con una única
llamada a clearContents.
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets(0)
DescriptorSustitucion = Hoja.createReplaceDescriptor()
DescriptorSustitucion.SearchString = "es"
DescriptorSustitucion.ReplaceString = "era"
For I = 0 to Doc.Sheets.Count - 1
Hoja = Doc.Sheets(I)
Hoja.ReplaceAll(DescriptorSustitucion)
Next I
8 Dibujos y presentaciones
Este capítulo proporciona una introducción a la creación y edición de dibujos controladas por
macros. En la primera sección se describe la estructura de los dibujos, incluidos los elementos
básicos que los componen. En la segunda sección se analizan funciones de edición más complejas
como agrupar, girar y escalar objetos.
En el capítulo 5, Trabajo con documentos de StarOffice, encontrará información acerca de cómo
crear, abrir y guardar dibujos.
Sin embargo, la presencia de las capas complica un poco el esquema general. De forma
predeterminada, cada documento de dibujo consta de las capas Diseño, Controles y Líneas de
dimensiones y todos los elementos de dibujo se agregan a la capa Diseño. Hay la opción de agregar
nuevas capas. Para obtener más información, consulte el manual StarOffice Developer's Guide.
Páginas
Las páginas de un documento de dibujo están disponibles mediante la lista DrawPages. Se puede
acceder a las páginas individuales mediante su número o su nombre. Si un documento tiene una
sola página denominada Diapositiva 1, los siguientes ejemplos son idénticos.
Ejemplo 1:
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
Ejemplo 2:
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages.getByName("Diapositiva 1")
133
En el primer ejemplo se accede a la página a través de su número (la numeración empieza en 0). En
el segundo ejemplo se accede por su nombre mediante el método getByName.
oHojas = oDocumento.Sheets
If oHojas.hasByName("Vinculo") Then
oHoja = oHojas.getByName("Vinculo")
Else
oHoja = oDocumento.createInstance("com.sun.star.sheet.Spreadsheet")
oHojas.insertByName("Vinculo", oHoja)
oHoja.IsVisible = False
End If
Number (Short): número de páginas (la numeración empieza en 1), sólo lectura
La modificación de estos valores de configuración afecta a todas las páginas del documento.
En el ejemplo siguiente se define el tamaño de página del documento de dibujo que se acaba de
abrir en 20 × 20 centímetros, con un margen de 0,5 centímetros:
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
Pagina.BorderLeft = 500
Pagina.BorderRight = 500
Pagina.BorderTop = 500
Pagina.BorderBottom = 500
Pagina.Width = 20000
Pagina.Height = 20000
StarOffice Basic ofrece también otros diversos servicios mediante los cuales se pueden modificar
dichas propiedades, como formatos y aplicación de rellenos. Las opciones de formato disponibles
dependen del tipo de objeto de dibujo.
En el ejemplo siguiente se crea e inserta un rectángulo en un documento de dibujo:
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
Pagina.add(FormaRectangular)
A continuación se inicializan las estructuras Punto y Tamano con el punto de origen (esquina
izquierda) y el tamaño del objeto de dibujo. Las longitudes se especifican en centésimas de milímetro.
El código del programa utiliza la llamada Doc.createInstance para crear el objeto de dibujo
rectángulo según se especifica en el servicio com.sun.star.drawing.RectangleShape.
Finalmente, el objeto de dibujo se asigna a una página mediante la llamada Pagina.add.
Propiedades de relleno
En esta sección se describen cuatro servicios y, en cada caso, el programa de ejemplo utiliza un
elemento rectangular que combina varios tipos de formato. Las propiedades de relleno se
combinan en el servicio com.sun.star.drawing.FillProperties.
StarOffice reconoce cuatro tipos principales de formato para un área de relleno. El más simple es el
relleno de un sólo color. Las opciones para definir gradientes de color y tramas permiten hacer
intervenir otros colores. La cuarta variante es la opción de proyectar imágenes en el área de relleno.
Para utilizar el modo de relleno deberá asignar a la propiedad FillStyle el modo de relleno
SOLID.
En el ejemplo siguiente se crea una forma rectangular y se rellena de color rojo (valor RGB 255, 0, 0):
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.FillStyle = com.sun.star.drawing.FillStyle.SOLID
FormaRectangular.FillColor = RGB(255,0,0)
Pagina.add(FormaRectangular)
Gradiente de color
Si establece el valor de la propiedad FillStyle en GRADIENT podrá aplicar un gradiente de
color a cualquier área de un documento de StarOffice que pueda rellenarse.
Style (Enum): tipo de gradiente; por ejemplo, lineal o radial (valores predeterminados de
acuerdo con com.sun.star.awt.GradientStyle)
StartColor (Long): color inicial del gradiente de color
EndColor (Long): color final del gradiente de color
StepCount (Short): número de graduaciones de color que StarOffice debe calcular para los
gradientes
En el ejemplo siguiente se muestra el uso de los gradientes de color con la ayuda de la estructura
com.sun.star.awt.Gradient:
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
Gradiente.Style = com.sun.star.awt.GradientStyle.LINEAR
Gradiente.StartColor = RGB(255,0,0)
Gradiente.EndColor = RGB(0,255,0)
Gradiente.StartIntensity = 150
Gradiente.EndIntensity = 150
Gradiente.Angle = 450
Gradiente.StepCount = 100
FormaRectangular.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
FormaRectangular.FillGradient = Gradiente
Pagina.add(FormaRectangular)
En este ejemplo se crea un gradiente de color lineal (Style = LINEAR). El gradiente empieza con
el color rojo (StartColor) en la esquina superior izquierda y se extiende, con un ángulo de 45
Tramas
Para crear un relleno de trama se debe asignar a la propiedad FillStyle el valor HATCH. El
código de programa para definir la trama es muy similar al utilizado para gradientes de color.
Nuevamente se utiliza una estructura auxiliar, com.sun.star.drawing.Hatch en este caso,
para definir el aspecto de la trama. Las propiedades de la estructura utilizada para las tramas son:
Style (Enum): tipo de trama: simple, cuadrada o cuadrada con diagonales (valores
predeterminados de acuerdo con com.sun.star.awt.HatchStyle)
Color (Long): color de las líneas
Distance (Long): distancia entre las líneas en centésimas de milímetro
Angle (Short): ángulo de la trama en décimas de grado
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.FillStyle = com.sun.star.drawing.FillStyle.HATCH
Trama.Style = com.sun.star.drawing.HatchStyle.SINGLE
Trama.Color = RGB(64,64,64)
Trama.Distance = 20
Trama.Angle = 450
FormaRectangular.FillHatch = Trama
Pagina.add(FormaRectangular)
Bitmaps
Para utilizar como relleno la proyección de un bitmap, la propiedad FillStyle debe tener como
valor BITMAP. Si el bitmap está disponible en StarOffice, únicamente deberá especificar su
nombre en la propiedad FillBitMapName y su estilo de visualización (simple, mosaico o
estirado) en la propiedad FillBitmapMode (valores predeterminados de acuerdo con
com.sun.star.drawing.BitmapMode).
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
FormaRectangular.FillBitmapName = "Sky"
FormaRectangular.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT
Pagina.add(FormaRectangular)
Transparencia
Es posible ajustar la transparencia de cualquiera de los estilos de relleno. La forma más fácil de
cambiar la transparencia de un elemento de dibujo es mediante la propiedad FillTransparence.
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.FillStyle = com.sun.star.drawing.FillStyle.SOLID
FormaRectangular.FillTransparence = 50
FormaRectangular.FillColor = RGB(255,0,0)
Pagina.add(FormaRectangular)
Para hacer que el relleno sea transparente, defina el valor de la propiedad FillTransparence en
100.
Propiedades de líneas
Todos los objetos de dibujo que pueden llevar un borde admiten el servicio
com.sun.star.drawing.LineStyle. Algunas de las propiedades que proporciona este
servicio son:
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.LineColor = RGB(128,128,128)
FormaRectangular.LineTransparence = 50
FormaRectangular.LineWidth = 500
FormaRectangular.LineJoint = com.sun.star.drawing.LineJoint.MITER
FormaRectangular.LineStyle = com.sun.star.drawing.LineStyle.SOLID
Pagina.add(FormaRectangular)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
Pagina.add(FormaRectangular)
En este fragmento de código se usa la propiedad String del rectángulo para insertar el texto y las
propiedades CharWeight y CharFontName del servicio
com.sun.star.style.CharacterProperties para dar formato a la fuente del texto.
El texto sólo puede insertarse una vez que se ha agregado el objeto de dibujo a la página de dibujo.
También se puede utilizar el servicio com.sun.star.drawing.Text para situar y formatear
texto en un objeto de dibujo. Algunas de las propiedades fundamentales de este servicio son:
TextAutoGrowHeight (booleano): adapta la altura del elemento de dibujo al texto que contiene
TextAutoGrowWidth (booleano): adapta el ancho del elemento de dibujo al texto que contiene
TextHorizontalAdjust (Enum): posición horizontal del texto dentro del elemento de
dibujo (valores predeterminados de acuerdo con
com.sun.star.drawing.TextHorizontalAdjust)
TextVerticalAdjust (Enum): posición vertical del texto dentro del elemento de dibujo
(valores predeterminados de acuerdo con com.sun.star.drawing.TextVerticalAdjust)
TextLeftDistance (Long): distancia por la izquierda entre el elemento de dibujo y el texto
en centésimas de milímetro
TextRightDistance (Long): distancia por la derecha entre el elemento de dibujo y el texto
en centésimas de milímetro
TextUpperDistance (Long): distancia por arriba entre el elemento de dibujo y el texto en
centésimas de milímetro
TextLowerDistance (Long): distancia por abajo entre el elemento de dibujo y el texto en
centésimas de milímetro
En el ejemplo siguiente se muestra el uso de las propiedades mencionadas.
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
Pagina.add(FormaRectangular)
FormaRectangular.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
FormaRectangular.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT
FormaRectangular.TextLeftDistance = 300
FormaRectangular.TextRightDistance = 300
FormaRectangular.TextUpperDistance = 300
FormaRectangular.TextLowerDistance = 300
Propiedades de la sombra
El servicio com.sun.star.drawing.ShadowProperties permite agregar una sombra a casi
todos los objetos de dibujo. Las propiedades de este servicio son:
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.Shadow = True
FormaRectangular.ShadowColor = RGB(192,192,192)
FormaRectangular.ShadowTransparence = 50
FormaRectangular.ShadowXDistance = 200
FormaRectangular.ShadowYDistance = 200
Pagina.add(FormaRectangular)
Círculos y elipses
El servicio com.sun.star.drawing.EllipseShape se encarga de los círculos y las elipses;
admite los servicios siguientes:
CircleEndAngle (Long): ángulo final en décimas de grado (sólo para segmentos circulares o
elípticos))
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaEliptica = Doc.createInstance("com.sun.star.drawing.EllipseShape")
FormaEliptica.Size = Tamano
FormaEliptica.Position = Punto
FormaEliptica.CircleStartAngle = 2000
FormaEliptica.CircleEndAngle = 9000
FormaEliptica.CircleKind = com.sun.star.drawing.CircleKind.SECTION
Pagina.add(FormaEliptica)
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaLineal = Doc.createInstance("com.sun.star.drawing.LineShape")
FormaLineal.Size = Tamano
FormaLineal.Position = Punto
Pagina.add(FormaLineal)
Formas polipoligonales
StarOffice admite también formas poligonales complejas mediante el servicio
com.sun.star.drawing.PolyPolygonShape. Hablando con precisión, un PolyPolygon
("polipolígono") no es un polígono simple sino un polígono múltiple. Por consiguiente, se pueden
especificar varias listas independientes con puntos de intersección y combinarlas para formar un
objeto completo.
Como sucede con las formas rectangulares, los polipolígonos admiten todas las propiedades de
formato de los objetos de dibujo:
El servicio PolyPolygonShape dispone asimismo de una propiedad que permite definir las
coordenadas de un polígono:
PolyPolygon (matriz): campo que contiene las coordenadas del polígono (matriz doble
con puntos del tipo com.sun.star.awt.Point)
En el ejemplo siguiente se muestra cómo se define un triángulo con el servicio
PolyPolygonShape.
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaPolipoligonal = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
Page.add(FormaPolipoligonal) ' Page.add debe aparecer antes de definir las coordenadas
Coordenadas(0).x = 1000
Coordenadas(1).x = 7500
Coordenadas(2).x = 10000
Coordenadas(0).y = 1000
Coordenadas(1).y = 7500
Coordenadas(2).y = 5000
FormaPolipoligonal.PolyPolygon = Array(Coordenadas())
Puesto que los puntos de un polígono se definen como valores absolutos, no es necesario
especificar el tamaño o la posición inicial de un polígono. En cambio, es necesario crear una matriz
de puntos, empaquetarla dentro de una segunda matriz (mediante la llamada Array
(Coordenadas()) y, a continuación, asignar esta matriz al polígono. Antes de poder efectuar la
llamada correspondiente, el polígono debe insertarse en el documento.
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaPolipoligonal = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
Cuadrado1(0).x = 5000
Cuadrado1(1).x = 10000
Cuadrado1(2).x = 10000
Cuadrado1(3).x = 5000
Cuadrado1(0).y = 5000
Cuadrado1(1).y = 5000
Cuadrado1(2).y = 10000
Cuadrado1(3).y = 10000
Cuadrado2(0).x = 6500
Cuadrado2(1).x = 8500
Cuadrado2(2).x = 8500
Cuadrado2(3).x = 6500
Cuadrado2(0).y = 6500
Cuadrado2(1).y = 6500
Cuadrado2(2).y = 8500
Cuadrado2(3).y = 8500
Cuadrado3(0).x = 6500
Cuadrado3(1).x = 8500
Cuadrado3(2).x = 8500
Cuadrado3(3).x = 6500
Cuadrado3(0).y = 9000
Cuadrado3(1).y = 9000
Cuadrado3(2).y = 9500
Cuadrado3(3).y = 9500
Para saber qué áreas están rellenas y cuáles son huecos, StarOffice aplica una regla sencilla: el
borde de la forma exterior es siempre el borde exterior del polipolígono. La siguiente línea hacia
dentro es el borde interior de la forma y marca la transición al primer hueco. Si hay otra línea más
hacia el interior, ésta marca la transición hacia un área rellena.
Imágenes
El último de los elementos de dibujo analizado son los objetos gráficos (imágenes) basados en el
servicio com.sun.star.drawing.GraphicObjectShape. Se pueden utilizar con cualquier
imagen de StarOffice cuyo aspecto pueda adaptarse mediante el uso de una amplia gama de
propiedades.
AdjustRed (Short): valor de rojo en forma de porcentaje (se permiten valores negativos)
AdjustBlue (Short): valor de azul en forma de porcentaje (se permiten valores negativos)
GraphicColorMode (Enum): modo de color; por ejemplo, estándar, tonos de gris, blanco y
negro (valor predeterminado de acuerdo con com.sun.star.drawing.ColorMode)
En el ejemplo siguiente se muestra cómo insertar en una página un objeto gráfico. Dim Doc As
Object
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaObjetoGrafico = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
FormaObjetoGrafico.Size = Tamano
FormaObjetoGrafico.Position = Punto
FormaObjetoGrafico.GraphicURL = "file:///c:/prueba.jpg"
FormaObjetoGrafico.AdjustBlue = -50
FormaObjetoGrafico.AdjustGreen = 5
Pagina.add(FormaObjetoGrafico)
En este código se inserta la imagen prueba.jpg y se adapta su aspecto mediante las propiedades
Adjust. En el ejemplo las imágenes se representan con un 40 por ciento de transparencia, sin otras
conversiones de color (GraphicColorMode = STANDARD).
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
Punto.x = 3000
Punto.y = 3000
Tamano.Width = 3000
Tamano.Height = 3000
' crear elemento de dibujo cuadrado
Cuadrado = Doc.createInstance("com.sun.star.drawing.RectangleShape")
Cuadrado.Size = Tamano
Cuadrado.Position = Punto
Cuadrado.FillColor = RGB(255,128,128)
Pagina.add(Cuadrado)
' crear elemento de dibujo circular
Circulo = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Circulo.Size = Tamano
Circulo.Position = Punto
Este código crea un rectángulo y un círculo y los inserta en una página. A continuación crea un
objeto que admita el servicio com.sun.star.drawing.ShapeCollection y utiliza el método
Add para agregar el rectángulo y el círculo a dicho objeto. ShapeCollection se añade a la
página mediante el método Group y devuelve el objeto Grupo que puede editarse como un objeto
Shape individual.
Si desea dar formato a los objetos individuales de un grupo, aplique el formato antes de agregar
los objetos al grupo. Una vez agrupados los objetos, no es posible modificarlos.
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.RotateAngle = 3000
Pagina.add(FormaRectangular)
En el ejemplo siguiente se crea el mismo rectángulo que en el ejemplo anterior, pero en este caso se le
aplica una distorsión de 30 grados mediante la propiedad ShearAngle.
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Doc = StarDesktop.CurrentComponent
Pagina = Doc.drawPages(0)
FormaRectangular = Doc.createInstance("com.sun.star.drawing.RectangleShape")
FormaRectangular.Size = Tamano
FormaRectangular.Position = Punto
FormaRectangular.ShearAngle = 3000
Pagina.add(FormaRectangular)
Búsqueda y sustitución
Como sucede en los documentos de texto, los documentos de dibujo ofrecen una función de buscar
y reemplazar que es similar a la utilizada en los documentos de texto descrita en el capítulo 6,
Documentos de texto:. Sin embargo, en los documentos de dibujo los objetos descriptores de
buscar y reemplazar no se crean directamente a través del objeto documento, sino a través del
nivel de carácter asociado. En el ejemplo siguiente se esquematiza el proceso de reemplazar dentro
de un dibujo:
DescriptorSustitucion = Pagina.createReplaceDescriptor()
DescriptorSustitucion.SearchString = "es"
DescriptorSustitucion.ReplaceString = "era"
For I = 0 to Doc.drawPages.Count - 1
Pagina = Doc.drawPages(I)
Pagina.ReplaceAll(DescriptorSustitucion)
Next I
En este fragmento de código se utiliza la primera DrawPage del documento para crear un
DescriptorSustitucion que, a continuación, se aplica a todas las páginas del documento de
dibujo mediante un bucle.
Presentaciones
Las presentaciones de StarOffice se basan en documentos de dibujo. Cada página de la presentación
es una diapositiva a la que se puede acceder como se accede a un documento de dibujo estándar, a
través de la lista DrawPages del objeto documento. El servicio com.sun.star.presentation.
PresentationDocument, que se encarga de los documentos de presentación, ofrece también el
servicio com.sun.star.drawing.DrawingDocument completo.
Doc = StarDesktop.CurrentComponent
Presentacion = Doc.Presentation
Presentacion.start()
.Este fragmento de código crea un objeto Doc que hace referencia al documento de presentación
actual y establece el objeto presentación asociado. El método start() del objeto se utiliza para
iniciar el ejemplo y ejecutar la presentación en pantalla.
Se ofrecen los siguientes métodos como objetos de presentación:
start: inicia la presentación
end: finaliza la presentación
rehearseTimings: inicia la presentación desde el principio y establece el tiempo de ejecución
También están disponibles las propiedades siguientes:
AllowAnimations (booleano): ejecuta animaciones en la presentación
9 Diagramas
StarOffice puede mostrar datos en forma de diagramas, creando así vínculos gráficos entre los
datos en forma de barras, sectores, líneas u otros elementos, que se pueden mostrar en 2D o 3D; el
aspecto de los elementos se puede adaptar individualmente de forma similar a lo que ocurre con
los elementos de dibujo.
Si los datos están disponibles en forma de hoja de cálculo, ésta se puede vincular con el diagrama de
forma dinámica, con lo que las modificaciones efectuadas en los datos de base se podrán ver de
inmediato en el diagrama asignado. Este capítulo ofrece un resumen de la interfaz de programación
para los módulos de diagramas de StarOffice y se centra en el uso de diagramas dentro de
documentos de hoja de cálculo.
Doc = StarDesktop.CurrentComponent
Diagramas = Doc.Sheets(0).Charts
Rectangulo.X = 8000
Rectangulo.Y = 1000
Rectangulo.Ancho = 10000
Rectangulo.Altura = 7000
DireccionArea(0).Sheet = 0
DireccionArea(0).StartColumn = 0
DireccionArea(0).StartRow = 0
DireccionArea(0).EndColumn = 2
155
DireccionArea(0).EndRow = 12
Aunque el código utilizado en el ejemplo pueda parecer complicado, los procesos esenciales se
limitan a tres líneas: la primera línea esencial crea la variable de documento Doc, que hace referencia
al documento de hoja de cálculo actual (línea Doc = StarDesktop.CurrentComponent). El
código del ejemplo crea a continuación una lista con todos los diagramas de la primera hoja de
cálculo (línea Diagramas = Doc.Sheets(0).Charts). Finalmente se añade un diagrama nuevo a
la última línea de esta lista mediante el método addNewByName. Este nuevo diagrama es visible para
el usuario.
Diagrama = Diagramas.getByName("MiDiagrama").embeddedObject
Diagrama.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")
En Excel se distingue entre los diagramas insertados como página independiente en un documento de
Excel y aquellos que se han incrustado en una página de tabla. Por consiguiente se han definido dos
métodos de acceso distinto a los diagramas. Esta distinción no existe en StarOffice Basic, porque los
diagramas de StarOffice Calc se crean siempre como objetos incrustados en una página de tabla. El
acceso a los diagramas se efectúa siempre mediante la lista Charts del objeto Sheet asociado.
Subtitle (objeto): objeto con información detallada acerca del subtítulo del diagrama
(admite el servicio com.sun.star.chart.ChartTitle).
En el ejemplo siguiente se crea un diagrama y se le asigna el título "Prueba", el subtítulo "Prueba 2" y
una clave. Está tiene el fondo de color gris, se encuentra en la parte inferior del diagrama y el
tamaño de sus caracteres es de 7 puntos.
Rectangulo.X = 8000
Rectangulo.Y = 1000
Rectangulo.Ancho = 10000
Rectangulo.Altura = 7000
Doc = StarDesktop.CurrentComponent
Diagramas = Doc.Sheets(0).Charts
Diagramas.addNewByName("MiDiagrama", Rectangulo, DireccionArea(), True, True)
Diagrama = Diagramas.getByName("MiDiagrama").EmbeddedObject
Diagrama.HasMainTitle = True
Diagrama.Title.String = "Prueba"
Diagrama.HasSubTitle = True
Diagrama.Subtitle.String = "Prueba 2"
Diagrama.HasLegend = True
Diagrama.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
Diagrama.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID
Diagrama.Legend.FillColor = RGB(210, 210, 210)
Diagrama.Legend.CharHeight = 7
Fondo
Todos los diagramas tienen un fondo. Todas las áreas tienen un objeto correspondiente al que se
puede acceder a través de las propiedades siguientes del objeto de diagrama:
El fondo de un diagrama cubre toda el área de ésta, incluida la situada bajo el título, el subtítulo y
la clave del diagrama. El servicio com.sun.star.chart.ChartArea asociado admite propie-
dades de línea y de relleno y no proporciona más propiedades extensivas.
Floor (objeto): panel que forma la base del diagrama (sólo en diagramas 3D, admite el
servicio com.sun.star.chart.ChartArea).
Wall (objeto): paneles laterales del diagrama (sólo en diagramas 3D, admite el servicio
com.sun.star.chart.ChartArea).
Para acceder a los paneles laterales y la base del diagrama se emplea el objeto Chart que, a su vez,
forma parte del objeto Chart:
Chart.Area.FillBitmapName = "Sky"
En el ejemplo siguiente se muestra cómo puede utilizarse una imagen (denominada Sky) contenida
en StarOffice como fondo de un diagrama.
Rectangulo.X = 8000
Rectangulo.Y = 1000
Rectangulo.Ancho = 10000
Rectangulo.Altura = 7000
DireccionArea(0).Sheet = 0
DireccionArea(0).StartColumn = 0
DireccionArea(0).StartRow = 0
DireccionArea(0).EndColumn = 2
DireccionArea(0).EndRow = 12
Doc = StarDesktop.CurrentComponent
Diagramas = Doc.Sheets(0).Charts
Diagrama.Area.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
Diagrama.Area.FillBitmapName = "Sky"
Diagrama.Area.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT
Ejes
StarOffice reconoce cinco ejes distintos que se pueden utilizar en un diagrama. En el escenario más
sencillo, los ejes son el X y el Y. Cuando se trabaja con diagramas 3D, a veces se proporciona
también un eje Z. Para los diagramas en los que los valores de las distintas filas de datos se desvían
entre sí de forma significativa, StarOffice ofrece un segundo par de ejes X e Y para operaciones en
otra escala.
Primeros ejes X, Y y Z
Además del eje en sí, cada uno de los primeros ejes X, Y y Z pueden tener asociados un título, una
descripción, una cuadrícula y una cuadrícula auxiliar. Existe la opción de mostrar u ocultar cada uno
de estos elementos. El objeto diagrama ofrece las propiedades siguientes para la administración de
XAxis (objeto): objeto con información detallada acerca del eje X (admite el servicio
com.sun.star.chart.ChartAxis).
XMainGrid (objeto): objeto con información detallada acerca de la cuadrícula principal del
eje X (admite el servicio com.sun.star.chart.ChartGrid).
XHelpGrid (objeto): objeto con información detallada acerca de la cuadrícula auxiliar del
eje X (admite el servicio com.sun.star.chart.ChartGrid).
XAxisTitle (objeto): objeto con información detallada acerca del título del eje X (admite el
servicio com.sun.star.chart.ChartTitle).
Segundos ejes X e Y
Los segundos ejes X e Y disponen de las propiedades siguientes (tomando como ejemplo el
segundo eje X):
SecondaryXAxis (objeto): objeto con información detallada acerca del segundo eje X
(admite el servicio com.sun.star.chart.ChartAxis ).
StepMain (Double): distancia entre dos líneas de división principales del eje.
StepHelp (Double): distancia entre dos líneas de división secundarias del eje.
Logarithmic (booleano): aplica escala logarítmica (en lugar de lineal) a los ejes.
Marks (Const): constante que especifica si las líneas de división principales del eje deben
estar dentro o fuera del área del diagrama (valores predeterminados de acuerdo con
com.sun.star.chart.ChartAxisMarks)
HelpMarks (Const): constante que especifica si las líneas de división secundarias del eje
deben estar dentro o fuera del área del diagrama (valores predeterminados de acuerdo con
com.sun.star.chart.ChartAxisMarks)
GapWidth (long): porcentaje que especifica la distancia que puede haber entre los distintos
grupos de barras en un diagrama (un valor del 100% significa que la distancia es del ancho de una
barra).
Ejemplo
En el ejemplo siguiente se crea un diagrama de líneas. El color del panel posterior del diagrama se
establece en blanco. Ambos ejes, X e Y, disponen de una cuadrícula auxiliar gris para una mejor
orientación visual. El valor mínimo del eje Y se establece en 0 y el valor máximo se fija en 100, de
modo que la resolución del diagrama se conserva aunque los valores se modifiquen.
Doc = StarDesktop.CurrentComponent
Diagramas = Doc.Sheets(0).Charts
Rectangulo.X = 8000
Rectangulo.Y = 1000
Rectangulo.Ancho = 10000
Rectangulo.Altura = 7000
DireccionArea(0).Sheet = 0
DireccionArea(0).StartColumn = 0
DireccionArea(0).StartRow = 0
DireccionArea(0).EndColumn = 2
DireccionArea(0).EndRow = 12
Diagrama = Diagramas.getByName("MiDiagrama").embeddedObject
Diagrama.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")
Diagrama.Diagram.HasXAxisGrid = True
Diagrama.Diagram.XMainGrid.LineColor = RGB(192, 192, 192)
Diagrama.Diagram.HasYAxisGrid = True
Diagrama.Diagram.YMainGrid.LineColor = RGB(192, 192, 192)
Diagrama.Diagram.YAxis.Min = 0
Diagrama.Diagram.YAxis.Max = 100
Diagramas 3D
La mayoría de los diagramas de StarOffice se pueden mostrar también con gráficos 3D. Todos los
tipos de diagramas que permiten esta opción admiten el servicio
com.sun.star.chart.Dim3DDiagram. Este servicio ofrece una única propiedad:
Diagramas apilados
Los diagramas apilados están dispuestos de modo que varios valores se coloquen uno sobre el otro
para producir un valor total. En esta vista no sólo se muestran los valores individuales, sino
también un resumen de todos los valores.
Tipos de diagramas
Diagramas de líneas
Los diagramas de líneas (servicio com.sun.star.chart.LineDiagram) admiten un eje X, dos ejes
Y y un eje Z. Se pueden mostrar en 2D o en 3D (servicio com.sun.star.chart.Dim3Ddiagram).
Las líneas pueden apilarse (com.sun.star.chart.StackableDiagram).
SymbolType (const): símbolo para mostrar los puntos de datos (constante de acuerdo con
com.sun.star.chart.ChartSymbolType).
SymbolSize (Long): tamaño del símbolo para mostrar los puntos de datos en centésimas de
milímetro.
SplineType (Long): función spline para suavizar las líneas (0: sin función de spline, 1:
splines cúbicas , 2: splines B).
SplineOrder (Long): grado polinómico de las splines (sólo para splines B).
Diagramas de área
Los diagramas de área (servicio com.sun.star.chart.AreaDiagram) admiten un eje X, dos ejes
Y y un eje Z. Se pueden mostrar en 2D o en 3D (servicio com.sun.star.chart.Dim3Ddiagram).
Las áreas pueden apilarse (com.sun.star.chart.StackableDiagram).
Deep (booleano): en modo de visualización 3D, sitúa las barras una detrás de otra en lugar
de una junto a la otra.
NumberOfLines (Long): número de líneas que se debe mostrar en un diagrama apilado como
líneas en lugar de como barras.
Diagramas de sectores
Los diagramas de sectores (servicio com.sun.star.chart.PieDiagram) no contienen ejes y no
pueden apilarse. Se pueden mostrar en 2D o en 3D (servicio
com.sun.star.chart.Dim3Ddiagram).
Los controladores se basan en componentes UNO, por lo que es posible desarrollar otros
controladores y así incorporar nuevas fuentes de datos. StarOffice Developer's Guide ofrece más
detalles al respecto.
Desde un punto de vista conceptual, SDBC es comparable a las bibliotecas ADO y DAO disponibles en
VBA. Permite acceder a alto nivel a bases de datos, independientemente de los mecanismos de base de
datos subyacentes.
La interfaz de base de datos de StarOffice ha crecido con la aparición de la versión StarOffice 6. Aunque
anteriormente el acceso a las bases de datos se efectuaba principalmente mediante diversos métodos del
objeto Application, la interfaz de StarOffice 6 se subdivide en varios objetos. DatabaseContext se
utiliza como objeto raíz para las funciones de base de datos.
Si un controlador permite acceder a una fuente de datos que no admita SQL, se deberán convertir
independientemente las órdenes SQL transferidas al acceso nativo requerido.
La implementación SQL de SDBC está orientada hacia el estándar SQL-ANSI. Las extensiones
específicas de Microsoft, como la construcción INNER JOIN, no se admiten y se deben sustituir por
órdenes estándar (por ejemplo, INNER JOIN se debe sustituir por la cláusula WHERE correspondiente).
165
Tipos de acceso a bases de datos
La interfaz de base de datos de StarOffice está disponible en las aplicaciones StarOffice Writer y
StarOffice Calc, así como en los formularios de base de datos.
En StarOffice Writer se pueden crear cartas estándar a partir de fuentes de datos SDBC e
imprimirlas. También se ofrece la opción de trasladar datos de la ventana de base de datos a los
documentos de texto mediante la función de arrastrar y colocar.
Si el usuario mueve una tabla de base de datos a una hoja de cálculo, StarOffice crea un área de
tabla que se puede actualizar con una pulsación del ratón si los datos originales se han modificado.
De igual forma, se pueden mover datos de una hoja de cálculo a una tabla de base de datos y
efectuar una importación de base de datos.
Finalmente, StarOffice ofrece un mecanismo para crear formularios fundamentados en bases de
datos. Para ello el usuario debe crear en primer lugar un formulario estándar de StarOffice Writer
o de StarOffice Calc y luego vincular los campos a una base de datos.
Todas las opciones especificadas aquí se basan en la interfaz de usuario de StarOffice. No es
necesario ningún conocimiento de programación para utilizar las funciones correspondientes.
Sin embargo, este capítulo no ofrece mucha información acerca de las funciones especificadas, sino
que se centra en la interfaz de programación de SDBC, que permite automatizar las consultas a las
bases de datos y ofrece, por tanto, una mayor variedad de aplicaciones.
Sin embargo, es necesario un conocimiento básico del funcionamiento de las bases de datos y del
lenguaje de consultas SQL para entender por completo las secciones siguientes.
Fuentes de datos
Para incorporar una base de datos a StarOffice se debe crear lo que se suele denominar una a
fuente de datos. La interfaz de usuario proporciona una opción para crear fuentes de datos en el
menú Opciones. En todo caso, también se pueden crear fuentes de datos y trabajar con ellas
mediante el propio StarOffice Basic.
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
Nombres = ContextoBaseDatos.getElementNames()
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
En el ejemplo se crea un objeto FuenteDatos para una fuente de datos denominada Clientes.
Las fuentes de datos ofrecen diversas propiedades que, a su vez, proporcionan información
general acerca del origen de los datos y sobre los métodos de acceso. Estas propiedades son:
Las fuentes de datos de StarOffice no son totalmente equivalentes con las fuentes de datos de ODBC.
Mientras que éstas cubren únicamente información acerca del origen de los datos, aquéllas proporcionan
también información acerca de cómo se muestran los datos dentro de las ventanas de base de datos de
StarOffice.
Consultas
Se pueden asignar a una fuente de datos consultas predefinidas. StarOffice toma nota de las
órdenes SQL de las consultas para que estén siempre disponibles. Las consultas se utilizan para
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
DefinicionesConsultas = FuenteDatos.getQueryDefinitions()
For I = 0 To DefinicionesConsultas.Count() - 1
DefinicionConsulta = DefinicionesConsultas(I)
MsgBox DefinicionConsulta.Name
Next I
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
DefinicionesConsultas = FuenteDatos.getQueryDefinitions()
DefinicionConsulta = createUnoService("com.sun.star.sdb.QueryDefinition")
DefinicionesConsultas.insertByName("NuevaConsulta", DefinicionConsulta)
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
Marcadores = FuenteDatos.Bookmarks()
URL = Marcadores.getByName("MiMarcador")
MsgBox URL
StarOffice ofrece varias formas de establecer conexiones de base de datos. Ésta es una explicación
del método basado en una fuente de datos ya existente.
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
El código de este ejemplo comprueba, en primer lugar, si la base de datos está protegida por una contraseña.
En caso contrario crea la conexión de base de datos requerida con la llamada GetConnection. Las dos
cadenas vacías de la línea de órdenes representan el nombre de usuario y la contraseña.
Si la base de datos está protegida por una contraseña, el ejemplo crea un ManejadorInteraccion
y abre la conexión de base de datos mediante el método ConnectWithCompletion. El
ManejadorInteraccion garantiza que StarOffice solicite al usuario los datos de inicio de sesión requeridos.
Iteración de tablas
Para acceder a una tabla en StarOffice se suele emplear el objeto ResultSet (conjunto de
resultados). Un ResultSet es un tipo de marcador que indica un conjunto de datos actual dentro
de un volumen de resultados obtenido a partir de una orden SELECT.
En el ejemplo se muestra de qué forma se puede utilizar ResultSet para consultar valores de una
tabla de base de datos.
ContextoBaseDatos = createUnoService("com.sun.star.sdb.DatabaseContext")
FuenteDatos = ContextoBaseDatos.getByName("Clientes")
Expresion = Conexion.createStatement()
ResultSet = Expresion.executeQuery("SELECT NumeroCliente FROM Cliente")
Una vez establecida la conexión de base de datos, el código utilizado en el ejemplo, en primer
lugar, utiliza la llamada Connection.createObject para crear un objeto Expresion El cual, a
continuación, utiliza la llamada executeQuery para devolver el propio ResultSet. El programa
comprueba si ResultSet existe realmente y recorre los registros de datos mediante un bucle. Los
El objeto ResultSet de SDBC es similar al objeto Recordset de DAO y ADO, ya que también ofrece
acceso iterativo a una base de datos.
En StarOffice 6.x el acceso a la base de datos se efectúa realmente a través de un objeto ResultSet
que refleja el contenido de una tabla o el resultado de una orden SELECT de SQL. Antiguamente, el
objeto ResultSet ofrecía los métodos residentes del objeto Application para desplazarse en los
datos (por ejemplo, DataNextRecord).
getByte(): admite los tipos de datos SQL para números, caracteres y cadenas.
getShort(): admite los tipos de datos SQL para números, caracteres y cadenas.
getInt(): admite los tipos de datos SQL para números, caracteres y cadenas.
getLong(): admite los tipos de datos SQL para números, caracteres y cadenas.
getFloat(): admite los tipos de datos SQL para números, caracteres y cadenas.
getDouble(): admite los tipos de datos SQL para números, caracteres y cadenas.
getBoolean(): admite los tipos de datos SQL para números, caracteres y cadenas.
getDate(): admite los tipos de datos SQL para números, cadenas y marcas de fecha y hora.
getTime(): admite los tipos de datos SQL para números, cadenas y marcas de fecha y hora.
getTimestamp(): admite los tipos de datos SQL para números, cadenas y marcas de fecha y
hora.
getCharacterStream(): admite los tipos de datos SQL para números, cadenas y valores
binarios.
getUnicodeStream(): admite los tipos de datos SQL para números, cadenas y valores
binarios.
El objeto Expresion que se utiliza para crear ResultSet ofrece algunas propiedades que
permiten influir sobre las funciones de ResultSet:
El objeto ResultSet ofrece métodos Update para modificar valores, estructurados de la misma
forma que los métodos get para recuperar valores. El método updateString, por ejemplo,
permite escribir una cadena.
Después de modificarlos, los valores deben transferirse a la base de datos mediante el método
updateRow(). La llamada debe hacerse antes de la orden de navegación siguiente o los valores se
perderán.
Si hay algún error durante las modificaciones, se puede deshacer mediante el método
cancelRowUpdates(). Esta llamada sólo está disponible si los datos no se han reescrito en la
base de datos mediante updateRow().
11 Diálogos
En los documentos de StarOffice se pueden añadir ventanas de diálogo y formularios que pueden
vincularse con macros de StarOffice Basic para ampliar significativamente la utilidad de esta
aplicación. Por ejemplo, los diálogos pueden mostrar información de la base de datos o guiar, en
forma de Piloto automático, a los usuarios en el proceso de crear un nuevo documento paso a paso.
Creación de diálogos
Para crear y estructurar diálogos se puede utilizar el editor de diálogos de StarOffice que se usa de
forma similar a StarOffice Draw:
En esencia, se trata de arrastrar los elementos de control deseados desde la paleta de diseño
(situada a la derecha) al área del diálogo, en la que se puede definir su posición y tamaño.
175
Para abrir un diálogo se puede utilizar el código siguiente:
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Dlg.dispose()
CreateUnoDialog crea un objeto denominado Dlg que hace referencia al diálogo asociado.
Antes de poder crear el diálogo, deberá asegurarse de que la biblioteca que utiliza (en este ejemplo,
la biblioteca Standard) esté cargada. En caso contrario, se debe utilizar el método LoadLibrary
para hacerlo.
Una vez inicializado el objeto Dlg, se puede utilizar el método Execute para mostrarlo. Este tipo
de diálogos se denominan modales, ya que no permiten efectuar ninguna otra acción en el
programa hasta que se cierran. Mientras este diálogo esté abierto, el programa permanecerá dentro
de la llamada Execute.
El método dispose situado al final del código aprueba los recursos utilizados por el diálogo una
vez finalizado el programa.
Cierre de diálogos
Cierre con Aceptar o Cancelar
Si un diálogo contiene los botones Aceptar o Cancelar, se cierra automáticamente al pulsar
cualquiera de ellos. Encontrará más información acerca de estos botones en la sección Elementos
de control de diálogos al detalle, en este mismo capítulo.
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog)
Dlg.endExecute()
Control = Dlg.getControl("MiBoton")
Control.Label = "Etiqueta nueva"
Tenga en cuenta que StarOffice Basic distingue entre mayúsculas y minúsculas en los nombres de
los elementos de control.
En los diálogos, la distinción entre los datos y su representación visual no es siempre tan clara
como en otras áreas de la API de StarOffice. Los elementos de la API están disponibles a través de
la visualización (View) y del modelo (Model).
La propiedad Model proporciona un acceso controlado por el programa al modelo del diálogo y a
los objetos de elementos de control.
cmdNext = Dlg.getControl("cmdNext")
cmdNext.Model.Enabled = False
En este ejemplo se desactiva el botón cmdNext del diálogo Dlg con la ayuda del objeto de modelo
de cmdNtext.
Propiedades
Nombre y título
Cada elemento de control dispone de su propio nombre que se puede consultar utilizando la
siguiente propiedad de modelo:
Se puede especificar el título que aparece en la barra de título de un diálogo mediante la siguiente
propiedad de modelo:
Posición y tamaño
Se puede consultar la posición y el tamaño de un elemento de control mediante las siguientes
propiedades del objeto modelo:
Map AppFont (ma) sustituye a la unidad Twips para mejorar la independencia de la plataforma.
Un valor de Step de 0 constituye un caso especial. Si define este valor como cero en un diálogo,
todos los elementos de control serán visibles independientemente de su valor de Step. De forma
similar, si define este valor como cero en un elemento de control, dicho elemento se mostrará en
todas las fichas de un diálogo.
En el siguiente código de programa se muestra de qué forma se puede aumentar el valor de Step
en los manejadores de acontecimientos de los botones Siguiente y Anterior para cambiar el
estado de éstos.
Sub cmdNext_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
Dlg.Model.Step = Dlg.Model.Step + 1
End Sub
Sub cmdPrev_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = False
cmdNext.Model.Enabled = True
Dlg.Model.Step = Dlg.Model.Step -1
End Sub
Ficha 2:
Acciones
Los diálogos y formularios de StarOffice se basan en un modelo de programación orientado a
acciones, en el que se pueden asignar manejadores de acción a los elementos de control. Un
manejador de acción ejecuta un procedimiento predefinido cuando tiene lugar una acción
específica, incluso si ésta es otra acción. Mediante manejo de acciones se pueden también editar
documentos o abrir bases de datos, así como acceder a otros elementos de control.
Los elementos de control de StarOffice reconocen distintos tipos de acciones que se pueden activar
en diferentes situaciones. Dichos tipos de acciones se pueden dividir en cuatro grupos:
Control del ratón: acciones que corresponden a actuaciones del ratón (por ejemplo, simples
movimientos del ratón o pulsaciones en ubicaciones específicas de la pantalla)
En la figura anterior se muestra el entorno de desarrollo de StarOffice Basic con una ventana de
diálogo que contiene dos listados. Los datos se pueden mover de un listado al otro mediante los
botones situados entre ambos.
Si desea mostrar el diseño en pantalla deberá crear los procedimientos asociados de StarOffice
Basic para que los manejadores de acciones puedan llamarlos. Aunque estos procedimientos
pueden utilizarse en cualquier módulo, lo mejor es limitar su uso a dos módulos. Para facilitar la
lectura del código, es conveniente asignar a estos procedimientos nombres significativos. El hecho
de saltar directamente a un procedimiento de programa general desde una macro puede hacer que
el código sea confuso. Para simplificar el mantenimiento del código y la solución de problemas, es
conveniente crear otro procedimiento que actúe como punto de entrada para la gestión de
acciones, aunque conste únicamente de una llamada al procedimiento de destino.
El código del siguiente ejemplo mueve una entrada del listado izquierdo al derecho de un diálogo.
Sub cmdSelect_Initiated
Dim objList As Object
lstEntries = Dlg.getControl("lstEntries")
lstSelection = Dlg.getControl("lstSelection")
Si este procedimiento se ha creado en StarOffice Basic, se puede asignar a una acción requerida
mediante la ventana de propiedades del editor de diálogos.
Parámetros
La aparición de una acción específica no siempre basta para que la respuesta sea apropiada. Es
posible que se necesite información adicional. Por ejemplo, para procesar una pulsación de ratón
puede ser necesaria la posición de la pantalla en la que se ha pulsado.
En StarOffice Basic se pueden utilizar parámetros de objeto para proporcionar información
adicional acerca de una acción o procedimiento; por ejemplo:
End Sub
La precisión con la que se haya estructurado el objeto Event y las propiedades de éste dependen
del tipo de acción activada por la llamada de procedimiento. En las secciones siguientes se
describen en detalle distintos tipos de acciones.
Independientemente del tipo de acción, todos los objetos ofrecen acceso al elemento de control
relevante y su modelo. Se puede acceder al elemento de control mediante
Event.Source
y a su modelo mediante
Event.Source.Model
Estas propiedades se pueden emplear para activar una acción dentro de un manejador de acciones.
Ratón movido con la tecla pulsada: el usuario arrastra el ratón al tiempo que mantiene
pulsada una tecla
X (long): coordenada X del ratón, medida en píxeles a partir de la esquina superior izquierda
del elemento de control
Y (long): coordenada Y del ratón, medida en píxeles a partir de la esquina superior izquierda
del elemento de control
ClickCount (long): número de pulsaciones asociadas con el acción de ratón (si StarOffice
puede responder con la suficiente velocidad, ClickCount es también 1 para una pulsación
simple, porque sólo se inicia un ación individual).
Las constantes definidas en com.sun.star.awt.MouseButton para los botones del ratón son:
En el ejemplo siguiente se muestra en pantalla la posición del ratón, así como el botón pulsado:
Las acciones de VBA Click y Doubleclick no están disponibles en StarOffice Basic. En su lugar utilice la
acción de StarOffice Basic MouseUp para la acción Click e imite la acción Doubleclick cambiando la lógica
de la aplicación.
Ambas acciones están relacionados con acciones de teclas lógicas y no con acciones físicas. Si el
usuario pulsa varias teclas para mostrar un único carácter (por ejemplo, para agregar un acento a
un carácter), StarOffice Basic crea una única acción.
Una única acción de tecla en una tecla de modificación, como Mayús o Alt, no crea una acción
independiente.
La información acerca de teclas pulsadas la proporciona el objeto de acción que StarOffice Basic
proporciona al procedimiento para la gestión de acciones. Contiene las propiedades siguientes:
Acciones de foco
Las acciones de foco indican si un elemento de control recibe o pierde el foco; se pueden utilizar,
por ejemplo, para determinar si un usuario ha acabado de procesar un elemento de control y así
poder actualizar otros elementos de un diálogo. Las acciones disponibles de foco son:
Los objetos Event para las acciones de foco están estructurados de la siguiente forma:
FocusFlags (short): causa del cambio de foco (valor predeterminado de acuerdo con
com.sun.star.awt.FocusChangeReason).
NextFocus (Object): objeto que recibe el foco (sólo para la acción Pérdida de foco)
Al trabajar con acciones tenga en cuenta que algunas, como Al ejecutar, se pueden ejecutar cada
vez que se pulsa el ratón sobre ciertos elementos de control (por ejemplo, campos de opción). No se
efectúa ninguna acción para comprobar si el estado del elemento de control ha cambiado realmente.
Para evitar estas •gacciones
gacciones ciegas•h guarde el valor del elemento de control en una variable global
y luego compruebe si el valor ha cambiado cuando se esté ejecutando una acción.
Campos de texto
Campos de fecha
Campos de hora
Campos numéricos
Campos de moneda
Campos que adoptan cualquier formato
Botones:
Botones estándar
Casillas de verificación
Botones de opción
Listas de selección:
Listados
Cuadros combinados
A continuación se presentan los elementos de control más importantes de entre los citados.
Botones
Un botón efectúa una acción al pulsarlo.
El caso más sencillo es que el botón active una acción Al ejecutar cuando un usuario lo pulsa.
También se puede vincular otra acción al botón para que abra un diálogo empleando la propiedad
PushButtonType. Al pulsar un botón en el que esta propiedad tiene el valor 0, el diálogo no
queda afectado. Al pulsar un botón en el que esta propiedad tiene el valor 1, el diálogo se cierra y
el método Execute del diálogo devuelve el valor 1 (la secuencia de diálogos ha finalizado
correctamente). Si PushButtonType tiene el valor 2, el diálogo se cierra y el método Execute
del diálogo devuelve el valor 0 (diálogo cerrado).
A continuación se enumeran las propiedades disponibles a través del modelo de botón:
PushButtonType (short): acción vinculada al botón (0: sin acción, 1: Aceptar, 2: Cancelar)
Campos de opción
Estos campos de opción se suelen utilizar en grupos y permiten seleccionar una de entre varias
opciones. Al seleccionar una de las opciones, el resto de opciones del grupo quedan desactivadas.
De esta forma se garantiza que, en un momento determinado, sólo una opción estará activa.
El elemento de control campo de opción ofrece dos propiedades:
State (booleano): activa el botón
Label (String): etiqueta que se muestra en el botón
También se pueden utilizar las siguientes propiedades del modelo de los campos de opción:
Model.FontDescriptor (struct): estructura con detalles de la fuente que se debe utilizar
(de acuerdo con com.sun.star.awt.FontDescriptor)
State (Short): estado de la casilla de verificación (0: no, 1: sí, 2: estado intermedio)
Model.State (Short): estado de la casilla de verificación (0: no, 1: sí, 2: estado intermedio)
Campos de texto
Los campos de texto permiten a los usuarios introducir números y texto. El servicio
com.sun.star.awt.UnoControlEdit constituye la base de los campos de texto.
Un campo de texto puede contener una o más líneas y puede ser editable o estar bloqueado para
entradas del usuario. Los campos de texto se pueden también utilizar como campos especiales de
moneda o numéricos, así como campos de pantalla para tareas especiales. Estos elementos de
control se basan en el servicio de Uno UnoControlEdit, por lo que su manejo en programas es
similar.
Editable (booleano): True activa la opción de introducir texto, False bloquea la opción de
entrada de texto (la propiedad no se puede llamar directamente, sino sólo a través de IsEditable)
Adicionalmente, a través del objeto modelo asociado se puede acceder a estas propiedades:
Model.Border (short): tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple)
Model.HScroll (booleano):
Model.MaxTextLen (Short): longitud máxima del texto; 0 significa sin límite de longitud
Model.HelpText (String): texto de ayuda que se muestra al situar el cursor del ratón
sobre el elemento de control
Listados
Los listados (servicio com.sun.star.awt.UnoControlListBox) admiten las propiedades
siguientes:
addItem (Item, Pos): inserta la cadena especificada en el parámetro Item en la posición Pos
de la lista
makeVisible (Pos): se desplaza en el listado hasta que la entrada especificada en Pos sea
visible
El objeto modelo de los listados ofrece las propiedades siguientes:
Model.Border (short): tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple)
La opción de VBA para emitir entradas de listado con un valor numérico adicional (ItemData) no existe
en StarOffice Basic. Si desea administrar un valor numérico (por ejemplo, un ID de base de datos) aparte
del texto de lenguaje natural, deberá crear un campo de datos auxiliar que se administre de forma paralela
al listado.
12 Formularios
En muchos sentidos, la estructura de los formularios de StarOffice se corresponde con los diálogos
comentados en el capítulo anterior. Sin embargo, hay algunas diferencias fundamentales:
Los diálogos aparecen como una única ventana de diálogo que se muestra sobre el documento
y que no permite efectuar ninguna acción que no esté relacionada con el proceso del propio
diálogo hasta finalizar éste. En cambio, los formularios se muestran directamente en el
documento como si fuesen elementos de dibujo.
Mientras que las funciones de diálogos están disponibles en todos los documentos de
StarOffice, la totalidad de las funciones de formulario sólo está disponible en documentos de
texto y hojas de cálculo.
Los elementos de control de un formulario se pueden vincular con una tabla de base de datos
externa. Esta función no está disponible en diálogos.
Los elementos de control de los diálogos y de los formularios difieren en diversos aspectos.
Los usuarios que deseen incorporar en sus formularios sus propios métodos de gestión de acciones
deberán consultar el capítulo 11 (Diálogos). Los mecanismos que se explican en él son idénticos a
los correspondientes a formularios.
Los formularios de StarOffice pueden adoptar uno de estos modos: el modo de borrador y el modo
de visualización. En modo de borrador, la posición de los elementos de control se puede modificar
y sus propiedades se pueden editar mediante una ventana de propiedades.
La barra de herramientas Funciones del formulario se utiliza también para cambiar de un modo a
otro.
193
Determinar objetos de formulario
StarOffice sitúa los elementos de control de un formulario en el nivel de objetos de dibujo. Se
puede acceder al formulario objeto en sí a través de la lista Formularios en el nivel de dibujo. En
los documentos de texto se accede a los objetos de la siguiente forma:
Doc = StarDesktop.CurrentComponent
PaginaDibujo = Doc.DrawPage
Formulario = PaginaDibujo.Forms.GetByIndex(0)
Al trabajar con hojas de cálculo se debe pasar por la etapa intermedia de la lista Hojas, ya que los
niveles de dibujo no se encuentran directamente en el documento, sino en las hojas individuales:
Doc = StarDesktop.CurrentComponent
Hoja = Doc.Sheets.GetByIndex(0)
PaginaDibujo = Hoja.DrawPage
Formulario = PaginaDibujo.Forms.GetByIndex(0)
Como el propio nombre del método GetByIndex sugiere, un documento puede contener varios
formularios. Esta característica es útil, por ejemplo, si en un solo documento se muestra el
contenido de distintas bases de datos o si en un formulario se muestra una relación de base de
datos 1:n. La opción de crear subformularios es, asimismo, útil en este sentido.
En primer lugar está el Modelo del elemento de control. Se trata del objeto clave para el
programador de StarOffice Basic en el trabajo con elementos de control en formularios.
Puesto que los elementos de control de los documentos se administran como elementos de
dibujo especiales, también existe un objeto Shape (forma) que refleja las propiedades específicas
de elemento de dibujo del elemento de control (en particular su posición y su tamaño).
Doc = StarDesktop.CurrentComponent
Formulario = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Formulario.getByName("MiListado")
Si no está seguro del formulario en el que se encuentra el elemento de control requerido puede
optar por buscarlo en todos los formularios:
Doc = StarDesktop.CurrentComponent
Formularios = Doc.Drawpage.Forms
For I = 0 To Formularios.Count - 1
Formulario = Formularios.GetbyIndex(I)
If Formulario.HasByName("MiListado") Then
Ctl = Formulario.GetbyName("MiListado")
Exit Function
End If
Next I
En el ejemplo se utiliza el método HasByName para comprobar todos los formularios de un docu-
mento de texto y determinar si contiene un modelo de elemento de control denominado MiLis-
tado. Si se encuentra un modelo que se corresponda con éste se guarda una referencia al mismo
en la variable Ctl y finaliza la búsqueda.
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Formularios = Doc.Drawpage.Forms
For I = 0 To Formularios.Count - 1
Formulario = Formularios.GetbyIndex(I)
If Formulario.HasByName("MiListado") Then
Ctl = Formulario.GetbyName("MiListado")
VisCtl = DocCrl.GetControl(Ctl)
Exit Function
End If
Next I
El código del ejemplo es muy similar al del ejemplo anterior en el que se determinaba el modelo de
un elemento de control. No sólo utiliza el objeto documento Doc, sino también el objeto
controlador de documento DocCrl que hace referencia a la ventana de documento actual. Con la
ayuda de este objeto controlador y del modelo del elemento de control, utiliza el método
GetControl para determinar la visualización (variable CtlView) del elemento de control del
formulario.
Doc = StarDesktop.CurrentComponent
For i = 0 to Doc.DrawPage.Count - 1
Shape = Doc.DrawPage(i)
If HasUnoInterfaces(Shape, _
"com.sun.star.drawing.XControlShape") Then
If Shape.Control.Name = "MiListado" Then
Exit Function
End If
End If
Next
Punto.x = 1000
Punto.y = 1000
Tamano.Width = 10000
Tamano.Height = 10000
Shape.Size = Tamano
Shape.Position = Punto
El objeto Shape del elemento de control debe ser conocido para que el código funcione. Si no es así
se deberá determinar mediante el código indicado más arriba.
A continuación se muestra una lista de las propiedades más importantes de los elementos de
control de formularios. Todas estas propiedades pertenecen a los objetos modelo asociados.
Además de los elementos de control estándar, en los formularios también está disponible un
elemento de control de tabla que permite incorporar tablas de base de datos enteras. Este elemento se
describe en la sección Formularios de base de datos del capítulo 11.
Botones
El objeto modelo de un botón de formulario ofrece las propiedades siguientes:
Tag (String): cadena que contiene información adicional que se puede guardar en el botón
para acceso controlado por programa.
TargetURL (String): URL de destino para los botones del tipo URL.
HelpText (String): texto de ayuda que se muestra automáticamente al situar el cursor del
ratón sobre el elemento de control
URL: llamada de la URL definida en TargetURL (se abre dentro de la ventana especificada
mediante TargetFrame).
Campos de opción
El objeto modelo de un campo de opción ofrece las siguientes propiedades:
Tag (String): cadena que contiene información adicional que se puede guardar en el botón
para acceso controlado por programa.
RefValue (String): cadena para guardar información adicional (por ejemplo, para
administrar ID de registros de datos).
HelpText (String): texto de ayuda que se muestra automáticamente al situar el cursor del
ratón sobre el elemento de control.
El mecanismo para agrupar campos de opción distingue entre los elementos de control de diálogos y
formularios. Mientras que los elementos de control que aparecen uno a continuación del otro en los
diálogos se combinan automáticamente para formar un grupo, en los formularios la acción de agrupar
se efectúa por nombres. Para ello, todos los campos de opción de un grupo deben contener el mismo
nombre. StarOffice combina los elementos de control agrupados en un matriz de forma que se pueda
acceder a los botones individuales de un programa de StarOffice Basic de la misma forma que antes.
Doc = StarDesktop.CurrentComponent
Formularios = Doc.Drawpage.Forms
For I = 0 To Formularios.Count - 1
Formulario = Formularios.GetbyIndex(I)
If Formulario.HasByName("MisOpciones") Then
Ctl = Formulario. GetGroupbyName("MisOpciones")
Exit Function
End If
Next I
Casillas de verificación
El objeto modelo de una casilla de verificación ofrece las propiedades siguientes:
Tag (String): cadena que contiene información adicional que se puede guardar en el botón
para acceso controlado por programa.
RefValue (String): cadena para guardar información adicional (por ejemplo, para
administrar ID de registros de datos).
HelpText (String): texto de ayuda que se muestra automáticamente al situar el cursor del
ratón sobre el elemento de control.
Campos de texto
El objeto modelo de un campo de texto de formulario ofrece las propiedades siguientes:
Align (short): orientación del texto (0: alineado a la izquierda, 1: centrado, 2: alineado a la
derecha).
Border (short): tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple).
HelpText (String): texto de ayuda que se muestra automáticamente al situar el cursor del
ratón sobre el elemento de control.
Listados
El objeto modelo de un listado de formulario ofrece las propiedades siguientes:
BackgroundColor (long): color de fondo del elemento de control.
Border (short): tipo de borde (0: sin borde, 1: borde 3D, 2: borde simple).
FontDescriptor (struct): estructura que contiene detalles de la fuente utilizada (de
acuerdo con la estructura com.sun.star.awt.FontDescriptor).
LineCount (Short): número de líneas del elemento de control.
MultiSelection (booleano): permite seleccionar varias entradas.
SelectedItems (matriz de Strings): lista de entradas resaltadas.
StringItemList (matriz de Strings): lista de todas las entradas.
ValueItemList (matriz de Variant): lista que contiene información adicional para cada
entrada (por ejemplo, para administrar ID de registros de datos).
Printable (booleano): el elemento de control se puede imprimir.
ReadOnly (booleano): el contenido del elemento de control es de sólo lectura.
Enabled (booleano): el elemento de control se puede activar
Tabstop (booleano): se puede llegar al elemento de control mediante la tecla de tabulador.
TabIndex (Long): posición del elemento de control en el orden de activación
FontName (cadena): nombre del tipo de fuente.
El usuario tiene la opción de desplazarse y buscar en las tablas y consultas seleccionadas, así como
de modificar registros de datos e insertar otros nuevos. StarOffice se asegura automáticamente que
se recuperen los datos relevantes de la base de datos y de que los cambios efectuados se escriban
en ella.
Un formulario de base de datos corresponde básicamente a un formulario estándar de StarOffice.
Además de las propiedades estándar se deben configurar en el formulario las siguientes
propiedades específicas de bases de datos:
Command (String): nombre de la tabla, consulta u orden Select de SQL con la que se debe
crear un vínculo.
TABLE: tabla
QUERY: consulta
Tablas
El elemento de control tabla es un elemento específico que se ofrece para trabajar con bases de
datos. Representa el contenido completo de una tabla o consulta de base de datos. En el caso más
sencillo, un elemento de control de tabla se vincula a una base de datos mediante el formulario del
Piloto automático, que vincula todas las columnas con los campos pertinentes de la base de datos
según las especificaciones del usuario. La API asociada es relativamente compleja, por lo que no
vamos a ofrecer aquí una descripción completa de la misma.
205
Índice
BackGraphicURL............................................................123
BackTransparent.............................................................123
A Beep....................................................................................62
Acciones................................................................................. beforeFirst........................................................................173
diálogos y formularios.............................................181 Bitmaps............................................................................139
AdjustBlue.......................................................................149 BorderBottom..................................................................134
AdjustContrast................................................................149 BorderLeft.......................................................................134
AdjustGreen....................................................................149 BorderRight.....................................................................134
AdjustLuminance...........................................................149 BorderTop.......................................................................134
AdjustRed........................................................................149 Botones...................................................................................
afterLast...........................................................................173 diálogos......................................................................187
Alignment........................................................................157 formularios................................................................197
AllowAnimations...........................................................153 BottomBorder..................................................................124
Ámbito...............................................................................28 BottomBorderDistance..................................................124
AnchorType......................................................................99 BottomMargin.................................................101, 105, 124
AnchorTypes.....................................................................99 Bucles.................................................................................34
Anotaciones........................................................................... Buscar.....................................................................................
campo en documentos de texto..............................109 en documentos de texto.............................................95
ANSI...................................................................................19 Buscar por similitud.........................................................97
Area..................................................................................158 ByRef..................................................................................39
Áreas de celdas...............................................................130 ByVal..................................................................................39
ArrangeOrder.................................................................161
ASCII..................................................................................19 C
AsTemplate.......................................................................76 Cadena...............................................................................20
Author..............................................................................109 Cadenas.................................................................................
AutoMax..........................................................................160 comparar......................................................................32
AutoMin..........................................................................161 convertir.......................................................................46
AutoOrigin......................................................................161 declarar........................................................................19
AutoStepHelp.................................................................161 editar.............................................................................49
AutoStepMain.................................................................161 vincular........................................................................31
Campos de opción................................................................
B diálogos......................................................................188
BackColor......................................................101f., 105, 123 formularios................................................................198
BackGraphicFilter...........................................................123 Campos de texto.............................................................106
BackGraphicLocation.....................................................123 diálogos......................................................................189
207
formularios................................................................200 collapseToStart..................................................................93
cancelRowUpdates.........................................................173 Collate................................................................................79
Capas................................................................................133 Columnas...............................................................................
Casillas de verificación........................................................ en hojas de cálculo....................................................113
diálogos......................................................................189 Comentarios......................................................................16
formularios................................................................200 Command........................................................................168
CBool..................................................................................46 Constantes.........................................................................31
CDate..................................................................................46 Consultas.........................................................................168
CDbl...................................................................................46 Content.............................................................................109
Celdas...............................................................................115 Conversiones implícitas y explícitas..............................45
CellAddress........................................................................... ConvertFromUrl...............................................................74
com.sun.star.table.....................................................119 ConvertToUrl....................................................................74
CellBackColor.................................................................120 CopyCount........................................................................79
CellContentType................................................................... copyRange.......................................................................118
com.sun.star.table.....................................................116 CornerRadius..................................................................144
CellFlags................................................................................ createTextCursor..............................................................91
com.sun.star.sheet....................................................132 CreateUnoDialog............................................................176
CellProperties........................................................................ CSng...................................................................................46
com.sun.star.table.....................................................120 CStr.....................................................................................46
CellRangeAddress................................................................ Cuadro de entrada ..........................................................62
com.sun.star.table.....................................................117 Currency............................................................................22
CenterHorizontally........................................................129 CustomShow...................................................................154
CenterVertically..............................................................129
ChapterFormat................................................................110 D
CharacterProperties............................................................. DatabaseContext...................................................................
com.sun.star.style.......................................................87 com.sun.star.sdb.......................................................166
CharacterSet................................................................76, 78 Date..................................................................................109
CharBackColor..................................................................87 Date........................................................................................
CharColor..........................................................................87 fecha actual del sistema.............................................54
CharFontName.................................................................87 DateTimeValue...............................................................109
CharHeight........................................................................87 Day.....................................................................................53
CharKeepTogether...........................................................87 DBG_methods...................................................................68
CharStyleName................................................................87 DBG_properties................................................................68
CharUnderline..................................................................87 DBG_supportetInterfaces................................................68
CharWeight.......................................................................87 Declaración de variable.......................................................
CInt.....................................................................................46 dominio público..........................................................29
CircleEndAngle..............................................................145 explícita........................................................................18
CircleKind.......................................................................145 global............................................................................29
CircleStartAngle.............................................................145 implícita.......................................................................17
Círculos............................................................................144 local...............................................................................28
Clave....................................................................................... privada.........................................................................30
diagramas..................................................................156 Deep.................................................................................164
CLng...................................................................................46 Definir bandeja de papel de la impresora..................123
Close...................................................................................59 Desktop..................................................................................
Códigos de control...........................................................94 com.sun.star.frame.....................................................73
collapseToEnd...................................................................93 Detalles de fecha y hora......................................................
Índice 209
FooterTopBorderDistance.............................................126 gotoStartOfSentence.........................................................92
For...Next...........................................................................34 gotoStartOfWord..............................................................92
Formas polipoligonales.................................................146 Gradient.................................................................................
Formas rectangulares.....................................................144 com.sun.star.awt.......................................................136
Format................................................................................51 Gradiente de color..........................................................136
Formato de archivo XML................................................74 GraphicColorMode........................................................149
Formato de la página.....................................................123 GraphicURL....................................................................149
Formato directo..........................................................86, 89 Guía de referencia de la API...........................................69
Formato indirecto.......................................................86, 89
Fragmentos de párrafo....................................................84 H
Funciones...........................................................................37 hasByName.......................................................................70
Funciones de conversión.................................................45 HasLegend......................................................................157
Function.............................................................................37 hasLocation.......................................................................78
HasMainTitle..................................................................156
G hasMoreElements.............................................................72
Gamma.............................................................................149 HasSecondaryXAxis......................................................160
GapWidth........................................................................161 HasSecondaryXAxisDescription..................................160
GeneralFunction................................................................... HasSubTitle.....................................................................157
com.sun.star.sheet....................................................130 HasUnoInterfaces...........................................................196
Gestión de errores............................................................41 HasXAxis.........................................................................160
GetAttr...............................................................................57 HasXAxisDescription.....................................................160
getColumns.....................................................................102 HasXAxisGrid.................................................................160
getControl........................................................................177 HasXAxisHelpGrid........................................................160
getCurrentControler......................................................196 HasXAxisTitle.................................................................160
getElementNames............................................................70 Hatch......................................................................................
getPropertyState...............................................................89 com.sun.star.drawing...............................................138
getRows...........................................................................102 HeaderBackColor...........................................................125
getTextTables..................................................................100 HeaderBackGraphicFilter.............................................126
Girar....................................................................................... HeaderBackGraphicLocation.......................................126
elementos de dibujo.................................................151 HeaderBackGraphicURL...............................................125
Global.................................................................................29 HeaderBackTransparent...............................................126
goLeft.................................................................................92 HeaderBodyDistance.....................................................125
goRight...............................................................................92 HeaderBottomBorder....................................................125
gotoEnd..............................................................................92 HeaderBottomBorderDistance.....................................125
gotoEndOfParagraph.......................................................92 HeaderFooterContent..........................................................
gotoEndOfSentence..........................................................92 com.sun.star.sheet....................................................127
gotoEndOfWord...............................................................92 HeaderHeight.................................................................125
gotoNextParagraph..........................................................92 HeaderIsDynamicHeight..............................................125
gotoNextSentence.............................................................92 HeaderIsOn.....................................................................125
gotoNextWord..................................................................92 HeaderIsShared..............................................................125
gotoPreviousParagraph...................................................92 HeaderLeftBorder..........................................................125
gotoPreviousSentence......................................................92 HeaderLeftBorderDistance...........................................125
gotoPreviousWord...........................................................92 HeaderLeftMargin.........................................................125
gotoRange..........................................................................92 HeaderRightBorder........................................................125
gotoStart.............................................................................92 HeaderRightBorderDistance.........................................125
gotoStartOfParagraph......................................................92 HeaderRightMargin.......................................................125
Índice 211
loadComponentFromURL..............................................73 Número de caracteres..........................................................
LoadLibrary....................................................................176 campo en documentos de texto..............................108
Logarithmic.....................................................................161 Número de páginas..............................................................
Long Integer......................................................................21 campo en documentos de texto..............................108
Número de palabras............................................................
M campo en documentos de texto..............................108
Map AppFont..................................................................179 Números................................................................................
Marcador...........................................................................17 comparar......................................................................32
Marcadores............................................................................ comprobar....................................................................47
com.sun.star.Text......................................................110 convertir.......................................................................46
en documentos de texto...........................................110 declarar.........................................................................21
Marcos de texto...............................................................104 formatear......................................................................51
Márgenes ........................................................................124 vincular........................................................................31
Márgenes de página.......................................................124
Marks...............................................................................161 O
Matrices.............................................................................25 ODBC...............................................................................165
cambios dinámicos en dimensiones.........................27 Offset................................................................................108
comprobar....................................................................47 On Error.............................................................................41
multidimensionales....................................................26 Opciones del método.......................................................78
simples..........................................................................25 Open ... For........................................................................59
valor especificado para el índice inicial..................26 Operadores........................................................................31
Max...................................................................................160 de comparación...........................................................32
Métodos.............................................................................67 lógicos...........................................................................31
Mid...............................................................................49, 51 matemáticos.................................................................31
Min...................................................................................160 Operadores de comparación...........................................32
Minute................................................................................53 Operadores lógicos...........................................................31
MkDir.................................................................................56 Operadores matemáticos.................................................31
Módulo...............................................................................67 Operadoress..........................................................................
Month.................................................................................53 operadores matemáticos............................................31
moveRange......................................................................118 OptimalHeight................................................................113
MsgBox..............................................................................60 OptimalWidth.................................................................113
Orientation..............................................................121, 134
N Origin...............................................................................160
Name.................................................................57, 80, 167f. Overlap............................................................................161
next...................................................................................173 Overwrite...........................................................................79
nextElement.......................................................................72
Nombres de variables......................................................17 P
Notación de URL..............................................................74 Pages..................................................................................79
Now....................................................................................54 PageStyle.........................................................................112
Number............................................................................134 Página actual.........................................................................
NumberFormat...............................................109, 121, 161 campo en documentos de texto..............................108
NumberFormatsSupplier..............................................167 Páginas de códigos...........................................................19
NumberingType.............................................................108 PaperFormat......................................................................80
NumberOfLines..............................................................164 PaperOrientation..............................................................80
Número de capítulo............................................................. PaperSize...........................................................................80
campo en documentos de texto..............................110 ParaAdjust.........................................................................88
Índice 213
en código fuente..........................................................15 StyleFamilies.....................................................................81
SDBC................................................................................165 StyleFamily............................................................................
SearchBackwards.............................................................96 com.sun.star.style.......................................................81
SearchCaseSensitive.........................................................96 Sub......................................................................................39
SearchDescriptor.................................................................. Subtitle.............................................................................157
com.sun.star.util..........................................................95 Subtítulo.................................................................................
SearchRegularExpression................................................96 diagramas..................................................................156
SearchSimilarity................................................................96 supportsService................................................................68
SearchSimilarityAdd........................................................96 SuppressVersionColumns.............................................167
SearchSimilarityExchange...............................................96 SymbolBitmapURL........................................................163
SearchSimilarityRelax......................................................96 SymbolSize......................................................................163
SearchSimilarityRemove.................................................96 SymbolType....................................................................163
SearchStyles.......................................................................96
SearchWords.....................................................................96 T
Second................................................................................53 TableColumns.......................................................................
SecondaryXAxis.............................................................160 com.sun.star.table.....................................................113
Select...Case.......................................................................33 TableFilter........................................................................167
Separación silábica...........................................................95 TableRows.............................................................................
Servicios.............................................................................67 com.sun.star.table.....................................................113
SetAttr................................................................................58 TableTypeFilter...............................................................167
Shadow............................................................................143 TextAutoGrowHeight....................................................142
ShadowColor..................................................................143 TextAutoGrowWidth.....................................................142
ShadowFormat.......................................................120, 124 TextBreak.........................................................................161
ShadowTransparence....................................................143 TextCanOverlap.............................................................161
ShadowXDistance..........................................................143 TextContent...........................................................................
ShadowYDistance..........................................................143 com.sun.star.text.........................................................99
ShearAngle......................................................................151 TextCursor.........................................................................91
Shell....................................................................................63 TextField................................................................................
Single..................................................................................21 com.sun.star.text.......................................................106
Sombreados de la página..............................................124 TextFrame..............................................................................
Sort.....................................................................................79 com.sun.star.text.......................................................104
SplineOrder.....................................................................163 TextHorizontalAdjust....................................................142
SplineResolution.............................................................163 TextLeftDistance.............................................................142
SplineType.......................................................................163 TextLowerDistance........................................................142
SpreadsheetDocument......................................................... Textproperty.........................................................................
com.sun.star.sheet....................................................111 of drawing objects.....................................................141
SQL...................................................................................165 TextRightDistance..........................................................142
Stacked.............................................................................163 TextRotation............................................................157, 161
StackedBarsConnected..................................................164 TextTable...............................................................................
StarDesktop.......................................................................73 com.sun.star.text.................................................84, 100
start...................................................................................153 TextUpperDistance........................................................142
StartWithNavigator........................................................154 TextVerticalAdjust.........................................................142
StepHelp..........................................................................160 TextWrap...........................................................................99
StepMain..........................................................................160 Time....................................................................................54
store....................................................................................77 Tipos de variable..................................................................
String................................................................................157 detalles de fecha y hora.............................................25
W
Wait....................................................................................63
Wall..................................................................................158
WeekDay...........................................................................53
Width...............................................101, 105, 113, 123, 134
Índice 215