Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

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

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von balu »

Schön guten Tag, liebe Gemeinde.

Ich krieg es nicht gebacken, StarBasic zu verstehen, sorry :( . Deshalb bitte ich um eure Hilfe.

Also, ich habe 4 Spalten in denen Formatierte Hyperlinks drinstehen, die ich über "Verknüpfung zu externenen Daten" importiert habe. Nun möchte ich mir in 4 weiteren Spalten daneben per "Benutzerdefenierte Function" nur die Hyperlink-Adressen ausgeben lassen. Aber auch nur dann, wenn in einer anderen Zelle eine 1 drin ist. Also in etwa so:

Code: Alles auswählen

=WENN(X4;HyperAdresse;"")
Wobei HyperAdresse die "Benutzerdefenierte Function" wäre.

Im ganz groben müsste ja die Function dann etwa so aussehen,

Code: Alles auswählen

Function HyperAdresse (HyAdres As Integer) 

	oBlatt = ThisComponent.Sheets().getByName( "Tabelle1" )
	oZelle = oBlatt.getCellRangeByName( "C3" )
	Print ConvertFromURL( oZelle.getTextFields().getByIndex( 0 ).URL )

HyperAdresse = HyAdres 

End Function
aber auch nur im ganz groben. Denn ich weiss nicht wie ich der Function Relative Bezüge, per Row und Colum, erklären soll. Kurz und gut, ich versteh gar nichts.
Den eingerückten Teil der Formel habe ich hir im Forum gefunden, den Winfried mal gepostet hatte um den Hyperlink in eine "MessageBox" auszugeben.
Meine Frage lautet also jetzt:
Wie muss ich den oben genannten Code ändern, damit die Function HyperAdress mir innerhalb der 4 Spalten den Hyperlink ausgibt?
Ach ja, die Function soll nur im 1. Tabellenblatt ausgeführt werden.

Ich hoffe ich hab mich verständlich genug ausgedrückt, ansonsten müsst ihr noch mal nachfragen.

Für eure Bemühungen bedanke ich mich schon mal recht herzlich, und wünsche euch noch einen schönen Sonntagabend :D .


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7519
Registriert: Mo, 02.01.2006 19:48

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von Karolus »

Hallo Balu
Erklär das nochmal mit ganz anderen Worten, zumindest ich versteh gerade nur Bahnhof!
( 'Hyperlink' ist nicht 'Verknüpfung zu externen Daten' )

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von balu »

Hallo Karo,

na dann will ich mal versuchen Schaffner zu spielen :lol:

Also, wenn man eine xterne Tabelle verknüpft, z.B. von http://www.nba.com/playerfile/dirk_nowi ... stats.html, dann sind ja manchmal einige Daten als Hyperlinks eingefügt. Das erkennt man ja daran, dass der dementsprechende Zelleintrag einen Grauen Hintergrund mit einer Blauen Schrift enthält, das ist der Hyperlink.

Hab da mal ein kleines Beispiel angehängt, von der besagten Seite.

Wie zu ersehen ist, steht da z.B. Milwaukee. Aber dahinter verbirgt sich der Hyperlink http://www.nba.com/bucks/. Und genau diesen will ich auslesen. Jetzt verständlicher :wink:


Gruß
balu
Dateianhänge
HyperAdress.ods
(13.21 KiB) 31-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von turtle47 »

Hallo mein Freund Balu,

die Function könnte folgendermassen aufgebaut sein:

Code: Alles auswählen

Function HyperAdresse (oCell_Hyp as String , oCell_Check as String , HyperAdresse As string)
	oBlatt = ThisComponent.Sheets().getByName( "Tabelle1" )
	oZelle_Check = oBlatt.getCellRangeByName(oCell_Check).value
	if oZelle_Check = 1 then
	oZelle = oBlatt.getCellRangeByName( oCell_Hyp )
	HyperAdresse = ConvertFromURL(oZelle.getTextFields().getByIndex(0).URL)
	else
	HyperAdresse = ""
	end if
End Function
Aufgerufen wird sie wie folgt:

Code: Alles auswählen

=HYPERADRESSE("A2";"D2")
Die Prüfziffer "1" steht in Zelle "D2"!

Die Aktualisierung funktioniert nicht automatisch sondern muss mit Strg+Shift+F9 aufgerufen werden.

Hilft das weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Karolus
********
Beiträge: 7519
Registriert: Mo, 02.01.2006 19:48

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von Karolus »

Hallo

@Jürgen
Gute Arbeit !
Bis '..getTextfields' bin ich ja gekommen, aber danach noch '..getbyIndex(0).url' zu erforschen, kam ich nicht drauf ;-)

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von turtle47 »

Hallo Karo,
Karolus hat geschrieben:@Jürgen
Gute Arbeit !
Bis '..getTextfields' bin ich ja gekommen, aber danach noch '..getbyIndex(0).url' zu erforschen, kam ich nicht drauf
Nee nee nee, will mich ja nicht mit fremden Feder schmücken, aber ich kann vielleicht nur besser lesen. 8)
balu hat geschrieben:Den eingerückten Teil der Formel habe ich hir im Forum gefunden, den Winfried mal gepostet hatte um den Hyperlink in eine "MessageBox" auszugeben.
....
balu hat geschrieben:Function HyperAdresse (HyAdres As Integer)

oBlatt = ThisComponent.Sheets().getByName( "Tabelle1" )
oZelle = oBlatt.getCellRangeByName( "C3" )
Print ConvertFromURL( oZelle.getTextFields().getByIndex( 0 ).URL )

HyperAdresse = HyAdres

End Function
Schönen Gruss.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Karolus
********
Beiträge: 7519
Registriert: Mo, 02.01.2006 19:48

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von Karolus »

Hallo
oZelle.getTextFields().getByIndex( 0 ).URL )
Aua, da steht die Auflösung schon in der ersten Frage und ich suche verzweifelt mit mri und xray.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von balu »

Hallo meine Freunde,

erst einmal ein dickes Dankeschön an meinen Freund Jürgen :D. Damit bin ich schon mal ein gutes Stück weiter.
Auch für unseren Formelpapst ein Dankeschön für seine Bemühungen :D.

Jedoch, möchte ich es noch etwas "Komfortabler" haben. Ja ja, ich weiss! Keine Ahnung von der Materie, aber nach noch mehr verlangen wollen, tztztz. :lol:.

Nun, wenn ich die Function nach rechts und unten ziehen will, ergibt das ein Problem. Denn die Zelladressen wandern ja nicht mit, da sie ja in Anführungszeichen stehen. Das ist ja so, als wären es Absolute Bezüge A-la $A$1. Und wenn ich die Anführungszeichen weglasse, dann määckert Calc und das Makro meldet einen "Exception".

Wenn ich aber den Aufruf der Function so ändere, dass sie sich die Zelladresse aus einer anderen Zelle holt, dann geht es, auch wenn es etwas umständlich ist.
Beispiel an Hand der angehängten geänderten Beispieldatei:
In A20 steht A2, und in B20 steht C2
In A21 steht A3, und in B21 steht C3
[...]
Der Aufruf der Function lautet dann:

Code: Alles auswählen

=HYPERADRESSE(A20;B20)
Und die kann ich ja dann z.B. nach unten ziehen.
Schöner wäre es allerdings, wenn es ohne die Hilfszellen gehen würde, also dass die Zellbezüge sich automatisch anpassen. Läßt sich da noch was machen? Das wäre einfach fantastisch *freu*. Und wenn nicht, ist es auch nicht weiter schlimm.

@Karo
Aua, da steht die Auflösung schon in der ersten Frage und ich suche verzweifelt mit mri und xray.
Tschuldigung mein Fehler. Ich sollte demnächst aufm Bahnhof lauter und deutlicher reden :wink:.


Gruß
balu
Dateianhänge
HyperAdress_mit_Function_alfa.ods
(17.66 KiB) 30-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7519
Registriert: Mo, 02.01.2006 19:48

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von Karolus »

Hallo
Damit ich hier auch mal was sinnvolles beitrage:

Code: Alles auswählen

Function HyperAdresse ( hyp_col as int , Check_col as int , irow as int )
   oBlatt = ThisComponent.Sheets().getByName( "Tabelle1" )
   oZelle_Check = oBlatt.getCellByposition(check_col -1 , irow -1 ).value
   if oZelle_Check = 1 then
   oZelle = oBlatt.getCellByPosition( hyp_col -1 , irow -1)
   HyperAdresse = ConvertFromURL(oZelle.getTextFields().getByIndex(0).URL)
   else
   HyperAdresse = ""
   end if
End Function
Aufrufsyntax in Calc:
=HYPERADRESSE(SPALTE(A2);SPALTE(C2);ZEILE(A2))

dies kannst du ohne Hilfszellen einfach nach unten ziehen.

edit:
Fehler beseitigt!

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von balu »

Hallo Karo,
edit:
Fehler beseitigt!
Nicht ganz. Du hattest die Variablen nicht ganz richtig defeniert (oder so).
Richtig muss es wohl heißen

Code: Alles auswählen

Function HyperAdresse ( hyp_col as Integer , Check_col as Integer , irow as Integer )
Mit was anderem als "Integer" habe ich jetzt nicht getestet.

Kurz und gut.
Das Ergebnis ist jetzt Göttlich. Es funzt so wie ich es mir gewünscht hatte. Ich bin echt Häppy :mrgreen:.
Respekt, und ein dickes Herzliches Dankeschön an dich :D


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von balu »

Hallo Leute,

für all diejenigen die irgendwann einmal auf diesen Beitrag stoßen, sei noch mal eben die Parameterbelegung von

Code: Alles auswählen

=HYPERADRESSE(SPALTE(A2);SPALTE(C2);ZEILE(A2))
kurz erklärt.

SPALTE(A2) ist die Spalte mit dem formatiertem Hyperlink
SPALTE(C2) ist die Spalte mit der Prüfziffer
ZEILE(A2) ist die Zeile in der sich beide Zellen befinden müssen.

Bei SPALTE spielt die Zeilennummer keine Rolle. Wichtig ist der Spaltenname, da dadurch die Spaltennummer defeniert wird.
Und bei ZEILE verhält es sich genau andersrum.

Daraus folgt dann; das die auszulesende Zelle mit dem Hyperlink sich in der gleichen Zeile befinden muss, wie die Zelle mit der Püfziffer. Die Spaltendifferenz spielt keine Rolle, sie kann ein, oder mehrere Spalten weit auseinander sein.

Ich hoffe das es verständlich ist.

Mit dieser kurzen Erklärung wollte ich mich noch mal bei Jürgen und Karo für ihre Hilfe bedanken.
Danke Jungs :D
Das war ich euch schuldig.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Hyperlink-Adressen per Benutzerdefenierte Function auslesen.

Beitrag von turtle47 »

Hallo Zusammen,
balu hat geschrieben:Jedoch, möchte ich es noch etwas "Komfortabler" haben. Ja ja, ich weiss! Keine Ahnung von der Materie, aber nach noch mehr verlangen wollen, tztztz.
Es gibt nichts Schlechtes was nicht auch was Gutes für sich hat. :o

Mir hat sich nämlich jetzt folgendes erschlossen:
Wenn man die Funktion so wie Karolus über Zeile, Spalte usw. schreibt, dann aktualisiert sich der Zellinhalt automatisch, wenn sich die "Prüfziffer" ändert. Also Strg+Shift+F9 kann entfallen. :lol:


Einen erfolgreichen Wochenstart wünsche ich.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten