wenn ich für SequenceNumber und SourceName auslesbare Werte manuell eingefügter Querverweise benutze, um mein Makro zu testen. Woher nehme ich aber für alle anderen Querverweise die entsprechenden Werte?
Ich fürchte Du machst einen Denkfehler, denn es gibt die Werte erst nachdem Du manuell einen Querverweis eingefügt hast, denn das Ziel eines Querverweises der auf eine Überschrift gesetzt wird ist eine (speziell benannte) Textmarke die LO erst beim Erzeugen des Querverweises automatisch einfügt.
WAs LO Dir im Dialog anzeigt sind tatsächlich NUR die Texte der Überschriften und falls es buchstabengleiche Überschriften gleicher Ebene gäbe/gibt ist die einzige Unterscheidung deren Reihenfolge die LO im Dialog genauso wiedergibt wie im Dokument vorhanden.
Ich habe das einmal getestet und hänge unten zwei Screenshots meines Testdokuments an, die das Gesagte verdeutlichen.
Ich weiß garnicht ob Du LO per Makro zwingen kannst 'seine' dafür verwendeten automatisch benannten Bookmarks (Textmarken) zu erzeugen und ich weiß auch nicht ob LO per Makro erzeugte speziell benannte Bookmarks adäquat behandeln würde, das müsste man mal testen.
Nötig ist das alles auch nicht, denn Du selbst kannst per Makro gezielt eigene Textmarken bei den Überschriften erzeugen und dann darauf Querverweise setzen. Um das zu tun gehst du so vor: mache eine Enumeration über den gesamten Text des Dokuments und prüfe ob der jeweils aktuelle Absatz die passende Absatzvorlage für Überschrift hat (das können wenn Du mehrere Überschriftenebenen mit Querverweisen anspringen willst auch mehrere sein) und wenn ja dann setze eine Textmarke passenden Namens, also ungefähr:
Code: Alles auswählen
cur = ThisComponent.text.createTextCursor
absaetze = ThisComponent.Text.createEnumeration()
Do While absaetze.hasMoreElements()
akt_absatz = absaetze.nextElement()
If akt_absatz.ParaStyleName <> "DeineÜberschriftenvorlage" Then
a_index = a_index + 1
oBookmark = tc.createInstance("com.sun.star.text.Bookmark")
cur.gotoRange(akt_absatz.getAnchor, False)
oBookmark.setName("xyz-" & a_index & "_" & cur.String)
tc.Text.insertTextContent(cur, oBookmark, False)
End If
Loop
nun hat jede benötigte Überschrift eine passende Textmarke und Du kennst die Namen (und den Namensaufbau) dieser Textmarken. Deshalb kannst Du nun darauf bequem Querverweise setzen, ungefähr so:
Code: Alles auswählen
tc = ThisComponent
oField = tc.createInstance("com.sun.star.text.textfield.GetReference")
oField.ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.PAGE
oField.ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.BOOKMARK
oField.SourceName = "Der Name der gewünschten Textmarke"
tc.text.insertTextContent(curx, oField, True)
Wie Du auf "Der Name der gewünschten Textmarke" zugreifst hängt von den Umständen ab, z.B. kannst Du beim Setzen der Textmarken, alle Namen in ein Array schreiben und das dann abarbeiten.
Der Vorteil der besonderen Benennung der Textmarken (s.o.) ist auch das Du weist welche Textmarke zu welcher Überschrift gehört und welche Textmarken im Gesamtdokument überhaupt die relevanten sind (alle deren Name vorne "xyz-" hat)
Gruß
Stephan
[quote]wenn ich für SequenceNumber und SourceName auslesbare Werte manuell eingefügter Querverweise benutze, um mein Makro zu testen. Woher nehme ich aber für alle anderen Querverweise die entsprechenden Werte?[/quote]
Ich fürchte Du machst einen Denkfehler, denn es gibt die Werte erst nachdem Du manuell einen Querverweis eingefügt hast, denn das Ziel eines Querverweises der auf eine Überschrift gesetzt wird ist eine (speziell benannte) Textmarke die LO erst beim Erzeugen des Querverweises automatisch einfügt.
WAs LO Dir im Dialog anzeigt sind tatsächlich NUR die Texte der Überschriften und falls es buchstabengleiche Überschriften gleicher Ebene gäbe/gibt ist die einzige Unterscheidung deren Reihenfolge die LO im Dialog genauso wiedergibt wie im Dokument vorhanden.
[u]Ich habe das einmal getestet und hänge unten zwei Screenshots meines Testdokuments an, die das Gesagte verdeutlichen. [/u]
Ich weiß garnicht ob Du LO per Makro zwingen kannst 'seine' dafür verwendeten automatisch benannten Bookmarks (Textmarken) zu erzeugen und ich weiß auch nicht ob LO per Makro erzeugte speziell benannte Bookmarks adäquat behandeln würde, das müsste man mal testen.
Nötig ist das alles auch nicht, denn Du selbst kannst per Makro gezielt eigene Textmarken bei den Überschriften erzeugen und dann darauf Querverweise setzen. Um das zu tun gehst du so vor: mache eine Enumeration über den gesamten Text des Dokuments und prüfe ob der jeweils aktuelle Absatz die passende Absatzvorlage für Überschrift hat (das können wenn Du mehrere Überschriftenebenen mit Querverweisen anspringen willst auch mehrere sein) und wenn ja dann setze eine Textmarke passenden Namens, also ungefähr:
[code]cur = ThisComponent.text.createTextCursor
absaetze = ThisComponent.Text.createEnumeration()
Do While absaetze.hasMoreElements()
akt_absatz = absaetze.nextElement()
If akt_absatz.ParaStyleName <> "DeineÜberschriftenvorlage" Then
a_index = a_index + 1
oBookmark = tc.createInstance("com.sun.star.text.Bookmark")
cur.gotoRange(akt_absatz.getAnchor, False)
oBookmark.setName("xyz-" & a_index & "_" & cur.String)
tc.Text.insertTextContent(cur, oBookmark, False)
End If
Loop
[/code]
nun hat jede benötigte Überschrift eine passende Textmarke und Du kennst die Namen (und den Namensaufbau) dieser Textmarken. Deshalb kannst Du nun darauf bequem Querverweise setzen, ungefähr so:
[code]
tc = ThisComponent
oField = tc.createInstance("com.sun.star.text.textfield.GetReference")
oField.ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.PAGE
oField.ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.BOOKMARK
oField.SourceName = "Der Name der gewünschten Textmarke"
tc.text.insertTextContent(curx, oField, True)
[/code]
Wie Du auf "Der Name der gewünschten Textmarke" zugreifst hängt von den Umständen ab, z.B. kannst Du beim Setzen der Textmarken, alle Namen in ein Array schreiben und das dann abarbeiten.
Der Vorteil der besonderen Benennung der Textmarken (s.o.) ist auch das Du weist welche Textmarke zu welcher Überschrift gehört und welche Textmarken im Gesamtdokument überhaupt die relevanten sind (alle deren Name vorne "xyz-" hat)
Gruß
Stephan