CALC: Hyperlink einfügen

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

Moderator: Moderatoren

kodela
****
Beiträge: 121
Registriert: Sa, 13.10.2012 10:35
Kontaktdaten:

CALC: Hyperlink einfügen

Beitrag von kodela »

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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: URL an bestimmter Position einfügen

Beitrag von komma4 »

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 
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
kodela
****
Beiträge: 121
Registriert: Sa, 13.10.2012 10:35
Kontaktdaten:

Re: URL an bestimmter Position einfügen

Beitrag von kodela »

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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: URL an bestimmter Position einfügen

Beitrag von clag »

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 ;)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
kodela
****
Beiträge: 121
Registriert: Sa, 13.10.2012 10:35
Kontaktdaten:

Re: URL an bestimmter Position einfügen

Beitrag von kodela »

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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: URL an bestimmter Position einfügen

Beitrag von komma4 »

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.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
kodela
****
Beiträge: 121
Registriert: Sa, 13.10.2012 10:35
Kontaktdaten:

Re: CALC: Hyperlink einfügen

Beitrag von kodela »

Hallo Winfried,

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

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

Re: CALC: Hyperlink einfügen

Beitrag von clag »

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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten