[RESUELTO] Buscar y seleccionar texto en Writer

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
jirayacr
Mensajes: 6
Registrado: Vie Ene 30, 2015 8:36 pm

[RESUELTO] Buscar y seleccionar texto en Writer

Mensaje por jirayacr »

Buenas gente,

Soy nuevo en el foro, y vengo a pedir ayuda aquí como último recurso. Actualmente estoy desarrollando un proyecto en C# realizando una "interfaz" para que otras aplicaciones puedan manipular documentos en OpenOffice, el problema es con la funcionalidad de "buscar texto", ya que mi código según busca el texto (no devuelve errores), pero no se selecciona el texto buscado en el documento. Esta es la función de busqueda:

Código: Seleccionar todo


XTextDocument xTextDocument = (XTextDocument)_Documento; // _Documento es de tipo "XComponent"
XSearchable xSearchable = (XSearchable)xTextDocument;

XSearchDescriptor xSearchDescriptor = xSearchable.createSearchDescriptor();

xSearchDescriptor.setSearchString("texto_A_Buscar");

xSearchable.findFirst(xSearchDescriptor);

La función "findFirst" devuelve una variable de tipo "Object", sin embargo no se que hacer con eso. No se como hacer que seleccione el texto encontrado, o si se debería seleccionar "solo".

Les agradezco cualquier ayuda que me puedan brindar. :super:

Nota:
Para hacer esa función me guie con este ejemplo: http://www.openoffice.org/api/docs/comm ... hable.html



Editado por RMG: Título en mayúsculas
Última edición por mauricio el Lun Feb 02, 2015 3:31 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
LibreOffice 5.2 en Windows 10
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Buscar y seleccionar texto en Writer

Mensaje por SLV-es »

Hola

Te recomiendo que busques en los foros, especialmente en los ingleses, donde es posible que encuentres soluciones.

Por ejemplo, quizás esta te dé ideas: http://www.oooforum.org/forum/viewtopic.phtml?t=5732

Nota: oooforum tarda en cargarse; ten paciencia y reintenta.

Saludos

Para los nuevos usuarios del foro:
Te damos la bienvenida a este foro. Esperamos poder ayudarte y que tus aportaciones ayuden también a otros.
Dado que recien has desembarcado en esta costa, te recomiendo que leas la Guía de supervivencia del foro :super: .
Si con las respuestas obtenidas consideras que se ha dado solución a tu consulta :), por favor, marca el tema como [RESUELTO],
(aunque la solución obtenida sea que no la hay :(, o hayas resuelto tú mism@ el problema :bravo: ).
Si no sabes cómo, por favor, lee Como marcar como [RESUELTO] un tema.

Gracias por participar en el foro y ayudar a que todo esté ordenado.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Buscar y seleccionar texto en Writer

Mensaje por FJCC-ES »

El método findFirst() devuelve un TextRange. Puede seleccionar el TextRange con el método select() del CurrentController. En Basic el código es

Código: Seleccionar todo

oDoc = ThisComponent
SDesc = oDoc.createSearchDescriptor()
SDesc.setSearchString("nervously")
textRange = oDoc.findFirst(SDesc)
CurrContrl = oDoc.getCurrentController()
CurrContrl.select(textRange)
Que quiere hacer con el texto después?
jirayacr
Mensajes: 6
Registrado: Vie Ene 30, 2015 8:36 pm

Re: Buscar y seleccionar texto en Writer

Mensaje por jirayacr »

Gracias por este aporte, sin embargo, el componente XController no cuenta con el método select() según se puede ver en la descripción de la interfaz (https://www.openoffice.org/api/docs/com ... oller.html)
FJCC-ES escribió:El método findFirst() devuelve un TextRange. Puede seleccionar el TextRange con el método select() del CurrentController. En Basic el código es

Código: Seleccionar todo

oDoc = ThisComponent
SDesc = oDoc.createSearchDescriptor()
SDesc.setSearchString("nervously")
textRange = oDoc.findFirst(SDesc)
CurrContrl = oDoc.getCurrentController()
CurrContrl.select(textRange)
Que quiere hacer con el texto después?
Como buen geek ( :ucrazy: ) busqué un poco más (relacionado con la propuesta anterior), y enontré la interfaz XSelectionSupplier que sí contiene el método .select(), pero este método recibe un objeto tipo uno.Any.
Por lo tanto cree un objeto de dicho tipo asignándole el valor del xTextRange, y al realizar la prueba respectiva funcionó :D :bravo:

A continuación comparto el código con la solución:

Código: Seleccionar todo


 XTextDocument xTextDocument = (XTextDocument)_Documento;
XSearchable xSearchable = (XSearchable)xTextDocument;

XSearchDescriptor xSearchDescriptor = xSearchable.createSearchDescriptor();

xSearchDescriptor.setSearchString(textoABuscar);

xTextRange = (XTextRange)xSearchable.findFirst(xSearchDescriptor);

xModel = (XModel)_Documento;
xController = xModel.getCurrentController();
XSelectionSupplier xSelectionSupplier = (XSelectionSupplier)xController;

uno.Any textoEncontrado = new uno.Any(typeof(XTextRange), xTextRange);

xSelectionSupplier.select(textoEncontrado);

LibreOffice 5.2 en Windows 10
Responder