Hallo liebe LibreOffice-Freunde,
ich habe in EINER Calc-Tabellenzelle mehrere Hyperlinks angelegt.
Nun musste ich das Laufwerk ändern. Über Celle.textfields().URL konnte ich über ein Makro alle Links recht bequem ändern. Leider gelingt mir nur so der Zugriff auf den ersten Link in der Zelle. Wie komme ich an den zweiten Link über ein Makro ran? Über den Hyperlink-Dispatcher komme ich ohne Weiteres an den zweiten Link aber wie über ein Makro. Auch der Makrorekorder hilft mir hier nicht weiter. In Celle.textfields() wird nur der erste Link angezeigt.
MfG
Hallo
‘Celle’ ist eine Stadt in Niedersachsen, entscheide dich für die deutsche oder englische Bezeichnung.
Du scheinst eine ander Tabellenkalkulation zu benutzen als ich, bei mir gibts kein cell.Textfields.URL
und falls ich ein oder mehrere Textfelder in der Zelle habe, kann ich die zählen: …Count und ich kann auch per …index-zugriff oder auch per …enumeration auf die einzelnen Textfelder zugreifen!!
O. K. Entschuldige. Vielen Dank erst mal für deine Antwort.
Also ich meine in einer Tabellenzelle von LibreOffice Calc. Über die Eigenschaft oCelle.textfields().URL kann man eigentlich die Hyperlinks auslesen. Ich meine KEINE Textfelder in Writer sonder in einer Tabellenzelle. Z.B.:
For i = 0 To n - 1
txtFields(i) = oCelle.Textfields(i)
sUrl = txtFields(i).URL
REM … weitere Verarbeitung des Hyperlinks
Next
Natürlich muss die Zelle zumindest einen Hyperlink enthalten, sonst gibt es einen Laufzeitfehler. Diesen kann man Abfangen indem man vorher ermittelt:
n = oCelle.Textfields.count
MfG
Du greifst doch bereits auf die einzelnen Textfelder zu… wo ist jetzt noch dein Problem?
Lege doch bitte selbst mal in EINER Zelle zwei Hyperlinks getrennt durch ein oder mehrere Leerzeichen an. Dann wendest du mein Basic-Snippel angepasst an. Dann wirst du feststellen, dass nur das erste textfields(0) belegt ist. z.B. Ich habe in EINER Zelle den Filmtitel “Emil” und dahinter “Inhalt” zu stehen.
Der Emil ist mit dem Film (mp4) verknüpft. Der Inhalt ist mit einer Text-Datei verknüpft. Beide sind im gleichen Laufwerk, Nun habe ich den Laufwerksbuchstaben wie geschrieben über das Makro den ersten Link geändert. Wie komme ich nun aber an den Link für den Inhalt?
Hallo
Das hab ich bereits getan, BEVOR ich dir geantwortet habe…
def show_link_urls():
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
for field in sel.TextFields:
print(field.URL)
wenn ich das ausführe( mit einer Zelle die zwei Hyperlinks enthält):
file:///home/pi/aaaa/docker-raspap-master/README.md
file:///home/pi/aaaa/docker-raspap-master/makefile
Vielen Dank für deine Bemühungen. Aber wie ich sehe arbeitest du mit Python. Ich arbeite mit Basic und daher ist mir der Begriff XSCRIPTCONTEXT unbekannt. Ich muss mich erst einmal damit auseinandersetzen. Eine bisherige Umsetzung deines Snippels warf mir den Fehler aus:
Variable nicht definiert. Ich habe mal kurz dein Python in Basic versucht zu Übersetzen:
oDoc = ThisComponent
osheet=thiscomponent.currentcontroller.activesheet
oCurrentcontroller = oDoc.GetCurrentController()
mdoc = XSCRIPTCONTEXT.getDocument()
oSel = mdoc.CurrentSelection
ic = 5
txtFields(i) = oSel.Textfields(i)
For Field = 0 To sel.Textfields.count
oCelle = oSheet.GetcellbyPosition(ic,2)
oCelle.String = Field.URL
ic = ic + 1
Next
Über Makros verwalten Python konnte ich kein Modul anlegen. Also ich muss mich etwas gründlicher damit beschäftigen. Nochmals vielen Dank für deine Bemühungen. Aber es müsste doch auch in Basic möglich sein oder?
MfG
die Übersetzung nach BASIC ist fast schon trivial:
sub show_link_urls
doc = ThisComponent
sel = doc.CurrentSelection
for each field in sel.TextFields
print( field.URL )
next
end sub
Vielen herzlichen Dank. Das hat einwandfrei geklappt. Du hast mir sehr viel Arbeit erspart.
Mit freundlichen Grüßen