Stichwortverzeichnis

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

Moderator: Moderatoren

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Stichwortverzeichnis

Beitrag von quotsi » Mo, 03.09.2018 19:03

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
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Re: Stichwortverzeichnis

Beitrag von quotsi » Di, 04.09.2018 08:53

Ad 1) Anstelle ContentIndex für Inhaltsverzeichnis muss für Stichwortverzeichnis DocumentIndex stehen.
Diese Frage habe ich also gelöst.
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

Toxitom
********
Beiträge: 3505
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Stichwortverzeichnis

Beitrag von Toxitom » Di, 04.09.2018 09:51

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Re: Stichwortverzeichnis

Beitrag von quotsi » Di, 04.09.2018 19:18

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.
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Re: Stichwortverzeichnis

Beitrag von quotsi » Fr, 07.09.2018 17:57

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?
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Re: Stichwortverzeichnis

Beitrag von quotsi » Di, 18.09.2018 22:06

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.
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

quotsi
*****
Beiträge: 267
Registriert: Do, 14.11.2013 10:04

Re: Stichwortverzeichnis

Beitrag von quotsi » Fr, 21.09.2018 14:01

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.
win7prof - Avira - LO 6.1.3.2 (x64) - AOO 4.1.5

Antworten