Hyperlink für Stichworte

Das Textverarbeitungsprogramm

Moderator: Moderatoren

15Albert
***
Beiträge: 64
Registriert: Mo, 27.03.2023 13:03

Re: Hyperlink für Stichworte

Beitrag von 15Albert »

Hallo Quosti,
ich lasse mal "die Hosen runter". Ich kann das nicht.
Würdes Du das Makro umbauen. Es kommt doch bestimmt darauf, es an der richtigen Stelle einzubauern.
Albert
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hyperlink für Stichworte

Beitrag von mikeleb »

Hallo,
dein Stichwortverzeichnis (alphabetisches Rezeptverzeichnis) ist schon eine ganz andere Hausnummer:
mehrere Tabulatoren, zusätzlicher Text unmittelbar nach dem Verzeichniseintrag, zusätzlicher Text unmittelbar vor der Seitennummer
Dieser Situation sind die Makros (weder das ursprüngliche, noch meine Überarbeitung) nicht gemacht. Prinzipiell lässt sich das im Makro umsetzen, indem man z. B. die Strukur ausliest (siehe .Levelformat).
Mal sehen, ob ich das schaffe ... ohne das es zu komplex wird.
Gruß,
mikeleb
quotsi
******
Beiträge: 704
Registriert: Do, 14.11.2013 10:04

Re: Hyperlink für Stichworte

Beitrag von quotsi »

Hallo Albert,
Ich kann für dich leider nicht das Makro einbauen. Ich kann auch nicht deswegen quer durch Deutschland fahren.

Gibt es keinen Jüngeren in deiner Nähe, der auf die von mir beschriebene Weise das Makro einbauen kann?

Es wäre noch die ferne Möglichkeit, das Makro in das Dokument, das als Ziel der Bearbeitung gilt, einzubauen. Aber dann muß es zugänglich sein und das geht nicht über das Forum.

Hinzu kommt, dass die ganze Mühe umsonst sein kann, wenn aus mir jetzt nicht bekannten Gründen das Makro für dein Dokument nicht brauchbar ist.

Leider kann man ein Makro, wenn es im Dokument verankert ist, nicht unmittelbar an einem anderen Dokument arbeiten lassen. Da muss man auch ein wenig fummeln, um es zu den eigenen Makros rüberzuziehen.
Ich arbeite nicht täglich mit neuen Makros, müßte also selber mich erst wieder sachkundig machen. Also alles hippig.
Diese Datei hat das Makro. Man kann es sowohl unter AOO als auch LibreOffice (was ich momentan benutze) auf diese Datei arbeiten lassen. Hierzu geht man nach dem Öffnen der Date mit Bejahung der Frage "Makros aktivieren"
unter Extras -> Makros -> Makros ausführen ->"Der Taucher ..." -> Standard -> das unterste Makro "Stichworte_Hyperlinks" -> "verweise_setzen" und dann Knopf Ausführen.
Danach ist für diese Datei das Stichwortverzeichnis verlinkt, derart, dass ein Klick auf die Seitennummer im Stichwortverzeichnis (ohne strg-Taste Taste wie beim Inhaltsverzeichnis oder eine sonstige) sofort zur betreffenden Seite gsprungen wird.
win11 - Avira - LO 7.6.6.3 (X86_64) - AOO 4.1.15
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
15Albert
***
Beiträge: 64
Registriert: Mo, 27.03.2023 13:03

Re: Hyperlink für Stichworte

Beitrag von 15Albert »

Hallo Quosti,
Frage wozu gibt es TeamViewer?
Ich denke mir, dass es in Geifswald inzwischwen ein ordenliches Internet gibt.
Immerhin habt ihr ja eine Uni.
Albert
quotsi
******
Beiträge: 704
Registriert: Do, 14.11.2013 10:04

Re: Hyperlink für Stichworte

Beitrag von quotsi »

Bist ja besser informiert als man glauben kann.
Wieso kannst du dann nicht selber weiter machen? Liegt doch alles offen.
win11 - Avira - LO 7.6.6.3 (X86_64) - AOO 4.1.15
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hyperlink für Stichworte

Beitrag von mikeleb »

Hallo,
ich habe mal ein bisschen weiter gebastelt.
Die verschiedenen Meldungen sind nun in einem Dialog zusammengefasst.
Verschiedenen Verzeichnisstrukturen werden akzeptiert (Texte unmittelbar hinter den Einträgen, mehrere Tabulatoren, Texte unmittelbar vor den Seitenzahlen). Ein Verzeichnisabsatz muss allerdings stets mit dem Eintrag beginnen und mit Seitenzahl(en) enden. Sollte die Struktur nicht passen, wird die Arbeit beendet.
Das Verzeichnis wird innerhalb des Makros automatisch aktualisiert. Soweit ich es begriffen habe, wird dabei aber eine Konkordanzdatei nicht erneut ausgewertet! Dass müsste manuell vorher geschehen (Verzeichnis->Bearbeiten)

Code: Alles auswählen

REM  *****  BASIC  *****

'Das Modul enthält 9 Subs:
'haupt_stichworte_verlinken -> das zu startende Makro

'erstelle_dialog -> ein Untermakro, um den Dialog zur Laufzeit zu erstellen aus dem heraus die anderen Makros gestartet werden:
'	verweise_setzen -> das eigentliche Programm, um Seitenzahlen im Stichwortverzeichnis mit Querverweisen zu versehen
'	butlist1_ActionPerformed, butlist2_ActionPerformed -> Makros für den ActionListener für die Button im Dialog
'	win_windowClosing, win_windowClosed, win_windowActivated, win_windowDeactivated -> Makros für den Fensterlistener, um auf das Schließen des Dialogs reagieren zu können


public warten_dialog as object
public abbruch as boolean 'beendet Hauptschleife wenn der Benutzer den Dialog vorfristig schließt


Const praefix="x_" 'Präfix für die Stichwortlesezeichen, zur Unterscheidung ggf. anderer Lesezeichen

Sub haupt_stichworte_verlinken

	erstelle_dialog

End Sub

Sub verweise_setzen()
	'Originalautor: www.jm-schmidt.de
	'be- und umgearbeitet im  April 2023: de.openoffice.info, mikeleb

	startzeit = time()

	warten_dialog.getcontrol("but2").visible=false
	warten_dialog.getcontrol("but1").model.label="Stop"
	warten_dialog.getcontrol("but1").model.enabled=false

	oDoc=ThisComponent
	cur = oDoc.Text.createTextCursor
	oViewCursor = oDoc.CurrentController.getViewCursor
	indexes = ThisComponent.getDocumentIndexes()
	For i = 0 To Indexes.getCount() - 1
		oIndex = Indexes.getByIndex(i)
		If oIndex.supportsService("com.sun.star.text.DocumentIndex") Then
			warten_dialog.getcontrol("warten1").text="gefundenes Stichwortverzeichnis: " & oIndex.Name
			warten_dialog.getcontrol("warten3").text="Das Stichwortverzeichnis wird aktualisiert ..."
	
			oindex.update
			wait 1000
			
			warten_dialog.getcontrol("warten3").text="Die Verzeichnisstruktur wird geprüft ..."
			'Prüfen der Verzeichnisstruktur und Auslesen von zusätzlichem Text hinter Eintrag bzw. vor Seitennummer
			fehler=0
			ReDim level(2)
			for lv=0 to 2
				level1=oindex.levelformat.getbyindex(2+lv)
				suffix_lv=""
				praefix_lv=""
				for token=0 to ubound(level1)
					if level1(token)(0).value="TokenEntryText" then
						if token>0 then
							fehler=1	'das 1. Token muss der Verzeichniseintrag sein
						end if
						if level1(token+1)(0).value="TokenText" then
							suffix_lv=level1(token+1)(2).value
						end if
					end if
					if level1(token)(0).value="TokenPageNumber" then
						if token<ubound(level1) then
							fehler=2	'das letzte Token muss die Seitennummer sein
						end if
						if level1(token-1)(0).value="TokenText" then
							praefix_lv=level1(token-1)(2).value
							if level1(token-2)(0).value<>"TokenTabStop" then
								fehler=3	'vor dem Text vor der Seitennummer muss ein TabStop sein
							end if
						elseif level1(token-1)(0).value<>"TokenTabStop" then
							fehler=3	'wenn kein text vor der Seitennummer dann muss da ein TabStop sein
						end if
					end if
				next
				level(lv)=array(suffix_lv, praefix_lv)
			next
			if not(oIndex.UseCombinedEntries) then
				fehler=4
			end if
			if fehler>0 then
				warten_dialog.getcontrol("warten3").text="Diese Strukur des Stichwortverzeichnisses kann nicht verarbeitet werden!" 
			end if
			wait 1000		
	
			If fehler=0 then
	
				warten_dialog.getcontrol("but1").model.enabled=true
	
				warten_dialog.getControl("warten3").Text = "alte Lesezeichen werden gelöscht ..."
				'Alle ursprünglichen Lesezeichen entfernen
				oMarks=ThisComponent.Bookmarks
				for k=oMarks.count-1 to 0 step -1
					oMark=oMarks.getbyindex(k)
					if left(oMark.Name,len(praefix))=praefix then
						oMark.anchor.getText().removeTextContent(oMark)
					end if
				next
	
				'Alle Stichwortvorkommen im Dokument einlesen und Lesezeichen setzen
				oindex=odoc.documentindexes(i)
				
				Dim aStichworte(ubound(oindex.documentindexmarks))
				n_sw=-1
				Do while not(abbruch) and n_sw < ubound(aStichworte)
					n_sw=n_sw+1	
					warten_dialog.getControl("warten3").Text = "Stichwörter werden eingelesen, Lesezeichen gesetzt ... " & n_sw+1 & " von " & ubound(aStichworte)+1
					oMark=oindex.DocumentIndexMarks(n_sw)
					'zur Textstelle gehen
					oViewCursor.gotoRange(oMark.anchor, false)
					aStichworte(n_sw)=DimArray(4)
					aStichworte(n_sw)(0)=rtrim(oMark.markEntry & oMark.anchor.string)	'Text des Eintrages, ggf. Leerzeichen am Ende werden entfernt, da sie im Verzeichnis ebenfalls automatisch entfernt werden
					aStichworte(n_sw)(1)=oViewCursor.getpage							'Seite des Vorkommens
					aStichworte(n_sw)(2)=oviewcursor.position.x							'Position des Vorkommens
					aStichworte(n_sw)(3)=oviewcursor.position.y				
					aStichworte(n_sw)(4)=praefix & aStichworte(n_sw)(0) & "-" & n_sw	'Name des Lesezeichens
					'Lesezeichen erstellen
					oBookmark = ThisComponent.createInstance("com.sun.star.text.Bookmark")
			      	oBookmark.setName(aStichworte(n_sw)(4))
			      	ocurtmp=oViewcursor.Text.createTextCursor
			      	ocurtmp.gotoRange(oMark.anchor, false)
			      	oViewCursor.Text.insertTextContent(ocurtmp, oBookmark, False)
				Loop
	
				warten_dialog.getControl("warten3").Text ="Querverweise werden erstellt ..."
	
				
				cur.gotoRange(oIndex.getAnchor, false)
				cur.CollapseToStart 'vorderste Position im Verzeichnis
		
				'Anzahl Einträge ermitteln
				anzahl_eintraege = 0
				Do
					IF cur.ParaStyleName = oIndex.ParaStyleLevel1 OR cur.ParaStyleName = oIndex.ParaStyleLevel2 OR cur.ParaStyleName = oIndex.ParaStyleLevel3 Then 
							anzahl_eintraege = anzahl_eintraege + 1
					Elseif cur.ParaStyleName <> oIndex.ParaStyleHeading AND cur.ParaStyleName <> oIndex.ParaStyleSeparator Then
							Exit Do
					End If
					cur.GotoNextParagraph(False)
				Loop	
				
				cur.gotoRange(oIndex.getAnchor, false)
				cur.CollapseToStart
	
				dd = 0
				
				Do While not(abbruch) and dd<anzahl_eintraege
					
					cur.GotoEndOfParagraph(False)
					select case cur.ParaStyleName
					
						case oIndex.ParaStyleLevel1
							lv=0
						case oIndex.ParaStyleLevel2
							lv=1
						case oIndex.ParaStyleLevel3
							lv=2										
						case else
							lv=-1
					end select
					'Verzeichniseintrag?
					IF lv>-1 Then
						dd = dd + 1
						
						cur.GotoStartOfParagraph(False)
						cur.GotoEndOfParagraph(True)
						'Auslesen des gesamten Eintrags in Array tmp()
						tmp = Split(cur.String, CHR(9)) 
	
						'Finden aller Lesezeichen zu diesem Eintrag, sortiert
						sEintrag=left(tmp(0),len(tmp(0))-len(level(lv)(0)))
						warten_dialog.getControl("warten3").Text ="Querverweise werden erstellt ... " & dd & " von " & anzahl_eintraege &_
							chr(10) & chr(10) & "aktueller Eintrag: " & sEintrag
	
						n=-1
						for z=0 to ubound(aStichworte)
							if aStichworte(z)(0)=sEintrag then
								n=n+1
								ReDim preserve aEintrag(n)
								aEintrag(n)=aStichworte(z)
								tausch=1
								k=n-1
								do while tausch=1 and k>-1
									if (aEintrag(k+1)(3)>aEintrag(k)(3)) or (aEintrag(k+1)(3)=aEintrag(k)(3) and aEintrag(k+1)(2)>aEintrag(k)(2)) then
										tausch=0
									else 
										swp=aEintrag(k)
										aEintrag(k)=aEintrag(k+1)
										aEintrag(k+1)=swp
									end if
									k=k-1
								loop
							end if
						next
	
						'Auslesen der ggf. mehreren Seitenzahlen
						
						tmp2 = Split(join(split(tmp(ubound(tmp)),level(lv)(1)),""), ", ")
	
						tmp(ubound(tmp))=level(lv)(1)
	
						'.UseCombinedEntries ?
						'.UsesDash ? .UsePP ? 
						'es können drei Fälle auftreten (.UsesCombinedEntries=True und .UsesDash=False und .UsePP=True):
						'	45		Stichwort nur auf der Seite
						'	45f.	Stichwort auf der Seite und der folgenden
						'	45ff.	Stichwort auf der Seite und den folgenden
						'der Link wird, in diesem Beispiel, immer nur zum Stichwort auf Seite 45 führen - ein Link zu mehreren Zielen ist nicht möglich
						
						'es können zwei Fälle auftreten (.UsesCombinedEntries=True und .UsesDash=True und .UsePP=False):
						'	45		Stichwort nur auf der Seite 45
						'	45-47	Stichwort auf der Seite 45 bis einschließlich Seite 46
						'
						
						'wenn .UsesCombinedEntries=False oder .UsesDash=False und .UsePP=False, dann gibt es zu jedem Eintrag eine Liste nur einzelner Seiten
						'der Fall muss nicht extra betrachtet werden
						
						if ubound(tmp2)>-1 then	'mindestens eine Seitennummer vorhanden?
							
							if oIndex.UsePP then
								sTrenner="f"
							else
								sTrenner="-"
							end if								
							
							'aktuelle Zeile im Verzeichnis
							cur.GotoStartOfParagraph(False)
							'lösche alles hinter dem Tabulator
							cur.goRight(LEN(join(tmp,chr(9))), False)
							cur.GotoEndOfParagraph(True)
							cur.String = ""
							
							'Aufspalten einer Seitennumer mit ggf. f. oder ff.
							tmp3=split(tmp2(0),sTrenner)
							'die Seitenzahl weg
							nseite=val(tmp3(0)) 
							
							tmp3(0)=""
							'neuer Text ohne Seitenzahl
							neu=join(tmp3,sTrenner)
							'Suche das Lesezeichen auf der richtigen Seite
							nr=0
							do until aEintrag(nr)(1)=nseite or nr=ubound(aEintrag)
								nr=nr+1
							loop
							'msgbox nr
							if aEintrag(nr)(1)=nseite then 'Lesezeichen auf der Seite existiert
								oReference = ThisComponent.createInstance("com.sun.star.text.textfield.GetReference")
								oReference.SourceName = aEintrag(nr)(4)
								oReference.SequenceNumber = 0
								oReference.ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.PAGE
								oReference.ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.BOOKMARK
								oDoc.getText.insertTextContent(cur, oReference, False)
								cur.GotoEndOfParagraph(False)
							else							'Lesezeichen nicht vorhanden
								cur.String = nSeite
								cur.collapsetoend
							end if
							cur.String = neu
							cur.collapsetoend
							'falls noch mehr Seiten zu dem Eintrag	
							for j=1 to ubound(tmp2)
								cur.String = ", "
								cur.collapsetoend
								tmp3=split(tmp2(j),sTrenner)
								nseite=val(tmp3(0))
								tmp3(0)=""
								neu=join(tmp3,sTrenner)
								do until aEintrag(nr)(1)=nseite or nr=ubound(aEintrag)
									nr=nr+1
								loop
								'msgbox nr
								if aEintrag(nr)(1)=nseite then 'Lesezeichen auf der Seite existiert, Querverweis setzen
									oReference = ThisComponent.createInstance("com.sun.star.text.textfield.GetReference")
									oReference.SourceName = aEintrag(nr)(4)
									oReference.SequenceNumber = 0
									oReference.ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.PAGE
									oReference.ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.BOOKMARK
									oDoc.getText.insertTextContent(cur, oReference, False)
									cur.GotoEndOfParagraph(False)
								else							'Lesezeichen nicht vorhanden, es wird der ursprüngliche Text gesetzt
									cur.String =nSeite
									cur.collapsetoend
								end if
								cur.String = neu
								cur.collapsetoend
							next
						end if
					end if
					cur.GotoNextParagraph(False)
				loop
				oviewcursor.gotoRange(oIndex.getAnchor, false)
				oviewcursor.collapsetostart
			end if
		end if
	next
	
	ThisComponent.getTextfields.refresh()

	warten_dialog.getControl("warten4").Text ="Start: " & startzeit & "     " & "Ende: " & time()
	warten_dialog.getControl("but1").Label="Ende"
		
End Sub	


Sub erstelle_dialog

			'warten-Dialog--------------------------
			warten_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
			warten_model.setPropertyValue("Width",  300) '343
			warten_model.setPropertyValue("Height", 120) '65
			warten_model.setPropertyValue("PositionX", 100)
			warten_model.setPropertyValue("PositionY", 100)
			warten_model.SetPropertyValue("Title","Stichwortverzeichnisse verlinken")
		
			oMod_warten = warten_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
			With oMod_warten
				.setPropertyValue("Name","warten1")
				.setPropertyValue("PositionX",5) '192
				.setPropertyValue("PositionY",5) 
				.setPropertyValue("Width",180)
				.setPropertyValue("Height",15)
				.setPropertyValue("MultiLine", True)
				.setPropertyValue("Label",ThisComponent.Title)
			End With
			warten_model.insertByName("warten1", oMod_warten)

			oMod_warten2 = warten_model.createInstance("com.sun.star.awt.UnoControlButtonModel")
			With oMod_warten2
				.setPropertyValue("Name","but1")
				.setPropertyValue("PositionX",10)
				.setPropertyValue("PositionY",95) '45
				.setPropertyValue("Width",60)
				.setPropertyValue("Height",16)
				.setPropertyValue("Label", "Abbruch")
				.setPropertyValue("DefaultButton", True)
				'.setPropertyValue("Enabled", False)
			End With
			warten_model.insertByName("but1", oMod_warten2)
			
			oMod_warten5 = warten_model.createInstance("com.sun.star.awt.UnoControlButtonModel")
			With oMod_warten5
				.setPropertyValue("Name","but2")
				.setPropertyValue("PositionX",100)
				.setPropertyValue("PositionY",95) '45
				.setPropertyValue("Width",60)
				.setPropertyValue("Height",16)
				.setPropertyValue("Label", "OK")
'				.setPropertyValue("DefaultButton", True)
'				.setPropertyValue("Enabled", False)
			End With
			warten_model.insertByName("but2", oMod_warten5)
			
			oListbut1 = createUnoListener("butlist1_","com.sun.star.awt.XActionListener")
			oListbut2 = createUnoListener("butlist2_","com.sun.star.awt.XActionListener")
			
			oMod_warten3 = warten_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
			With oMod_warten3
				.setPropertyValue("Name","warten3")
				.setPropertyValue("PositionX",5) '192
				.setPropertyValue("PositionY",25) 
				.setPropertyValue("Width",180)
				.setPropertyValue("Height",45)
				.setPropertyValue("MultiLine", True)
				.setPropertyValue("Label","Wollen Sie die Einträge im Stichwortverzeichnis verlinken? " &_
					CHR(13) & CHR(13) & "Das Stichwortverzeichnis wird zunächst automatisch aktualisiert.")
			End With
			warten_model.insertByName("warten3", oMod_warten3)
			
			oMod_warten4 = warten_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
			With oMod_warten4
				.setPropertyValue("Name","warten4")
				.setPropertyValue("PositionX",5) '192
				.setPropertyValue("PositionY",75) 
				.setPropertyValue("Width",180)
				.setPropertyValue("Height",15)
				.setPropertyValue("MultiLine", True)
				.setPropertyValue("Label","")
			End With
			warten_model.insertByName("warten4", oMod_warten4)
			
			oWinLis = createUnoListener("win_","com.sun.star.awt.XTopWindowListener")
			 
			warten_dialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
			warten_dialog.addTopWindowListener(oWinLis)
			warten_dialog.setModel(warten_model)
			
			warten_dialog.getControl("but1").addActionListener(oListbut1)
			warten_dialog.getControl("but2").addActionListener(oListbut2)
			
			oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
			warten_dialog.createPeer(oWin2, null)
			warten_dialog.execute

End Sub


Sub butlist1_ActionPerformed(oevent)
	
	warten_dialog.endexecute

end sub

Sub butlist2_ActionPerformed(oevent)
	
	verweise_setzen

end sub

sub win_windowClosing()

	abbruch=true

end sub

sub win_windowActivated
	'
end sub

sub win_windowDeactivated
	'
end sub

sub win_windowClosed()

	abbruch=true

end sub
Um damit effektiv zu arbeiten und es für mehrere Dateien zu nutzen würde ich es in ein neues Modul in "Meine Makros" speichern.
Also:
->Extras->Makros->Makros verwalten->Basic
In dem Dialog, im Bereich "Makro aus" auf "Meine Makros" klicken, dann auf die Schaltfläche "Verwalten".
In dem Dialog nun auf die Bibliothek "Standard" klicken und dann auf die Schaltfläche "Neu". Dem Modul nun einen zweckmäßigen Namen geben, z. B. "verzeichnis_verlinken" und OK.
Nun auf Bearbeiten klicken und das Makro hineinkopieren oder aus der Datei importieren.
Dateianhänge
stichworte_verlinken_2.bas.odt
die Endung .odt nach dem Download entfernen
(14.88 KiB) 54-mal heruntergeladen
Gruß,
mikeleb
quotsi
******
Beiträge: 704
Registriert: Do, 14.11.2013 10:04

Re: Hyperlink für Stichworte

Beitrag von quotsi »

Hallo,
Das ist alles vielversprechend.
Ich habe ja insgesamt drei Prüfobjekte:
1. Der Taucher - mit konventionellen Stichworteinträgen und Inhaltsverzeichnis.odt
Hier klappt das neue Makro gut !
2. Der Taucher - neu mit Konkordanz-Stichworteinträgen und Inhaltsverzeichnis.odt mit der Konkordanzdatei-1.sdi
Dann habe ich mit meinem Makro alle Stichworte gelöscht und das Verzeichnis mit der Konkordanzdatei wieder aufgebaut und nochmals aktualisiert.
Es klappt !
3.1. Koch- und Backrezepte - mit alphabetischem Stichwortverzeihnis - für LO.odt
gut gelaufen !
3.2. Koch- und Backrezepte - mit kapitelweisem Stichwortverzeichnis - für LO.odt
klappt ebenfalls prächtig !
3.3. Koch- und Backrezepte - komplett mit 2 Stichwortverzeichnissen - für LO.odt
führt naturgemäß ins Nirwana. Aber "alles aktualisieren" stellt den Ursprung wieder her. Man darf ja nicht das Unmögliche fordern.
Konkordanzdatei-2.sdi.odt
umbenennen in Konkordanzdatei-1.sdi
(406 Bytes) 55-mal heruntergeladen
Bitte umbenennen in Konkordanzdatei-1.sdi und mit dem Stichwortverzeichnis verlinken und aktualisieren.

Ein Schönheitsfehler bleibt: Man hat in dem zutreffenden Modul zu viele Makros, aber nur eines soll man aufrufen. Kann man denn die anderen nicht irgendwie als Unterroutine verstecken?

Dennoch: Es bleibt bei einem GROSSEN LOB für mikeleb, der eine Lösung für die fehlenden Hyperlinks im Stichwortverzeichnis gefunden hat. :-P
win11 - Avira - LO 7.6.6.3 (X86_64) - AOO 4.1.15
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
quotsi
******
Beiträge: 704
Registriert: Do, 14.11.2013 10:04

Re: Hyperlink für Stichworte

Beitrag von quotsi »

Hallo mikeleb,
Ich weiß nicht wie lange OpenOffice.info-Forum noch lebt. Vor kurzem war noch eine Ankündigung zum "Sterben" zu lesen. Aber ich bin nicht eingeweit.
Deshalb kommt mir die Idee, dass man für das Unterforum "Wissensarchiv" einen Artikel schreiben müßte, der den Nutzen und die Anwendung deines jetzigen Makros beschreibt. Wenn Du das aus Zeitdruck nicht kannst, würde ich damit anfengen, natürlich nur mit deiner Einwilligung, denn ich will mich nicht mit fremden Federn schmücken.
win11 - Avira - LO 7.6.6.3 (X86_64) - AOO 4.1.15
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hyperlink für Stichworte

Beitrag von mikeleb »

Hallo quotsi,
vielen Dank für die umfangreichen Tests (und die Blumen :) )!!!
Die Erstellung eines Stichwortverzeichnisses per Konkordanzdatei scheint wirklich etwas fehlerhaft zu sein (manchmal liefert dann .DocumentIndexMarks mehr Einträge als wirklich da sind, was dann zu der Fehlermeldung führt - warum habe ich noch nicht herausgefunden und auch nicht, wie man es abfangen könnte). Sauber funktioniert es, wenn zunächst alle Stichworteinträge gelöscht werden. Hier wird dein Makro wichtig!
Der nichtfunktionierende Fall mit zwei Stichwortverzeichnissen ist noch ärgerlich (theoretisch sollte es funktionieren, aber ...)
Der Vorschlag mit dem "Wissensarchiv" ist super. Wenn du damit starten möchtest - gern, Teamwork ist alles 8)
Gruß,
mikeleb
Benutzeravatar
miesepeter
********
Beiträge: 2110
Registriert: Sa, 10.05.2008 15:05
Wohnort: Bayern

Re: Hyperlink für Stichworte

Beitrag von miesepeter »

quotsi hat geschrieben: Sa, 08.04.2023 11:22 Hallo mikeleb,
Ich weiß nicht wie lange OpenOffice.info-Forum noch lebt. Vor kurzem war noch eine Ankündigung zum "Sterben" zu lesen.
Du meinst wahrscheinlich:
http://www.ooowiki.de/
Auf der Startseite wird als Termin der 29.04.2023 genannt, an dem das Wiki vom Netz genommen wird.
Du kannst bis dahin noch das ooowiki.de komplett downloaden (unter Linux mit wget); es wurde auch noch als kompakte PDF-Datei (jedoch ohne Beispieldateien, logischerweise) hier angeboten:
viewtopic.php?t=76483 (Thread durchlesen); https://www.libreoffice-forum.de/viewto ... 53#p100842

Bei diesem Forum hier ist wohl mittelfristig nicht zu erwarten, dass es stirbt, da es sich mittlerweile auch um ein LibreOffice-Forum handelt. Den Rückgang der Fragen kann man gut feststellen beim openoffice-forum.de, das kaum noch angefragt wird - im Gegensatz zum libreoffice-forum.de.

Ciao
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hyperlink für Stichworte

Beitrag von mikeleb »

Hallo quotsi,
das Problem mit der Konkordanzdatei lässt mich nicht wirklich los. Es existiert seit langem ein Bugreport https://bugs.documentfoundation.org/sho ... i?id=44152
dazu, der aber auch (noch) keine Lösung bietet ...
Bleibt also die manuelle Variante:
1. Alle Verzeichniseinträge löschen
2. Stichwortverzeichnis per Bearbeiten erneuern.
Gruß,
mikeleb
quotsi
******
Beiträge: 704
Registriert: Do, 14.11.2013 10:04

Re: Hyperlink für Stichworte

Beitrag von quotsi »

Nach meiner Meinung entsteht das Problem immer dann, wenn eine inhomogene Beziehung zwischen der Konkordanzdatei und den Stichworten im Text vorliegt. Das kommt bereits vor, wenn jemand weitere Stichworte im Fließtext einfügt anstelle in der Konkordanzdatei. Auch dann kommt es vor, wenn in der Konkordanzdatei etwas gelöscht wird. Denn offenbar werden im Normalfall zwar zusätzliche Daten aus der Konkordanzdatei in den Text als Stichwort übernommen, aber es werden keine Einträge im Fließtext gelöscht. Deshalb ist das Makro "AlleStichworteTilgen" aus meinem alten Wissensarchiv-Beitrag "Überführung von Stichworten ... in eine Konkordanzdatei" so wichtig geblieben, bevor man das Verzeichnis nach Änderungen aktualisiert.
Gruß
win11 - Avira - LO 7.6.6.3 (X86_64) - AOO 4.1.15
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Antworten