Página 1 de 1

[RESUELTO] Buscar y seleccionar texto en Writer

Publicado: Vie Ene 30, 2015 11:33 pm
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

Re: Buscar y seleccionar texto en Writer

Publicado: Sab Ene 31, 2015 4:43 pm
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.

Re: Buscar y seleccionar texto en Writer

Publicado: Sab Ene 31, 2015 6:32 pm
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?

Re: Buscar y seleccionar texto en Writer

Publicado: Lun Feb 02, 2015 3:27 pm
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);