Seite 1 von 1

Rückgabe weiterverarbeiten von XSearchable. findFirst()

Verfasst: Fr, 07.07.2006 10:06
von ezuehlke
Hallo,

ich suche innerhalb eines Dokumentes ein bestimmtes Wort, hierfür nutze ich den XSearchDescriptor.

Code: Alles auswählen

  private Object wortSuchen(String gesucht) {
    Object range = null;
    try {
      XTextDocument xTextDocument = 
        (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, xDocument);
      
      XSearchable xSearchable = 
        (com.sun.star.util.XSearchable)
          UnoRuntime.queryInterface(
            com.sun.star.util.XSearchable.class, xTextDocument);

      XSearchDescriptor xSearchDescr = 
        (com.sun.star.util.XSearchDescriptor)
           xSearchable.createSearchDescriptor();

      xSearchDescr.setSearchString(gesucht);
      
      XPropertySet xSearchProp = 
        (com.sun.star.beans.XPropertySet)
           UnoRuntime.queryInterface(
             com.sun.star.beans.XPropertySet.class, xSearchDescr);
      xSearchProp.setPropertyValue("SearchCaseSensitive",new Boolean(true));
      xSearchProp.setPropertyValue("SearchWords",new Boolean(true));

      range = (Object) xSearchable.findFirst(xSearchDescr);
      XTextRange test = (XTextRange) range;
      
    } catch( Exception e) {
      e.printStackTrace(System.err);
    }
    
    return range;
  }
Jetzt geht es mir um die Rückgabe von findFirst(), laut API ist es ein Objekt von XInterface, das wiederum die Mutter von allem ist (einfach ausgedrückt).

Über diese Suche möchte ich gerne eine Start und eine Endposition im Dokument ermitteln (zwei Wörter, Ausgeblendet(Hidden)), dieser Bereich wird anschließend durch die Anwendung berarbeitet (XTextRange?)

Hat jemand eine Lösung, ein Ansatz, wie ich an diese Positionen komme? Gibt es ein besseren Weg?

(weiteres zum Thema :

viewtopic.php?t=6861&start=0&postdays=0 ... tbaustein)

Lösung gefunden (Ansatz aus dem englischen Forum...)

Verfasst: So, 09.07.2006 17:18
von ezuehlke
Stunden über Stunden stöberns und testens...

Code: Alles auswählen

  private XTextRange wortSuchen(String gesucht) {
    /*
     * Ein bestimmtes Wort im Dokument suchen und Position zurückgeben
     */
    
    XInterface result = null;
    XTextRange range = null;
    String string = "";
    try {
      XTextDocument xTextDocument = 
        (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, xDocument);
      
      XSearchable xSearchable = 
        (com.sun.star.util.XSearchable)
          UnoRuntime.queryInterface(
            com.sun.star.util.XSearchable.class, xTextDocument);

      XSearchDescriptor xSearchDescr = 
        (com.sun.star.util.XSearchDescriptor)
           xSearchable.createSearchDescriptor();

      xSearchDescr.setSearchString(gesucht);
      
      XPropertySet xSearchProp = 
        (com.sun.star.beans.XPropertySet)
           UnoRuntime.queryInterface(
             com.sun.star.beans.XPropertySet.class, xSearchDescr);
      xSearchProp.setPropertyValue("SearchCaseSensitive",new Boolean(true));
      xSearchProp.setPropertyValue("SearchWords",new Boolean(true));
      result = (XInterface) xSearchable.findFirst(xSearchDescr);
      if (result != null){
        range = (XTextRange)UnoRuntime.queryInterface(
            com.sun.star.text.XTextRange.class,result);
      }
      
    } catch( Exception e) {
      e.printStackTrace(System.err);
    }
    return range;
  }
Ich entschuldige mich für diesen laienhaften Code und gelobe Besserung, Verbesserungen und Anregungen sind wilkommen!

Weiteres findet Ihr auch unter ...

viewtopic.php?t=6861&highlight=text