Macros/Writer/007/es
TDF LibreOffice en español Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Preguntas y respuestas Donar
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
- ↑ Consulte la documentación de la API para la interfaz com.sun.star.util.XSearchable
- ↑ Consulte la documentación de la API para el servicio com.sun.star.util.SearchDescriptor
- ↑ Consulte la documentación de la API para el serviciocom.sun.star.text.XTextViewCursor