Textbereiche unterscheiden?

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

Moderator: Moderatoren

Stephan
********
Beiträge: 10679
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Textbereiche unterscheiden?

Beitrag von Stephan » Mo, 12.11.2018 10:21

Hallo,

mit:

Code: Alles auswählen

ThisComponent.getTextSections
erreiche ich alle Textbereiche in einem Writerdokument.

Wie unterscheide ich dabei die Bereiche die über Einfügen-Bereich eingefügt wurden, von sonstigen Bereichen? z.B. ist ein Inhaltsverzeichnis ein sonstiger Bereich, ich weiß nicht was sonst noch alles.

Anmerkung:
Um das nur über Namen zu unterscheiden, müsste ich zumindest alle infrage kommenden Textbereichsnamen kennen, gleichzeitig sind die Namen (z.B. "Inhaltsverzeichnis1") wohl anhängig von der Lokalisierung, mithin kein zuverlässiges Kriterium. Aber welche Eigenschaft könnte ich sonsdt zur Prüfung heranziehen?


Gruß
Stephan

F3K Total
********
Beiträge: 3270
Registriert: Mo, 28.02.2011 17:49

Re: Textbereiche unterscheiden?

Beitrag von F3K Total » Mo, 12.11.2018 18:17

Hallo Stephan,
habe mal versucht ein Unterscheidungsmerkmal zu finden, indem ich die Eigenschaften der Bereiche per XRAY-Difference-Checker miteinander verglichen habe.
Die Verzeichnisse haben die Eigenschaft .GlobalDocumentSections, die aber wiederum .ChildSections ohne diese Eigenschaft haben können.
Mit folgendem Makro fange ich eine Ebene der Childsections ab, finde damit die "Sonstigen Bereiche", alle anderen müssten dann die eingefügten sein.
Ohne Gewähr.

Code: Alles auswählen

Sub get_GlobalDocumentSections
    dim sNames(0) as String
    oSections = thisComponent.TextSections
    nCounter = 0
    for i = 0 to oSections.count - 1
        oSection = oSections.getbyIndex(i)
        if oSection.IsGlobalDocumentSection then
        redim Preserve sNames(nCounter)
        sNames(nCounter) = oSection.Name
        ncounter = ncounter + 1
            if not isEmpty (oSection.ChildSections) then
                for j = 0 to Ubound(oSection.ChildSections)
                   redim Preserve sNames(nCounter)
                   oChildSection = oSection.ChildSections(j)
                   sNames(nCounter) = oChildSection.Name
                   ncounter = ncounter + 1  
                next j
            endif
        endif
    next i
    sText = "Die folgenden Bereiche sind ""sonstige Bereiche""" +chr(10)+chr(10)+Join(sNames,(","+chr(10))
    MSGBOX (sText,64,"Auswertung der Bereiche")
End Sub
Gruß R

Stephan
********
Beiträge: 10679
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Textbereiche unterscheiden?

Beitrag von Stephan » Di, 13.11.2018 08:34

Danke für Deine Mühe. Ich muss mir das zunächst anschauen und gebe Rückmeldung, sobald ich das getan habe.


Gruß
Stephan

Stephan
********
Beiträge: 10679
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Textbereiche unterscheiden?

Beitrag von Stephan » Do, 15.11.2018 21:11

Danke, das funktioniert prima.

Allerdings stoße ich auf meine eigene Unfähigkeit an einer Stelle wo ich das garnicht glauben kann keine Lösung zu finden. Derzeitig erzeuge ich zuerst das komplette Array mit allen Namen der unerwünschten Bereiche:

Code: Alles auswählen

Dim sNames(0) as String

Sub get_GlobalDocumentSections()
    Dim oSections
    Dim oSection
    Dim oChildSection
    Dim ncounter
    
    oSections = thisComponent.TextSections
    nCounter = 0
    for i = 0 to oSections.count - 1
        oSection = oSections.getbyIndex(i)
        if oSection.IsGlobalDocumentSection then
        redim Preserve sNames(nCounter)
        sNames(nCounter) = oSection.Name
        ncounter = ncounter + 1
            if not isEmpty (oSection.ChildSections) then
                for j = 0 to Ubound(oSection.ChildSections)
                   redim Preserve sNames(nCounter)
                   oChildSection = oSection.ChildSections(j)
                   sNames(nCounter) = oChildSection.Name
                   ncounter = ncounter + 1  
                next j
            endif
        endif
    next i
End Sub


Sub Main2()
	get_GlobalDocumentSections()
	
	tc = ThisComponent
	
	For i = 0 To tc.getTextSections.Count-1
		j = tc.getTextSections.getByIndex(i)
		Select Case Left(j.Name, 3)
			Case "LP1"
				'...
			Case "LP2"
				'...
			Case Else
				ll = 0
				For l = 0 To UBOUND(sNames)
					If j.Name = sNames(l) Then
						ll = 1
						Exit For
					End If
				Next l
				If ll = 0 Then
					'...
				End If
		End Select
	Next i

End Sub
der Grund das zu tun ist aber nur, weil ich es nicht hinbekomme die Prüfung direkt bei "Case Else" durchzuführen ohne vorher das Array aller Namen der unerwünschten Bereiche erzeugt zu haben.

Vielleicht hätte da noch jemand einen Anstoß, denn ich ärgere mich das nicht hinzubekommen.


Gruß
Stephan

Antworten