Markierfelder im Text finden

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Markierfelder im Text finden

Re: Markierfelder im Text finden

von Colster » Do, 17.12.2015 10:34

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

Re: Markierfelder im Text finden

von F3K Total » Sa, 28.11.2015 09:20

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) 104-mal heruntergeladen

Re: Markierfelder im Text finden

von Stephan » Sa, 28.11.2015 09:05

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

Re: Markierfelder im Text finden

von F3K Total » Sa, 28.11.2015 00:58

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

Re: Markierfelder im Text finden

von Colster » Fr, 27.11.2015 20:21

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

Re: Markierfelder im Text finden

von F3K Total » Mi, 25.11.2015 16:59

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

Re: Markierfelder im Text finden

von Colster » Mi, 25.11.2015 12:34

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

Re: Markierfelder im Text finden

von Colster » Mi, 25.11.2015 11:42

Hallo F3K,

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

Mit Gruß

colster

Re: Markierfelder im Text finden

von F3K Total » Mo, 23.11.2015 20:51

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

Markierfelder im Text finden

von Colster » Mo, 23.11.2015 19:10

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

Nach oben