CALC: Hyperlink einfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: CALC: Hyperlink einfügen

Re: CALC: Hyperlink einfügen

von clag » Mo, 06.07.2015 07:50

Hallo kodela,

manchmal ist es übersichtlicher und einfacher Code auszulagern als separate Sub/Funktion

Code: Alles auswählen

sub CreateALink ( sLinkUrl$, sLinkText$, iSheet%, sCell$ )  
	oCalc = ThisComponent
	oSheet = oCalc.Sheets(Sheet)
	oCell = osheet.GetCellRangeByName(sCell)
	dim link as object
	link = oCalc.createInstance( "com.sun.star.text.TextField.URL" )
	link.URL = sLinkUrl
	link.Representation = sLinkText
	oCell.insertTextContent(oCell.getText().createTextCursor(), link, false)
end sub
und diese Sub dann mit den nötigen Parametern auf rufen

Code: Alles auswählen

sub MeinLinkCreatorAufruf
	LinkUrl = "http://de.openoffice.info/viewtopic.php?f=18&t=65989"
	Anzeige = "MeinLink"
	Blatt = 0
	Zelle = "C10"

'aufruf mit Variablen
	CreateALink LinkUrl, Anzeige, Blatt, Zelle 

'oder direkt mit den Strings bzw Werten
	CreateALink "http://de.openoffice.info/viewtopic.php?f=18&t=65989", "TestLink",  0, "C11" 
end sub

Re: CALC: Hyperlink einfügen

von kodela » Mo, 06.07.2015 00:08

Hallo Winfried,

danke für die Aufklärung. Ich sehe schon, da muss ich mich noch etwas schlau machen.

MfG, kodela

Re: URL an bestimmter Position einfügen

von komma4 » So, 05.07.2015 20:02

wie es der Name der Variablen schon sagt: es ist das Textobjekt einer Zelle.

Du kannst über den Textcursor dann auch anderen Text (ausser dem Hyperlink) einfügen, jede Stelle beliebig formatieren, usw.

Re: URL an bestimmter Position einfügen

von kodela » So, 05.07.2015 19:43

Hallo clag,

danke für den Hinweis. Ich habe diese Zeile eigentlich bewusst unterschlagen, denn ich bin davon ausgegangen, dass ich mit

Code: Alles auswählen

textobjekt = zelle.getText()
den Inhalt der Zelle einlese, was in meinem Fall nichts bringen würde. Ist das ein Denkfehler von mir. Werde es gleich ausprobieren.

Ja, damit funktioniert es. Nochmals vielen Dank für den Hinweis. Kannst Du mir noch sagen, was mit der besagten Zeile eigentlich geschieht?

MfG, kodela

Re: URL an bestimmter Position einfügen

von clag » So, 05.07.2015 19:22

Hallo kodela,

es sieht so aus als hättest du folgende Zeile unterschlagen

Code: Alles auswählen

textobjekt = zelle.getText()
mit, funktioniert es vermutlich dann auch besser ;)

Re: URL an bestimmter Position einfügen

von kodela » So, 05.07.2015 17:32

Hallo Winfried,

danke für Deine Empfehlung. Ja, das ist mir auch lieber, es ohne Dispatcher zu machen. Jetzt sieht mein Code so aus:

Code: Alles auswählen

	Dim link '(As ???)
	....
	....
	If modus = 6 Then
	
		'  URL bilden
		sAufgabe = "http://www.str8ts.com/str8ts.htm?bd=" + sWerte + sZellen
		
		' Ausgabezelle festlegen
		oZelle = oTabelle.getCellByPosition(21, nZeile + (nSpalte Mod 9) - 1)
		
		' link instanzieren
		link = oDoc.createInstance( "com.sun.star.text.TextField.URL" )
		
		' link definieren
		link.URL = sAufgabe
		link.Representation = "TestLink"
		
		' link ausgeben - damit bekomme ich aber den BASIC-Laufzeitfehler "Variable nicht definiert"
		oZelle.insertTextContent(textobjekt.createTextCursor(), link, 1)
	End If
Was mache ich falsch?

MfG, kodela

Re: URL an bestimmter Position einfügen

von komma4 » So, 05.07.2015 16:40

Lass mal den dispatcher code weg und nehm' Basic

Code: Alles auswählen

SUB calc_Hyperlink_In_Zelle()
' 20150705
' de 65989

' Objekte
dok = ThisComponent
blatt = dok.Sheets.getByName("Tabelle2")
zelle = blatt.getCellRangeByName("H3")
textobjekt = zelle.getText()

' Aufbereiten der URL
url = ConvertToURL("/pfad/zur/Datei")
' Anzuzeigender Text
txt = "Springe zur Datei"

' Instanz
link = dok.createInstance( "com.sun.star.text.TextField.URL" )
' Instanz besetzen
WITH link
   .URL = url
   .Representation = txt
END WITH 

' einfügen in Zelle
zelle.insertTextContent( textobjekt.createTextCursor() , link , TRUE )

END SUB 

CALC: Hyperlink einfügen

von kodela » So, 05.07.2015 15:15

Hallo,

jetzt habe ich noch einmal eine Frage: In meinem vorstehenden Thema zur Stringausgabe habe ich den verwendeten Code bereits gepostet.

Jetzt möchte ich gerne, an Statt des simplen Strings daraus einen URL machen. Das habe ich einmal als Makro aufgezeichnet und funktioniert grundsätzlich. Das Problem ist nur die Position, an der der Link ausgegeben wird. Das aufgezeichnete Makro habe ich für die Parameterübergabe etwas umgemodelt und gibt mir den Link aber an der aktuell selektierten Zelle aus. Das darf aber nicht sein.

Hier das Makro:

Code: Alles auswählen

sub setzeLink (Name As String, URL As String)
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	Dim oZelle As Object
	
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	dim args1(4) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "Hyperlink.Text"
	args1(0).Value = Name
	args1(1).Name = "Hyperlink.URL"
	args1(1).Value = URL
	args1(2).Name = "Hyperlink.Target"
	args1(2).Value = ""
	args1(3).Name = "Hyperlink.Name"
	args1(3).Value = ""
	args1(4).Name = "Hyperlink.Type"
	args1(4).Value = 1
	
	dispatcher.executeDispatch(document, ".uno:SetHyperlink", "", 0, args1())

end sub
Es geht wohl um die letzte Zeile. Hier habe ich versucht, die aktuelle Zelle von der aufrufenden Sub zu übergeben und an Stelle von "document" einzusetzen, was aber erwartungsgemäß nicht funktioniert. Wie kann ich diesem Makro sagen, wo die Ausgabe erfolgen soll.

MfG, kodela


Moderation,4: Betreff angepasst

Nach oben