Seite 1 von 1
Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Mi, 14.09.2011 21:37
von polyluchs
Sehr geehrte Profis,
seit längeren suche ich eine Lösung für folgendes Problem:
In einem Calc Sheet habe ich einige Adresse mit Hyperlinks hineinkopiert. Wenn man nun mit der Maus über diese drüber-schweift, wie im Feld "Namen" sie wird der tatsächliche Name gezeigt, wie "Hugo Max". Wie bekomme ich nun den Namen Hugo Max als reinen Text=? Das selbige sollte auch mit dem Feld Email passieren. Allerdings funktioniert folgendes Makro nicht (ist eigentlich für Excel):
Code: Alles auswählen
Function GetAddress(HyperlinkCell As Range)
GetAddress = Replace _
(HyperlinkCell.Hyperlinks(1).Address, "mailto:", "")
End Function
Hilfe!
Bei mir kommt Fehler Code 509
Besten Dank für die Unterstützung!
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; CODE tags gesetzt
Re: Makro Umwandlung Hyperlinks Inhalt Feldtyps auslesen
Verfasst: Do, 15.09.2011 01:38
von lorbass
Fragen zu Makros gehören eigentlich ins Unterforum
OOo Basic und Java.
Die Standard-Infos fehlen:
- Welches Betriebssystem?
- Welche OOo- / LibO-Version?
Zusatzfragen:
- Welche Einstellungen finden sich bei dir unter Extras > Optionen > Laden/Speichern > VBA-Eigenschaften?
- Mit welcher Excel-Version wurde das Makro erstellt?
- Wie genau (!) wird das Makro aufgerufen?
Fehler-Code 509 heißt in Worten »Fehlender Operator«. Das deutet für mich eher weniger auf das Makro als Ursache, sondern auf seinen Aufruf in Calc. Allerdings sind Makros nicht gerade mein Spezialgebiet.
Gruß
lorbass
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 05:32
von komma4
Willkommen im Forum
polyluchs hat geschrieben: Wie bekomme ich nun den Namen Hugo Max als reinen Text=?
Vielleicht geht es auch ohne Makros... dann schieb' ich das Thema wieder zurück
Also: an den Inhalt eines mailto-Hyperlinks, Feld "Name" komme ich mit einer Formel.
Steht der Link in A2 ergibt die Formel
in B2 den Inhalt.
Reicht das aus?
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 09:18
von polyluchs
Vielen Dank für die schnellen Antworten!
Welches Betriebssystem? = Ubuntu 10.10 / Windoof 2000
Welche OOo- / LibO-Version? = 3.2 OO / 3.4.3 Libo
VBA Eigenschaften alles angekreuzelt...
Excel-Version = wahrscheinlich Excel 2000 / XP (hab es auch nur aus dem Netz gesaugt.)
Auch die content.xml zu verändern hatte nix gebracht - da man ja nicht nur einen Link sondern über Suchen und Ersetzen mehrere Feldtypen gleichzeitig bearbeitet. Egal mit welchem XML Editor - auch bei Emacs wird gemeckert. Aber das ist auch nochmal ne andere Baustelle. galanter wäre natürlich eine Lösung direkt im OO / libreoffice! Sieht alles sehr nach Java aus.
Ist schon ein guter Ansatz :
=links(A3;länge(A3))
bei mir kommt dann #Name?
Wahrscheinlich, weil es nicht den Feldnamen: "E-Mail" zuordnen kann oder weil es schreibgeschützt ist =Java?
Vielleicht sollte ich mal das Sheeet mit einfügen -
Hat jemand noch ne Idee oder bin ich einfach nur zu blööd
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 09:35
von polyluchs
Jetzt ergibt die funktion:
=LINKS(A2;LÄNGE(A2))
einfach nicht den wirklichen Inhalt von mailto: ...@.... sondern nur den reinen Text von Feldname "E-Mail" mit der Ausgabe "Email" wobei hier eigentlich mailto: ....@.... stehen sollte.
In OO wird ganz einfach das Makro eingefügt unter Extras - Makro - Makro verwalten - dem Dokument zugefügt:
REM ***** BASIC *****
Sub Main
End Sub
Function GetAddress(HyperlinkCell As Range)
GetAddress = Replace _
(HyperlinkCell.Hyperlinks(1).Address, "mailto:", "")
End Function
Habe ich noch den Makro - Assistenten geöffnet so wird mir die "Function" angezeigt als Basic Syntaxfehler, wenn ich den Basic Button drücke.
Hat jemand eine Ahnung?
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 10:25
von komma4
polyluchs hat geschrieben:Vielleicht sollte ich mal das Sheeet mit einfügen -
Danke für die Beispieldaten, obwohl... da bekomme ich schon wieder die Krise!
CALC ist eine Tabellenkalkulation
Wenn man diese schon als Adressanwendung missbraucht, dann sollte man wenigstens auf die
Trennung der Daten* achten, sprich:
für NAME eine Spalte, für STRASSE, PLZ, ORT, ORTSTEIL, usw. jeweils ebenfalls eine Spalte.
Ebenso hast Du Spalte D und E zusammengefasst (warum?) und dort bis zu vier Hyperlinks abgelegt!?
Trenne Deine Daten auf, pro Spalte einen Hyperlink - dann klappt's auch mit der Formel!
* mit CALC-Formeln kann man sich aus den getrennten Rohdaten ggfs. benötigte Anzeigenformate (
Müller-Lüdenscheid in Düsseldorf) basteln.
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 18:01
von lorbass
Mal abgesehen von Winfrieds absolut zutreffender Kritik zu der geradezu monströsen Missgeburt eines Datenbankdesigns habe ich noch eine Frage. In deiner Datei
Kontaktliste.ods finde ich das Makro
GetAddress() nicht. Ist darin oberhalb der
Function der VBA-Support "eingeschaltet"?
Allerdings wird dies sicher obsolet, wenn du die "Datenbank" einem gründlichen Redesign unterziehst. Ich kann Winfrieds Ratschlag nur bekräftigen.
Gruß
lorbass
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Do, 15.09.2011 22:52
von polyluchs
Lach = monströse Missgeburt - Na das find ich ja toll ... wenn Ihr mal noch andere kostenfreie Datenbanksoftware kennt worin das einfügen von Adressen / Hyperlinks einfacher ist als OO Calc, dann freue ich mich und bin sehr dankbar.
Na das getaddress Makro war wohl in einem anderen Sheet dabei.
Außerdem hoffe ich, das Oracle / OOO immer weiter versuchen werden, die fliegende Wollmilchsau zu entwickeln, damit Wichtiges schnell umgesetzt werden können.
Die Option VBASupport 1 oberhalb einzufügen hat bis zur vorletzten Zeile weitergeholfen, jetzt meckert er ab der Klammer (Hyperlink). Unter Extras / Option/ Laden Speichern / VBA Eigenschaften ist alles angekreuzelt.
Leider kommt bei mir immer noch nicht die direkte Email mit dem obigen Funktions-Befehl, sondern nur der Feldnamen: "E-Mail", anstatt ....@.....net . Also, was mach ich bloß falsch?
Besten Dank!
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Fr, 16.09.2011 09:04
von MWi
Hallo und dringende Bitte an polyluchs,
sollten die (Adress-)Daten, die in Deiner hier hochgeladenen Beispieldatei enthalten sind, zu real existierenden Personen/Institutionen gehören, rege ich an, die Beispieldatei unbedingt durch eine anonymisierte! zu ersetzen. (Datenschutz!)
Freundlicher Gruß
Michael
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Fr, 23.09.2011 21:24
von komma4
Polylux hat geschrieben:Das hier aufgezeigte Problem ist bis heut nicht gelöst!
Bringe eine ordentliche Struktur in Deine Daten - und Du hast kein Problem, dann geht alles mit Formeln.
Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen
Verfasst: Mo, 12.03.2012 15:13
von Frieder D.
Hallo,
hoffentlich bist du noch an einer Lösung interessiert.
Wie man die URLs aus den Textfeldern einer Zelle bekommt steht in
OpenOffice.org Macros Explained von Andrew Pitonyak, Kapittel 15.11. URLs in Calc suchen .
Ich habe dir mahl ein Makro geschrieben, mit dem du deine Tabelle in eine ordentliche Form bringst, und das die Links ausließt.
Ich denke nicht, dass das mit VBA-Code funktioniert.
Hier der Code:
Code: Alles auswählen
REM ***** BASIC *****
Public oDoc as Object
Public ofromSheet as object
Public oToSheet as object
'-------------------------------------------------------------------------------
'SchreibtAddresse und Links der selektierte Zeile in Tabelle2
Sub writeSelection
Dim nRow As Long
Dim oSelection
oDoc=ThisComponent
ofromSheet= oDoc.Sheets.getByName("Tabelle1")
oToSheet= oDoc.Sheets.getByName("Tabelle2")
oSelection= odoc.CurrentSelection
if oSelection.supportsService( "com.sun.star.sheet.SheetCellRange") then
nRow= oSelection.RangeAddress.StartRow
if oSelection.RangeAddress.Sheet= _
ofromSheet.getCellByPosition(0,0).RangeAddress.Sheet then
WriteNewAdress(nRow)
WriteNewHyperLink(nRow)
else
MsgBox "Die auswahl befindet sich auf der falschen Tabelle",16,"Fehler"
end if
else
MsgBox "Es ist keine Zelle ausgewählt.",16,"Fehler"
end if
End Sub
'----------------------------------------------------------
'Schreibt Addresse und Linksaller Zeilen in Tabelle2
Sub writeAll
Dim nRow As Long
oDoc=ThisComponent
ofromSheet= oDoc.Sheets.getByName("Tabelle1")
oToSheet= oDoc.Sheets.getByName("Tabelle2")
For nRow=0 To GetLastUsedRow(ofromSheet)
WriteNewAdress(nRow)
WriteNewHyperLink (nRow)
Next
End Sub
'------------------------------------------------------------------------------------
'Parst die Addresse und schreibt sie in Tabelle2
Sub WriteNewAdress(nRow as Long)
Dim aAdress()
Dim i%
Dim sAdress$, sNR$, sStreet$, sPLZ$, sStadt$
'Name eintragen
sName=ofromSheet.getCellByPosition( 0, nRow).String
oToSheet.getCellByPosition( 0, nRow+1).String=sName
sAdress=ofromSheet.getCellByPosition( 1, nRow).String
'Addresse separieren und eintragen
aAdress()=Split( sAdress,chr(10))
If aAdress(0)<>"" Then
i=1
Do while IsNumeric (Right (aAdress(0),i))
sNR= Right (aAdress(0),i)
sStreet=Left(aAdress(0),len(aAdress(0))-i)
i=i+1
Loop
'Straße
oToSheet.getCellByPosition( 1, nRow+1).String=sStreet
'Haus NR
sNR=Trim(sNR)
oToSheet.getCellByPosition( 2, nRow+1).String= sNR
End if
If Ubound(aAdress())>=1 Then
'PLZ
sPLZ=Left(aAdress(1),5)
oToSheet.getCellByPosition( 3, nRow+1).String= sPLZ
'Stadt
sStadt= Right(aAdress(1),Len(aAdress(1))-5)
oToSheet.getCellByPosition( 4, nRow+1).String= sStadt
end if
If Ubound (aAdress())>=2 Then
'Sdadteil
oToSheet.getCellByPosition(5, nRow+1).String= aAdress(2)
end if
end sub
'----------------------------------------------------------------------------------------------
'hhllt dieLinks und schreibt sie in Tabelle2
Sub WriteNewHyperLink(nRow as Long)
Dim oCell as Object, oText as Object, oParEnum as Object, oParElement as Object
Dim oEnum as Object, oElement as Object
dim i%
oCell = ofromSheet.getCellByPosition( 3, nRow)
oParEnum = oCell.getText().createEnumeration()
'Zugriff auf alle Textfelder in der Zelle
Do While oParEnum.hasMoreElements()
oParElement = oParEnum.nextElement()
oEnum = oParElement.createEnumeration()
i=0
'schleife über alle Textfelder in der Zelle
'und holend der URL
Do While oEnum.hasMoreElements()
oElement = oEnum.nextElement()
If oElement.TextPortionType = "TextField" Then
i=i+1
If oElement.TextField.supportsService("com.sun.star.text.TextField.URL") Then
'Schreiben der URL
oToSheet.getCellByPosition(5+i, nRow+1).String= oElement.TextField.URL
End If
End If
Loop
Loop
End Sub
'----------------------------------------------------------------------------------------------
REM Returns the number of the last Row of a continuous data range in a sheet.
Function GetLastUsedRow(oSheet as Object) As Integer
Dim oCell as Object
Dim oCursor as Object
Dim aAddress
oCell = oSheet.getCellByPosition(0, 0)
oCursor = oSheet.createCursorByRange(oCell)
oCursor.gotoEndOfUsedArea(True)
aAddress = oCursor.RangeAddress
GetLastUsedRow = aAddress.EndRow
End Function
Und hier das Dokument mit eingebauten Makros:
Gruß Frieder