Kalender

Oktober 2009
M D M D F S S
« Aug   Nov »
 1234
567891011
12131415161718
19202122232425
262728293031  

Valid XHTML 1.0 Transitional

Blog Top Liste - by TopBlogs.de
Seitwert

Googlewerbung

Amazonwerbung

Ortstafel Blogdorf

Suche

Bloggeramt.de Suchmaschinenoptimierung mit Ranking-Hits No NoFollow! Add to Technorati Favorites

Hyperlink in Tabellenkalkukation(en)

30. Oktober 2009 von Da Dirnbocher

Vor kurzem stand ich vor der Frage, wie man in einer Tabellenkalkukation (Excel, Openoffice.Calc, Staroffice.Calc) die URL aus einem Link - formelmäßig - rausbekommt, der in einer Zelle steht. Also quasi die Umkehrfunktion zur Funktion HYPERLINK.

Für Excel lieferte mir Google relativ bald eine Lösung. Mit der Funktion aus dem angeführten Link erhält man sehr einfach die gewünschte URL:

Option Explicit

Function HyperLinkAddress(r As Range) As String
If r.Hyperlinks.Count > 0 Then
HyperLinkAddress = r.Hyperlinks(1).Address
Else
HyperLinkAddress = “”
End If
End Function

Für Star- bzw. Openoffice wollten offenbar zunächst die richtigen Suchbegriffe nicht einfallen, so dass auch keine brauchbaren Lösungen von Google gefunden wurden.

Nach paar Tagen und 2 erfolglosen Anfragen in einer Mailingliste und in einer Newsgroup machte ich mich nochmal auf die Suche und fand diesmal über Umwege doch noch eine Lösung für Star- bzw. Oppenoffice. Über Umwege deshalb, da mich die Suchergebnisse der ersten Suche auf neue Suchbegriffe brachten. Die Suchergebnisse daraus, wieder auf weitere Suchbegriffe …

Dafür fand ich 2 - zum Teil gleiche, aber doch unterschiedliche - Lösungen.

Die erste Lösung (EXTRACTHYPERLINK) gibts im OOoForum:

function ExtractHyperLink(lSheet as Long, lCol as Long, lRow as Long) as String

ExtractHyperLink = “– no Hyperlink –”

fields = ThisComponent.Sheets.getByIndex(lSheet-1).getCellByPosition(lCol-1,lRow-1).getText().getTextFields()

if fields.hasElements() then

ExtractHyperLink = fields.getByIndex(0).URL

endif

end function

Der Aufruf lautet dann zB

=EXTRACTHYPERLINK(SHEET(A1);COLUMN(A1);ROW(A1))

Die 2. Lösung (CELL_URL) fand ich dann beim Openoffice.org Community Forum, wobei der entscheidende Hinweis wieder aus einem Post aus dem OOoForum stammte:

Function CELL_URL(vSheet,lRowIndex&,iColIndex%,optional n%)

‘calls: getSheetCell

REM returns URL of Nth text-hyperlink from a cell, default N=1)

Dim v
If isMissing(n) then n= 1
If n < 1 then
CELL_URL = Null
exit function
endif
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
if v.Textfields.Count >= n then
CELL_URL = v.getTextfields.getByIndex(n -1).URL
else
Cell_URL = Null
endif
else
CELL_URL = v
endif
End Function

Diese Funktion ist im Kern gleich der obigen. Der Vorteil dieser 2. Version ist an sich darin begründet, dass an dieser Fundstelle mehrere CELL_* Funktionen zu finden sind, die mehr leisten, als nur den Link zu extrahieren.

Im Grunde ist damit mein ursprüngliches Problem gelöst, und noch dazu mit einer Lösung für Star- bzw. Openoffice.

2 Probleme bleiben noch, die sind aber zur Zeit verkraftbar, und entstanden erst durch die Lösung:

  1. Alle Lösungen funktionieren nicht als “Umkehrfunktion” zu HYPERLINK. Das stört zwar nicht, da ich eigentlich nur eine Lösung für den Fall brauchte, dass ein Link von extern reinkopiert wurde. Es hat mich allerdings etwas Zeit gekostet, da ich zuerst der Meinung war, dass die Lösungen bei mir nicht funktionieren.
  2. Für Star- und Openoffice gilt der Hinweis aus der 2. Lösung. Der Nachteil im Vergleich zu Excel ist die fehlende automatische Neuberechnung.

    Contrary to Excel-VBA, user defined functions do not get cell objects as arguments. StarBasic functions get (arrays of) values only. After opening a saved document or after changing anything related, these function need a hard recalculation (Ctrl+Shift+F9). Usually they can not update automatically because the arguments don’t change.

Geschrieben in Office | 2 Kommentare »