Seite 1 von 1

Writer: Hyperlink einfügen

Verfasst: Mi 26. Feb 2020, 08:10
von Fred_J
Hallo,
ich versuche, einen Hyperlink auf eine andere odt-Datei in ein Writer-Dokument einzufügen:

Code: Alles auswählen

Sub InsertHyperlink(filePath As String)
 Dim url As String
 Dim oDoc As Object, oText As Object, oLink As Object
 
 oDoc = ThisComponent
 oText = oDoc.Text
 url = ConvertToUrl(filePath)
 oLink = oDoc.createInstance( "com.sun.star.text.TextField.URL" )
 oLink.URL = url
 oLink.Representation = filePath
 'XRay oLink ' -> Format = 2

 oText.insertTextContent(oText.getEnd(), oLink, false) ' Illegal argument
End Sub
XRay zeigt, daß das Link-Objekt erzeugt wird und die Property Format auf 2 gesetzt wird.
insertTextContent löst Exception IllegalArgument aus.
Wie mache ich das richtig?

Vielen Dank,
Fred

Re: Writer: Hyperlink einfügen

Verfasst: Mi 26. Feb 2020, 20:44
von craig
Hallo Fred,

ich bin mir nicht sicher, aber man kann Text nur an einen der Cursor übergeben.

Es gibt nur einen ViewCursor, dieser entspricht dem blinkendem Cursor im Dokument.
Ausserdem gibt es die Möglichkeite einen oder mehrere TextCursor zu definieren.
Der/ die TextCursor ist/sind nicht sichtbar, aber man kann sich wie mit dem ViewCursor durch das Dokument bewegen.

Es gibt aber Unterschiede: Siehe hier...

8.1.4 Wie kann man einen Hyperlink einfügen?

Re: Writer: Hyperlink einfügen

Verfasst: Mi 26. Feb 2020, 21:27
von Fred_J
Danke Craig
für Deine schnelle Antwort!
Inzwischen habe ich noch einiges probiert und herausgefunden:
Ein Hyperlink in einem odt ist kein TextField, sondern eine TextPortion eines Paragraph.
Von einer TextPortion kann ich keine Instanz erstellen, Fehler: Service not registered.
Dein Link ist da gut:
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig247
Danke dafür!
Ich versuche mal, morgen damit weiterzukommen.

Einen schönen Abend wünscht
Fred

[GELÖST]: Writer: Hyperlink einfügen

Verfasst: Do 27. Feb 2020, 10:13
von Fred_J
Hallo,
der Code funktioniert jetzt:

Code: Alles auswählen

Sub InsertHyperlink(filePath As String, aText As String)
 Dim url As String
 Dim oDoc As Object, oText As Object, oCursor As Object
 
 url = ConvertToUrl(filePath)
 oDoc = ThisComponent
 oText = oDoc.Text
 oText.insertControlCharacter(oText.getEnd(), _
  com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
 oText.insertString(oText.getEnd(), filePath, false)
  
 oCursor = oText.CreateTextCursor()
 oCursor.gotoEnd(false)
 oCursor.gotoStartOfParagraph(false)

 oCursor.goRight(Len(filePath), true)
 With oCursor
  .HyperLinkName = "DocLink" 'optional
  .HyperLinkURL = url
 End With
 
 oText.insertString(oText.getEnd(), aText, false)
End Sub

Viele Grüße,
Fred