Macros/Writer/007/es

From The Document Foundation Wiki
< Macros‎ | Writer
Jump to navigation Jump to search
This page is a translated version of the page Macros/Writer/007 and the translation is 100% complete.
Other languages:
English • ‎español • ‎français • ‎italiano

Descripción

Esta en Basic para Writer identifica el texto contenido entre dos cadenas de límite (es decir, una "etiqueta de inicio" y una "etiqueta de fin"). Por ejemplo, el texto que se encuentra entre el principio y el final de una explicación.

El principio es buscar una "etiqueta de inicio" única que proporcione una posición de inicio para buscar la "etiqueta de fin". Estas dos posiciones se seleccionan mediante el cursor visible desde el final de la "etiqueta de inicio" hasta el comienzo de la "etiqueta de fin".

La búsqueda se realiza usando el método createSearchDescriptor de com.sun.star.util.XSearchable[1] mediante el servicio com.sun.star.util.SearchDescriptor [2] para definir las propiedades de la búsqueda, que incluyen: buscar texto, sensible a las mayúsculas, uso de expresiones regulares, etc.

El servicio com.sun.star.text.XTextViewCursor'[3] que se utiliza para mostrar el texto localizado

Código

En el siguiente código, las etiquetas de inicio y fin son "inicio de la explicación" y "fin de la explicación", respectivamente.

Option Explicit

Sub SearchText()
    '''Buscar y resaltar texto encontrado entre dos etiquetas'''

    Dim oDoc As Object ' com.sun.star.text.GenericTextDocument, com.sun.star.util.XSearchable
    Dim oSearchZone As Object ' com.sun.star.util.SearchDescriptor
    Dim oFoundZone As Object ' com.sun.star.uno.XInterface
    Dim oFoundAfterZone As Object ' com.sun.star.uno.XInterface
    Dim oCursVisible As Object ' com.sun.star.text.XTextViewCursor

    oDoc = ThisComponent ' com.sun.star.util.XSearchable compliant document
    oSearchZone = oDoc.createSearchDescriptor()
    With oSearchZone ' com.sun.star.util.SearchDescriptor
        .SearchString = "comienzo de la explicacion"
    End With
    oFoundZone = oDoc.findFirst(oSearchZone)

    If Not(IsNull(oFoundZone)) Then
        With oSearchZone ' com.sun.star.util.SearchDescriptor
            .SearchString = "fin de la explicacion"
        End With
        oFoundAfterZone = oDoc.findNext(oFoundZone.End, oSearchZone)
        If Not(IsNull(oFoundAfterZone)) Then
            oCursVisible = oDoc.currentcontroller.viewCursor
            With oCursVisible ' com.sun.star.text.text.XTextViewCursor
                .gotoRange(oFoundZone.End, false)
                .gotoRange(oFoundAfterZone.Start, True)
                MsgBox .String, MB_ICONINFORMATION, "¡Se encontró el texto!"
            End With
        Else
            MsgBox "NO se encontró la etiqueta final", MB_ICONINFORMATION, "Búsqueda de texto"
        End If
    Else
        MsgBox "NO se encontró la etiqueta de inicio", MB_ICONINFORMATION, "Búsqueda de texto"
    End If

End Sub ' SearchText

con Pythonː

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

MB_ICONINFORMATION = 64

def SearchText():
    """Buscar 1 Resaltar texto encontrado entre dos etiquetas
    
    oSearchZone         com.sun.star.util.SearchDescriptor
    oFound(After)Zone   com.sun.star.uno.XInterface
    oCursVisible        com.sun.star.text.XTextViewCursor
    """
    oDoc = XSCRIPTCONTEXT.getDocument()  # documento compatible con: com.sun.star.util.XSearchable
    oSearchZone = oDoc.createSearchDescriptor()
    oSearchZone.SearchString = "comienzo de la explicacion"
    oFoundZone = oDoc.findFirst(oSearchZone)
    if oFoundZone:
        oSearchZone.SearchString = 'fin de la explicacion'
        oFoundAfterZone = oDoc.findNext(oFoundZone.End, oSearchZone)
        if oFoundAfterZone:
            oCursVisible = oDoc.CurrentController.ViewCursor
            oCursVisible.gotoRange(oFoundZone.End, False)
            oCursVisible.gotoRange(oFoundAfterZone.Start, True)
            MsgBox(oCursVisible.String,MB_ICONINFORMATION, "¡Se encontró el texto!")
        else:
            MsgBox('NO se encontró la etiqueta final',MB_ICONINFORMATION, "Búsqueda de texto")
    else:
        MsgBox("NO se encontró la etiqueta de inicio",MB_ICONINFORMATION, 'Búsqueda de texto')

def MsgBox(prompt="", buttons=MB_ICONINFORMATION, title=""):  # Búsqueda de texto
    pass

El archivo de salida estándar de Python no está disponible cuando se ejecutan macros de Python. La página de ayuda Entrada/Salida en Pantalla expone otras alternativas.

Documento ODT para probar la macro

Notas

  1. Consulte la documentación de la API para la interfaz com.sun.star.util.XSearchable
  2. Consulte la documentación de la API para el servicio com.sun.star.util.SearchDescriptor
  3. Consulte la documentación de la API para el serviciocom.sun.star.text.XTextViewCursor