Macros/Writer/007/es

    From The Document Foundation Wiki
    < Macros‎ | Writer
    This page is a translated version of the page Macros/Writer/007 and the translation is 100% complete.


    Other languages:

    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