Seite 1 von 1

Stichwortverzeichnis

Verfasst: Mo, 03.09.2018 19:03
von quotsi
Hallo Experten, hallo Stephan,
Ich beziehe meine Fortbildung momentan aus "OO-Makros Erklärt 3_0_deutsch.odt". Aber dieses Werk überfordert mich diesbezüglich Ungebildeten.

Ich habe ein Makro probiert:

Code: Alles auswählen

REM  *****  BASIC  *****
Sub AlleVerzeichnisseZeigen
DIM	oIndexes		'Alle existierenden Verzeichnisse
Dim oIndex			'Verzeichnis, jeweils ausgewählt
DIM i				'Laufvariable, numeriert die Verzeichnisse
Dim bIndexFound As Boolean 'Flag zur Kennzeichnung, ob ein TOC gefunden wurde
Dim iLevel%    'Iteration über die Ebenen in der Eigenschaft LevelFormat
Dim iCol%      'Iteration über die Spalten der jeweiligen Ebene
Dim iProp%     'Iteration über die Properties der jeweiligen Spalte
Dim oLevel     'Ebenenobjekt
Dim oCol       'Spaltenobjekt
Dim s$

REM Findet ein Verzeichnis, falls es existiert.
oIndexes = ThisComponent.getDocumentIndexes()  'Liste aller Verzeichnisse
bIndexFound = False

For i = 0 To oIndexes.getCount() - 1
  oIndex = oIndexes.getByIndex(i)
  'Überprüfung, welches Verzeichnis.
  print i, oIndex.title

'  If oIndex.supportsService("com.sun.star.text.ContentIndex") Then
'      bIndexFound = True
'      Exit For
'  End If

   Next
End Sub
Meine Fragen:
1. Welche Entsprechung wäre für ein Stichwortverzeichnis zutreffend (ContentIndex = Inhaltsverzeichnis), damit ich die Ausstiegsroutine richtig programmieren kann? Bisher habe ich oIndex.title ="Stichwortverzeichnis" genommen. Das geht, aber nur, wenn man den vorgegebenen Titel nicht verändert. Folglich wäre ein fester Fachbegriff von com.sun.star.text wesentlich sicherer).

Ich konnte übrigens nachweisen, dass bei drei Verzeichnissen in einem vorgegebenen Dokument (mit 1. Stichwortverzeichnis, 2. Inhaltsverzeichnis, 3. Stichwortverzechnis) die Laufvariable richtig von 0 bis 2 geht und der genau Reihenfolge der Verzeichnisse im Text anspricht (0 und 2 waren die Stichwortverzeichnisse, 1 das inhaltsverzeichnis)

2. Welcher Begriff wäre zur Abfrage der "properties" geeignet, damit ich an den Inhalt des Stichwortverueichnisses ran komme? "oIndex.oProp...." war bisher nicht geeignet.

Danke für Anregung/Fehlerkorrektur/Hilfe

Re: Stichwortverzeichnis

Verfasst: Di, 04.09.2018 08:53
von quotsi
Ad 1) Anstelle ContentIndex für Inhaltsverzeichnis muss für Stichwortverzeichnis DocumentIndex stehen.
Diese Frage habe ich also gelöst.

Re: Stichwortverzeichnis

Verfasst: Di, 04.09.2018 09:51
von Toxitom
Hallo Quotsi,

also, das wichtigste, was Du brauchst beim Start der Makro-Programmierung ist ein entsprechendes "Inspektions-Tool", also ein Tool dass Dir die Objekte, Methoden und Services zu einem bestimmten Objekt anzeigen kann.

Dadurch kannst Du viele Sachen identifizieren und Dich "vorwärts-angeln".

Es gibt eigentlich nur zwei wichtige: X-Ray (--> link) oder MRI - auf den Extensionseiten zu finden.

Ich empfehle XRay... aber das ist Geschmackssache.

Ich denke, mit so einem Tool findest Du, was Du brauchst. Zumindest aber bekommst Du Infos, wo Du in der API Referenz suckhne müsstest.

Referenz für AOO ist --> hier

Viel Spass:)
Gruss Tom

Re: Stichwortverzeichnis

Verfasst: Di, 04.09.2018 19:18
von quotsi
Hallo Toxitom,
Du hast Dir viel Mühe gegeben, mir noch etwas beizubringen. Das tool X-Ray konnte ich anstandslos installieren und "anschalten", das MRI will bei meinem LO nicht. Oder vielleicht können nicht beide auf einmal oder man muss das mehrmals rauf- und runterfahren, mal sehen.
Aber eines weiss ich aus meinem Probieren mit X-Ray, es konnte mir weder helfen beim KeywordIndex ( Stichwortverzeichnis) weiter in den Inhalt einzudringen, noch meine bisherige Erkenntnis, dass das KewordIndex das Schlüsselwort zum Auswählen aus der Liste der Indexes war, bestätigen, mich hinführen.
Ganz offenbar fehlen mir wesentliche Kenntnisse für den Gebrauch von X-Ray bzw. fürs Programmieren in StarBasic für LO/AOO. Bin ja auch 72. Was soll es. Habe auch andere laufende Pflichten. Ist nur schade, dass es nicht so durchscheinend ist, speziell dieses Programmier-Wissen. Wieso sind Politiker so universal tätig? Ihre Lösungen überzeugen mich selten, auf Anhieb schon gar nicht, viele Nachbesserungen usw.
Aber danke Dir. Ich habs versucht, wenigstens.

Re: Stichwortverzeichnis

Verfasst: Fr, 07.09.2018 17:57
von quotsi
Habe mich noch mal mit der Makroprogrammierung beschäftigt. Das in zwei Richtungen:
1 - Zum einen habe ich ein Makro aus dem Werk OOME_3_0_deutsch.odt in neuester Auflage (Listing 410) an mein Ziel "Stichwortverzeichnis" adaptiert:

Code: Alles auswählen

Sub AlleVerzeichnisseZeigen
Xray ThisComponent
REM Dim oCurs      'Wird zum Einfügen von Textcontent benötigt.
DIM	oIndexes		'Alle existierenden Verzeichnisse
Dim oIndex			'Verzeichnis, jeweils ausgewählt
DIM i%				'Laufvariable, numeriert die Verzeichnisse
Dim bIndexFound As Boolean 'Flag zur Kennzeichnung, ob ein DocumentIndex (Stichwortverzeichnis) gefunden wurde

Dim iLevel%    'Iteration über die Ebenen in der Eigenschaft LevelFormat
Dim iCol%      'Iteration über die Spalten der jeweiligen Ebene
Dim iProp%     'Iteration über die Properties der jeweiligen Spalte
Dim oLevel     'Ebenenobjekt
Dim oCol       'Spaltenobjekt
Dim s$
Dim P1
Dim h

REM Findet ein Verzeichnis, falls es existiert.
oIndexes = ThisComponent.getDocumentIndexes()  'Liste aller Verzeichnisse
bIndexFound = False

For i = 0 To oIndexes.getCount() - 1
  oIndex = oIndexes.getByIndex(i)
  'Überprüfung, welches Verzeichnis.
  
  If oIndex.supportsService("com.sun.star.text.DocumentIndex") Then	' Mit DocumentIndex wird das Stichwortverzeichnis ausgewählt,
     ' mit ContentIndex kann das Inhaltsverzeichnis selektiert werden
  	 print "Unter Indexnummer ";i;" wurde ein ";oIndex.title; " ausgewählt"
 	 bIndexFound = True
  	Exit For
  End If
Next
If not bIndexFound then
	print "Kein Stichwortverzeichnis gefunden!"
	Exit sub
end if
 
 s = "Ebene" & Chr$(9) & "Spalte" & Chr$(9) & "Property" & Chr$(9) & "Name" & _
                 Chr$(9) & "Wert" & Chr$(13)
 For iLevel = 0 To oIndex.LevelFormat.getCount() - 1
   oLevel = oIndex.LevelFormat.getByIndex(iLevel)
   For iCol = LBound(oLevel) To UBound(oLevel)
     oCol = oLevel(iCol)
      For iProp = LBound(oCol) To UBound(oCol)
         s = s & iLevel & Chr$(9) & iCol & Chr$(9) & iProp  & Chr$(9) & _
                 oCol(iProp).Name & Chr$(9) & oCol(iProp).Value & Chr$(13)
   	  Next
   Next
 Next
 ThisComponent.getText().insertString(ThisComponent.getText().End, s, False) 
End Sub
Das Resultat des Arrays wird in die Datei ausgegeben. Leider kann ich weder einzelne Fächer dieses Arrays ansprechen noch konnte mir XRay helfen. Vielleicht hat jemand eine Idee oder kann mir helfen, die Anwendung von XRay plausibel zu machen?

2 - Mir fiel auf, dass man zwei identische Stichwortverzeichnisse mit allen Details anlegen kann. Deshalb denke ich, dass die DetailInformation zum jeweiligen Stichwort, wie die Schlüssel 1 & 2, Groß/Klein oder ganzes Wort entweder bereits im Text bei den Schlüsselworten verankert sind oder an einem versteckten Ort, aber nicht im Verzeichnis selbst, dem mein Interesse unter 1 galt. Deshalb habe ich versucht, mich auch meinem publizierten Makro viewtopic.php?f=25&t=70044 näher zu rücken, aber mir ist auch mit XRay keine Idee gekommen.
Vielleicht gibt es noch Anregungen?

Re: Stichwortverzeichnis

Verfasst: Di, 18.09.2018 22:06
von quotsi
Habe meinen Beitrag viewtopic.php?f=25&t=70044 nochmals überarbeitet. Jetzt werden sowohl die alternativen Einträge für das Stichwortverzeichnis als auch die Schlüssel (1 und 2) übernommen...
Viel Freude.
Verbesserungsvorschläge sind jederzeit willkommen.

Re: Stichwortverzeichnis

Verfasst: Fr, 21.09.2018 14:01
von quotsi
Hallo Toxitom,
Ich habe mich nochmal mit dem XRay-Tool beschäftigt und konnte (leider erst nach meinem aufwendigen Programmieren) erkennen, wie ich das Ding gut einsetzen kann. Also nochmals Danke für Deinen Hinweis.

Hallo alle Interessierten,
Ich habe meinen Ansatz zur Überführung von Stichworten aus einem bestehenden Dokument in eine Konkordanzdatei viewtopic.php?f=25&t=70044inhaltlich und in der Beschreibung nochmals überarbeitet. Ein weiteres Makro zu Anzeige von "leeren" Stichworten ist hinzugekommen, damit man die nachträglich nötige manuelle Bearbeitung der Konkordanzdatei zügiger vorbereiten kann.