Rückgabe weiterverarbeiten von XSearchable. findFirst()

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

ezuehlke
Beiträge: 4
Registriert: Do, 06.07.2006 21:40

Rückgabe weiterverarbeiten von XSearchable. findFirst()

Beitrag 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)
ezuehlke
Beiträge: 4
Registriert: Do, 06.07.2006 21:40

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

Beitrag 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
Antworten