Eigenschaft Hyperlink geht verloren

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Eigenschaft Hyperlink geht verloren

Beitrag von clag »

Hallo Kenner und Könner,

in einer Makro schleife möchte ich die Anzahl der vorhandenen Überschriften ermitteln
und dann jeder Überschrift in absteigender Form eine Zahl voranstellen.

Die Schleife funktioniert auch schon soweit

Code: Alles auswählen

dim countHL as integer
	
	While Enum.hasMoreElements
		checkElement = Enum.nextElement
		if left(checkElement.ParaStyleName,9) = "Heading 1" then
			countHL = countHL +1
		end if
	wend
'	msgbox countHL

	enum = objText.createEnumeration
	While Enum.hasMoreElements
		checkElement = Enum.nextElement
		if left(checkElement.ParaStyleName,9) = "Heading 1" then
'			print countHL & "    " & checkElement.string
			checkElement.string = countHL & "    " & checkElement.string
			countHL = countHL - 1
		end if
	wend

Die Überschriften sind aber auch Hyperlinks und diese Eigenschaft geht verloren,
wenn die Zahl per Makro vorangestellt wird, ändere ich händisch is es ok.

Wie kann ich verhindern,
das bei änderung durch das Makro die Eigenschaft Hyperlink verloren geht?

und wie ereiche ich eine zweistellige Zahl bei 1-9?

schonmal Danke
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Eigenschaft Hyperlink geht verloren

Beitrag von Axel Richter »

Hallo clag,
clag hat geschrieben:Die Überschriften sind aber auch Hyperlinks und diese Eigenschaft geht verloren,
wenn die Zahl per Makro vorangestellt wird, ändere ich händisch is es ok.
Wenn Du es händisch auch so machst, wie Dein Makro, dann geht der Hyperlink auch verloren. Dein Makro ersetzt ja den gesamten Absatz. Das ist so, als würdest Du die gesamte Überschrift markieren und dann übertippen. Was Du offensichtlich willst, ist einen Text vor den Überschriftstext einfügen. Dazu musst Du aber erst Mal ein TextRange haben, welches vor dem Überschriftstext steht. Das ist genau das, was die Methode .getStart() zurückliefert.

Code: Alles auswählen

        ' checkElement.string = countHL & "    " & checkElement.string
         checkElement.getStart().string = countHL & "    " & checkElement.string
clag hat geschrieben:und wie ereiche ich eine zweistellige Zahl bei 1-9?
Indem Du eine "0" voranstellst, wenn der Zähler einstellig ist.

Du musst aber auch nicht den Text zwei mal durchlaufen. Einmal zum Zählen und einmal zum Schreiben der Nummern. Speichere Die die betroffenen TextRanges in einem Array.

Code: Alles auswählen

oText = thiscomponent.Text

iH1Counter = 0

dim aTextRanges(0) as object

oParagraphEnumeration = oText.createEnumeration()
while oParagraphEnumeration.hasMoreElements()
 oParagraph = oParagraphEnumeration.nextElement()
 if  oParagraph.ParaStyleName = "Heading 1" then
  atextRanges(iH1Counter) = oParagraph.getStart()
  iH1Counter = iH1Counter + 1
  redim preserve aTextRanges(iH1Counter)
 endif
wend

for i = lbound(aTextRanges) to ubound(aTextRanges)-1
 sH1Number = CStr(iH1Counter)
 if len(sH1Number) < 2 then sH1Number = "0" & sH1Number
 aTextRanges(i).setString(sH1Number)
 iH1Counter = iH1Counter - 1
next
viele Grüße

Axel
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Eigenschaft Hyperlink geht verloren

Beitrag von clag »

Hallo Axel,

erst ein mal Danke für deine ausführliche Antwort mit Lösungsvorschlag :D
habe noch lange daran rumgebastelt und dann einen ahnlichen Weg gefunden
um zu verhindern das der Hyperlink verloren geht.

es entzieht sich aber meinem Urteilsvermögen ob der eine oder ander Weg vorteilhafter ist.

Code: Alles auswählen

	mytextCursor=oDoc.text.createtextcursor()
	enum = objText.createEnumeration
	Do While Enum.hasMoreElements
		checkElement = Enum.nextElement
		if left(checkElement.ParaStyleName,9) = "Heading 1" then
			countHLf = Format(countHL, "00")
			if right(left(checkElement.string,7),5) = "     " then 
				mytextCursor.gotorange( checkElement.Anchor, false )
				mytextCursor.gotoStartofParagraph (false)
				mytextCursor.goRight(5,true)
				mytextcursor.string = countHLf & "   "
			else	
				mytextCursor.gotorange( checkElement.Anchor, false )
				mytextCursor.gotoStartofParagraph (false)
				otext.insertString(mytextcursor, countHLf & "     ",false)
			end if
			countHL = countHL -1
		end if
	loop
mit diesem Teilcode wird auch gleich geprüft ob schon einmal Zahlen eingefügt wurden
wenn ja werden sie durch die Neuen nur ersetzt (falls das Makro mehrfach aufgerufen wird)

ich werde deinen Code aber auch noch ausprobieren
und nochmal Danke :)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten