Markierfelder im Text finden

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

Moderator: Moderatoren

Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Markierfelder im Text finden

Beitrag von Colster »

Hallo, liebe OpenOffice-Gemeinde,

ich habe einen Text, in dem vor einigen Textstellen Markierfelder im Text eingefügt sind (als Zeichen verankert). Wenn ich den Text jetzt Textportion für Textportion durchgehe, bekomme ich eine Textportion an der Stelle, an der das Markierfeld ist - ich kann aus dieser Textportion nicht das Control auslesen, und dementsprechend auch nicht, ob das Markierfeld gesetzt ist oder nicht.
Oder gibt es einen anderen Ansatz?
Ziel ist es, den angehakten Text in ein zweites Dokument zu kopieren und hier nur noch den Text zur Verfügung zu haben. (Textbausteine eignen sich für diesen Zweck nur bedingt.)
Tante Google hat mir bisher nicht weiterhelfen können.

Vielen Dank

Colster
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Markierfelder im Text finden

Beitrag von F3K Total »

Hi,
versuche es umgekehrt, durchsuche die Drawpage

Code: Alles auswählen

ThisComponent.drawpage.getbyindex()
nach den Markierfeldshapes und bestimme den zugehörigen Anchor.
Gruß R
Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Re: Markierfelder im Text finden

Beitrag von Colster »

Hallo F3K,

vielen Dank für Deine Antwort.
Noch eine Frage: Wie komme ich vom Anchor dann zum Text?

Mit Gruß

colster
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Re: Markierfelder im Text finden

Beitrag von Colster »

Mein letzter Beitrag war ungenau:
Wie ich zum Text vom Anchor komme, ist nicht so schwierig.-> oShape.anchor.getText()
Aber wie finde ich den Text zwischen aufeinanderfolgenden Shapes?

Mit Gruß

Colster
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Markierfelder im Text finden

Beitrag von F3K Total »

Hi,
ich empfehle Dir die Verwendung eines Introspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.
Dann wirst du vermutlich, jetzt aus dem Kopf,

Code: Alles auswählen

Anchor.string
finden.
Gruß R
Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Re: Markierfelder im Text finden

Beitrag von Colster »

Vielen Dank für die Antworten, auch mit MRI habe ich keine Möglichkeit gefunden im Fließtext nur den Text zwischen den Markierfeldern zu identizieren. Ich habe es jetzt so gelöst, dass ich den Text in Frames gesteckt habe, im Frame ist jeweils ein Checkfeld - und über das Shape komme ich zum Control (oShape.Control.State gibt den Wert des Markierfeldes aus) und zum Frame (oShape.AnchorFrame() gibt den Frame an).
Nicht ganz so wie ich es wollte, geht aber auch.

Mit Gruß

Colster
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Markierfelder im Text finden

Beitrag von F3K Total »

Hi,
Colster hat geschrieben:keine Möglichkeit gefunden
habe geforscht, hier das Ergebnis, funktioniert bei mir:

Code: Alles auswählen

Sub getchkText
    dim oRanges(1,0) as Variant
    ncounter = 0
    oText = thisComponent.text
    oTextEnumeration = oText.createEnumeration
    While oTextEnumeration.hasmoreelements
       oPara = oTextEnumeration.nextelement
       oparaEnumeration = oPara.createEnumeration
          While oparaEnumeration.hasmoreelements
              oPortion = oparaEnumeration.nextelement
              oPortionContentEnumeration = oPortion.createContentEnumeration("com.sun.star.drawing.ControlShape")
              While oPortionContentEnumeration.hasmoreelements
                 oShape = oPortionContentEnumeration.nextelement
                 if oShape.Control.ServiceName = "stardiv.one.form.component.CheckBox" then
                     redim preserve oRanges(1,nCounter)
                     oRanges(0,nCounter) = oShape.Control.State
                     oRanges(1,nCounter) = oPara.Anchor
                     nCounter = nCounter + 1
                 endif
              wend
          wend
    wend
    oCursor = oText.CreateTextCursor
    for i = 0 to uBound(oRanges,2)-1
        if oRanges(0,i) = 1 then
            oAnchorStart = oRanges(1,i)
            oAnchorEnd = oRanges(1,i+1)
            oCursor.gotorange(oAnchorEnd,false)
            oCursor.gotoPreviousParagraph(false)
            oCursor.gotorange(oAnchorStart,true)
            if oCursor.CharColor = -1 then
                oCursor.CharColor = RGB(0,255,0)
            else
                oCursor.CharColor =  -1
            endif
         endif
    next i
    if oRanges(0,uBound(oRanges,2)) = 1 then
        oAnchorStart = oRanges(1,uBound(oRanges,2))
        oCursor.gotoEnd(false)
        oCursor.gotorange(oAnchorStart, true)
        if oCursor.CharColor = -1 then
            oCursor.CharColor = RGB(0,255,0)
        else
            oCursor.CharColor = -1
        endif
    endif
End Sub
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Markierfelder im Text finden

Beitrag von Stephan »

habe geforscht, hier das Ergebnis, funktioniert bei mir:
gut gemacht, die Markierfelder werden so gefunden.

Bei mir ist das Problem das die innere Schleife:

Code: Alles auswählen

While oPortionContentEnumeration.hasmoreelements
'...
Wend
immer doppelt durchlaufen wird.

Auch ist mir die Logik der Grünmarkierung des Textes nicht ganz klar, aber ich habe momentan nicht weiuter nachgedacht.

Was ich getan habe ist: ich habe ein Dokument mit mehrere Absätzen und 2 Checkboxen (in unterschiedlichen Absätzen) und markiere entweder nichts, oder Gesamttext oder mehrere einzelne Absätze. Das Makro macht dann immer den Absatz vor dem ersten Absatz mit Checkbox grün (wobei ich merke das wärend des Makrodurchlaufs zwioschenzeitlich auch andere Textteilke grün werdcen.

Wie auch immer, der wichtige Kern des Makros, finden der Checkboxen, funktioniert.


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Markierfelder im Text finden

Beitrag von F3K Total »

Hi,
es muss wohl zum Dokument passen, die Checkboxen am Absatzanfang als Zeichen verankert.
Der Fokus muss vor Ausführung des Makros von der gerade umgeschalteten Checkbox weg, damit der Status stimmt, anbei ein Beispiel.
Gruß R
Dateianhänge
chkText_CreateContent_Enumeration.odt
(16.04 KiB) 103-mal heruntergeladen
Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Re: Markierfelder im Text finden

Beitrag von Colster »

Vielen Dank für Deine Forschungsarbeit, F3K, damit kann ich jetzt mein Tool noch mal erheblich eleganter gestalten. (Die Frames zu positionieren war frickelig, Fließtext ist bestimmt besser).

Vielen Dank

Colster
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
Antworten