Guía de BASIC LibreOffice


Estaba creando un programa en Basic de Libreoffice y decidí profundizar en el modelo com.sun.star pero no encontré documentación en español, así que decidí mejorar algunos pocos que encontré junto con el manual en ingles, aquí les dejo algunas partes mejoradas.


com.sun.star, esta palabra quiere decir:
"Son los servicios comunes (com)  que la empresa Sun Microsystem (.sun),  desarrollo para el programa Star Office (.star),  es por eso que todos los servicios que utilizan esta librería llamada UNO,  deben de empezar con esta palabra “com.sun.star” ".
module frame:
Es el interfaz hacia el entorno de escritorio.









Guía de BASIC Openoffice.org


  • El lenguaje de Basic OpenOffice.org
  • Biblioteca de ejecución
  • Introducción a la API
  • Trabajar con documentos(Solo Título)
  • Documentos de Texto
    • La estructura de los documentos de texto(Solo Título)
    • Edición de documentos de texto
    • Más que solo texto(Solo Título)
  • Documentos de hoja de cálculo
  • Dibujos y Presentaciones
  • Gráficos (Diagramas)
  • Bases de datos
  • Diálogos
  • Formularios

Trabajar con documentos


Documentos de Texto

Además de las cadenas puras, los documentos de texto también contienen información de formato. Estos pueden aparecer en cualquier punto del texto. La estructura se complica aún más por las tablas. Estos incluyen no sólo las cadenas unidimensionales, sino también los campos bidimensionales. La mayoría de los programas de procesamiento de textos ahora ofrecen finalmente la opción de colocar objetos de dibujo, marcos de texto y otros objetos dentro de un texto. Estos pueden estar fuera del flujo de texto y pueden colocarse en cualquier parte de la página.
Este capítulo presenta las interfaces y servicios centrales de los documentos de texto.
  • La estructura de los documentos de texto
  • Edición de documentos de texto
  • Más que solo texto
La primera sección trata de la anatomía de los documentos de texto y se concentra en cómo se puede utilizar un programa OpenOffice.org Basic para realizar pasos iterativos a través de un documento de OpenOffice.org. Se centra en párrafos, porciones de párrafos y su formato.
La segunda sección se centra en trabajar eficientemente con documentos de texto. Para ello, OpenOffice.org proporciona varios objetos de ayuda, como el objeto TextCursor, que se extienden más allá de los especificados en la primera sección.
La tercera sección va más allá del trabajo con los textos. Se concentra en tablas, marcos de texto, campos de texto, marcadores, directorios de contenido y mucho más.
La información sobre cómo crear, abrir, guardar e imprimir documentos se describe en Trabajar con documentos, ya que puede utilizarse no sólo para documentos de texto, sino también para otros tipos de documentos.

La Estructura de los Documentos de Texto




Edición de Documentos de Texto

La sección anterior ya ha discutido toda una gama de opciones para editar documentos de texto, centrándose en los servicios com.sun.star.text.TextPortion y com.sun.star.text.Paragraph, que otorgan acceso a partes de párrafo, así como párrafos . Estos servicios son apropiados para aplicaciones en las que el contenido de un texto se va a editar en un paso a través de un bucle. Sin embargo, esto no es suficiente para muchos problemas. OpenOffice.org proporciona el servicio com.sun.star.text.TextCursor para tareas más complicadas, incluyendo navegar hacia atrás dentro de un documento o navegacion basada en frases y palabras en lugar de TextPortions.
Contenido
  1. El TextCursor
    • Navegación dentro de un texto
    • Formatear texto con TextCursor
    • Recuperación y modificación de contenido de texto
    • Inserción de códigos de control
  2. Búsqueda de partes de texto
    • Ejemplo: Similarity Search
  3. Sustitución de partes de texto
    • Ejemplo: buscar y reemplazar texto con expresiones regulares


El TextCursor

Un TextCursor en la API de OpenOffice.org es comparable con el cursor visible usado en un documento de OpenOffice.org. Marca un cierto punto dentro de un documento de texto y se puede navegar en varias direcciones a través del uso de comandos. Sin embargo, los objetos TextCursor disponibles en OpenOffice.org Basic no deben confundirse con el cursor visible. Estas son dos cosas muy diferentes.
El objeto TextCursor de OpenOffice.org, por ejemplo, proporciona métodos para navegar y cambiar texto que se incluyen en el objeto Range en VBA (por ejemplo, MoveStart, MoveEnd, InsertBefore, InsertAfter). Las contrapartes correspondientes del objeto TextCursor en OpenOffice.org se describen en las siguientes secciones.
🔵   VBA: La terminología difiere de la utilizada en VBA: En términos de alcance de la función, el objeto Range de VBA se puede comparar con el objeto TextCursor en OpenOffice.org y no - como el nombre posiblemente sugiere - con el objeto Range en OpenOffice.org .


Navegación dentro de un texto
El objeto TextCursor en OpenOffice.org Basic actúa independientemente del cursor visible en un documento de texto. Un cambio de posición controlado por programa de un objeto TextCursor no tiene ningún impacto en el cursor visible. Varios objetos TextCursor se pueden abrir incluso para el mismo documento y se utilizan en varias posiciones, que son independientes entre sí.
Se crea un objeto TextCursor mediante la llamada createTextCursor:
Dim Doc As Object
Dim Cursor As Object

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor()


El objeto Cursor creado de esta forma admite el servicio com.sun.star.text.TextCursor, que a su vez proporciona una amplia gama de métodos para navegar dentro de los documentos de texto. El siguiente ejemplo mueve primero los diez caracteres de TextCursor a la izquierda y luego tres caracteres a la derecha:
Cursor.goLeft(10, False)
Cursor.goRight(3, False)
Un TextCursor puede resaltar un área completa. Esto se puede comparar con resaltar un punto en el texto usando el ratón. El parámetro False en la llamada de función anterior especifica si se resalta el área pasada con el movimiento del cursor. Por ejemplo, el TextCursor en el ejemplo siguiente:
Cursor.goRight(10, False)
Cursor.goLeft(3, True)
Primero mueve diez caracteres a la derecha sin resaltar, y luego retrocede tres caracteres y resalta esto. El área resaltada por el TextCursor comienza después del séptimo carácter en el texto y termina después del décimo carácter.
Estos son los métodos centrales que ofrece el servicio com.sun.star.text.TextCursor para la navegación:
goLeft(Count, Expand)
Salta Count caracteres a la izquierda.
goRight(Count, Expand)
Salta Count caracteres a la derecha.
gotoStart(Expand)
Salta al principio del documento de texto.
gotoEnd(Expand)
Salta al final del documento de texto.
gotoRange(TextRange, Expand)
Salta al objeto TextRange especificado.
gotoStartOfWord(Expand)
Salta al inicio de la palabra actual.
gotoEndOfWord(Expand)
Salta al final de la palabra actual.
gotoNextWord(Expand)
Salta al inicio de la siguiente palabra.
gotoPreviousWord(Expand)
Salta al inicio de la palabra anterior.
isStartOfWord()
Devuelve True si TextCursor está al principio de una palabra.
isEndOfWord()
Devuelve True si TextCursor está al final de una palabra.
gotoStartOfSentence(Expand)
Salta al comienzo de la oración actual.
gotoEndOfSentence(Expand)
Salta al final de la oración actual.
gotoNextSentence(Expand)
Salta al comienzo de la oración siguiente.
gotoPreviousSentence(Expand)
Salta al comienzo de la oración anterior.
isStartOfSentence()
Devuelve True si TextCursor está al inicio de una oración.
isEndOfSentence()
Devuelve True si TextCursor está al final de una oración.
gotoStartOfParagraph(Expand)
Salta al principio del párrafo actual.
gotoEndOfParagraph(Expand)
Salta al final del párrafo actual.
gotoNextParagraph(Expand)
Salta al comienzo del siguiente párrafo.
gotoPreviousParagraph(Expand)
Salta al principio del párrafo anterior.
isStartOfParagraph()
Devuelve True si el TextCursor está al principio de un párrafo.
isEndOfParagraph()
Devuelve True si TextCursor se encuentra al final de un párrafo.
El texto se divide en frases sobre la base de símbolos de oraciones. Los periodos son, por ejemplo, interpretados como símbolos que indican el final de las oraciones. (En inglés, por lo menos, deben ser seguidos por un espacio, pestaña o regreso para que esto funcione.)
El parámetro Expand es un valor booleano que especifica si el área pasada durante la navegación debe resaltarse. Todos los métodos de navegación devuelven un parámetro booleano que especifica si la navegación ha sido satisfactoria o si la acción se ha terminado por falta de texto.
La siguiente es una lista de varios métodos para editar áreas resaltadas utilizando un TextCursor y que también admiten el servicio com.sun.star.text.TextCursor:
CollapseToStart()
Quita el resaltado y posiciona el TextCursor al inicio del área previamente resaltada.
CollapseToEnd()
Quita el resaltado y posiciona el TextCursor al final del área previamente resaltada.
IsCollapsed()
Devuelve True si TextCursor no cubre ningún resaltado en este momento.
Formatear texto con TextCursor
El servicio com.sun.star.text.TextCursor admite todas las propiedades de párrafo y carácter que se presentaron al principio de este capítulo.
El ejemplo siguiente muestra cómo se pueden utilizar estos en combinación con un TextCursor. Se pasa a través de un documento completo y se da formato a la primera palabra de cada oración en negrita.
Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor

Do
 Cursor.gotoEndOfWord(True)
 Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
 Proceed = Cursor.gotoNextSentence(False)
 Cursor.gotoNextWord(False)
Loop While Proceed
El ejemplo, primero crea un objeto documento para el texto que acaba de abrirse. Luego itera a través de todo el texto, frase por frase, y destaca cada una de las primeras palabras y los formatos en negrita.
Recuperación y modificación de contenido de texto
Si un TextCursor contiene un área resaltada, este texto está disponible por medio de la propiedad String del objeto TextCursor. El ejemplo siguiente utiliza la propiedad String para mostrar las primeras palabras de una oración en un cuadro de mensaje:
Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor

Do
 Cursor.gotoEndOfWord(True)
 MsgBox Cursor.String
 Proceed = Cursor.gotoNextSentence(False)
 Cursor.gotoNextWord(False)
Loop While Proceed
La primera palabra de cada frase se puede modificar de la misma manera utilizando la propiedad String:
Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor

Do
 Cursor.gotoEndOfWord(True)
 Cursor.String = "Ups"
 Proceed = Cursor.gotoNextSentence(False)
 Cursor.gotoNextWord(False)
Loop While Proceed
Si TextCursor contiene un área resaltada, una asignación a la propiedad String reemplaza esto con el nuevo texto. Si no hay ningún área resaltada, el texto se inserta en la posición TextCursor actual.
Inserción de códigos de control
En algunas situaciones, no es el texto real de un documento, sino su estructura que necesita ser modificada. OpenOffice.org proporciona códigos de control para este propósito. Estos se insertan en el texto e influyen en su estructura. Los códigos de control están definidas en el grupo de constantes com.sun.star.text.ControlCharacter. Los siguientes códigos de control están disponibles en OpenOffice.org:
PARAGRAPH_BREAK
Salto de párrafo
LINE_BREAK
Salto de línea dentro de un párrafo.
SOFT_HYPHEN
Posible punto de silabeo.
HARD_HYPHEN
Punto obligatorio de silabeo
HARD_SPACE
Espacio protegido que no está expandido o comprimido en texto justificado.
Para insertar los códigos de control, necesita no sólo el cursor, sino también los objetos de documento de texto asociados. El ejemplo siguiente inserta un párrafo después del carácter 20 de un texto:
Dim Doc As Object   
Dim Cursor As Object
Dim Proceed As Boolean

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor
Cursor.goRight(20, False)
Doc.Text.insertControlCharacter(Cursor, _
   com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
El parámetro False en la llamada del método insertControlCharacter asegura que el área resaltada actualmente por el TextCursor permanezca después de la operación de inserción. Si se pasa el parámetro True aquí, entonces insertControlCharacter reemplaza el texto actual.

Búsqueda de partes de texto

En muchos casos, es el caso que un texto debe ser buscado para un término particular y el punto correspondiente necesita ser corregido. Todos los documentos de OpenOffice.org proporcionan una interfaz especial para este propósito, y esta interfaz siempre funciona de acuerdo con el mismo principio: Antes de un proceso de búsqueda, primero debe crearse lo que comúnmente se conoce como un SearchDescriptor. Esto define lo que OpenOffice.org busca en un documento. Un SearchDescriptor es un objeto que admite com.sun.star.util.SearchDescriptor y se puede crear mediante el método createSearchDescriptor de un documento:
Dim SearchDesc As Object
SearchDesc = Doc.createSearchDescriptor
Una vez que se ha creado el descriptor de búsqueda, recibe el texto a buscar:
SearchDesc.searchString="any text"
En términos de su función, el SearchDescriptor se compara mejor con el cuadro de diálogo de búsqueda de OpenOffice.org. De forma similar a la ventana de búsqueda, la configuración necesaria para una búsqueda se puede establecer en el objeto SearchDescriptor.
Las propiedades son proporcionadas por el servicio com.sun.star.util.SearchDescriptor:
SearchBackwards (Boolean)
Busca a través del texto hacia atrás en lugar de hacia adelante.
SearchCaseSensitive (Boolean)
Toma en cuenta los caracteres en mayúsculas y minúsculas durante la búsqueda.
SearchRegularExpression (Boolean)
Trata la expresión de búsqueda como una expresión regular.
SearchStyles (Boolean)
Busca en el texto la plantilla de párrafo especificada.
SearchWords (Boolean)
Sólo busca palabras completas.
La función OpenOffice.org SearchSimilarity (o "fuzzy match") también está disponible en OpenOffice.org Basic. Con esta función, OpenOffice.org busca una expresión que puede ser similar pero no exactamente igual que la expresión de búsqueda. El número de caracteres adicionales, eliminados y modificados para estas expresiones puede definirse individualmente. Estas son las propiedades asociadas del servicio com.sun.star.util.SearchDescriptor:
SearchSimilarity(Boolean)
Realiza una búsqueda de similitud.
SearchSimilarityAdd(Short)
Número de caracteres que se pueden agregar para una búsqueda de similitud.
SearchSimilarityExchange(Short)
Número de caracteres que pueden ser reemplazados como parte de una búsqueda de similitud.
SearchSimilarityRemove(Short)
Número de caracteres que pueden ser eliminados como parte de una búsqueda de similitud.
SearchSimilarityRelax(Boolean)
Toma todas las reglas de desviación en consideración al mismo tiempo para la expresión de búsqueda.
Una vez que SearchDescriptor se ha preparado según lo solicitado, se puede aplicar al documento de texto. Los documentos de OpenOffice.org proporcionan los métodos findFirst y findNext para este propósito:
Found = Doc.findFirst (SearchDesc)

Do Until IsNull(Found)
 ' Edit search results...
 Found = Doc.findNext( Found.End, SearchDesc)
Loop
El ejemplo encuentra todas las coincidencias en un bucle y devuelve un objeto TextRange, que se refiere al pasaje de texto encontrado.
Ejemplo: Similarity Search
Este ejemplo muestra cómo se puede buscar en un texto la palabra "turnover" y los resultados se formatean en negrita. Una búsqueda de similitud se utiliza para que no sólo la palabra "turnover", sino también se encuentren la forma plural "turnovers" y declinaciones como "turnover’s". Las expresiones encontradas difieren en hasta dos letras de la expresión de búsqueda:
Dim SearchDesc As Object
Dim Doc As Object

Doc = ThisComponent
SearchDesc = Doc.createSearchDescriptor
SearchDesc.SearchString="turnover"
SearchDesc.SearchSimilarity = True
SearchDesc.SearchSimilarityAdd = 2
SearchDesc.SearchSimilarityExchange = 2
SearchDesc.SearchSimilarityRemove = 2
SearchDesc.SearchSimilarityRelax = False
Found = Doc.findFirst (SearchDesc)

Do Until IsNull(Found)
 Found.CharWeight = com.sun.star.awt.FontWeight.BOLD
 Found = Doc.findNext( Found.End, SearchDesc)
Loop


🔵    VBA: La idea básica de buscar y reemplazar en OpenOffice.org es comparable a la utilizada en VBA. Ambas interfaces le proporcionan un objeto, a través del cual se pueden definir las propiedades para buscar y reemplazar. Este objeto se aplica entonces al área de texto requerida para realizar la acción. Mientras que el objeto auxiliar responsable en VBA se puede alcanzar a través de la propiedad Find del objeto Range, en OpenOffice.org Basic se crea mediante la llamada createSearchDescriptor o createReplaceDescriptor del objeto documento. Incluso difieren las propiedades de búsqueda y los métodos.


Al igual que en la API antigua de OpenOffice.org, la búsqueda y sustitución de texto en la nueva API también se realiza utilizando el objeto documento. Mientras que anteriormente había un objeto llamado SearchSettings especialmente para definir las opciones de búsqueda, en las nuevas búsquedas con objetos se realizan ahora usando un objeto SearchDescriptor o ReplaceDescriptor para reemplazar automáticamente el texto. Estos objetos cubren no sólo las opciones, sino también el texto de búsqueda actual y, si es necesario, el reemplazo de texto asociado. Los objetos descriptor se crean utilizando el objeto documento, se completan de acuerdo con las solicitudes relevantes y se transfieren de nuevo al objeto documento como parámetros para los métodos de búsqueda.

Sustitución de partes de texto

Al igual que con la función de búsqueda, la función de sustitución de OpenOffice.org también está disponible en OpenOffice.org Basic. Las dos funciones se manejan de forma idéntica.   Para un proceso de reemplazo, también se necesita primero, un objeto especial que registra los parámetros para el proceso. Se llama ReplaceDescriptor y admite el servicio com.sun.star.util.ReplaceDescriptor. Todas las propiedades del descriptor de búsqueda descrito en el párrafo anterior también son compatibles con ReplaceDescriptor. Por ejemplo, durante un proceso de reemplazo, la sensibilidad a mayúsculas y minúsculas también se puede activar y desactivar, y se pueden realizar búsquedas de similitud.
El siguiente ejemplo demuestra el uso de ReplaceDescriptors para una búsqueda dentro de un documento de OpenOffice.org.
Dim I As Long
Dim Doc As Object
Dim Replace As Object
Dim BritishWords(5) As String
Dim USWords(5) As String

BritishWords() = Array("colour", "neighbour", "centre", "behaviour", "metre", "through")
USWords() = Array("color", "neighbor", "center", "behavior", "meter", "thru")

Doc = ThisComponent
Replace = Doc.createReplaceDescriptor

For I = 0 To 5
 Replace.SearchString = BritishWords(I)
 Replace.ReplaceString = USWords(I)
 Doc.replaceAll(Replace)
Next I
Las expresiones para buscar y reemplazar se establecen utilizando las propiedades SearchString y ReplaceString de ReplaceDescriptors. El proceso de reemplazo real se implementa finalmente utilizando el método replaceAll del objeto documento, que reemplaza todas las apariciones de la expresión de búsqueda.
Ejemplo: buscar y reemplazar texto con expresiones regulares
La función de reemplazo de OpenOffice.org es particularmente eficaz cuando se usa junto con expresiones regulares. Estos proporcionan la opción de definir una expresión de búsqueda variable con Place Holders y caracteres especiales en lugar de un valor fijo.
Las expresiones regulares soportadas por OpenOffice.org se describen en detalle en la sección de ayuda en línea de OpenOffice.org. Aquí están algunos ejemplos:
  • Un período dentro de una expresión de búsqueda representa cualquier carácter. La expresión de búsqueda "sh.rt" por lo tanto puede ser para “shirt” o para “short”.
  • El carácter ^ marca el comienzo de un párrafo. Por lo tanto, todas las apariciones del nombre Peter que están al inicio de un párrafo pueden ser encontradas usando la expresión de búsqueda “^Peter”.
  • El carácter $ marca un final de párrafo. Todas las apariciones del nombre Peter que se encuentran al final de un párrafo pueden ser encontradas usando la expresión de búsqueda “Peter$”.
  • Un * indica que el carácter precedente se puede repetir cualquier número de veces. Se puede combinar con el período como un Place Holder para cualquier carácter. La expresión “temper.*”, por ejemplo, puede representar las expresiones “temperancia” y “temperatura”.
El siguiente ejemplo muestra cómo se pueden eliminar todas las líneas vacías de un documento de texto con la ayuda de la expresión regular ^$:
Dim Doc As Object
Dim Replace As Object
Dim I As Long

Doc = ThisComponent
Replace = Doc.createReplaceDescriptor
Replace.SearchRegularExpression = True
Replace.SearchString = "^$"
Replace.ReplaceString = ""

Doc.replaceAll(Replace)


Más que solo texto





No hay comentarios:

Publicar un comentario

Gracias por participar

GIMP: Trabajando con Python en GIMP

Vamos a trabajar con python desde gimp, para esto vamos a abrir algun archivo XCF con imagenes. Luego abrir la consola en el menu Filtros -...