Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

von Frieder D. » Mo, 12.03.2012 15:13

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:
Kontaktliste2.ods
(19.44 KiB) 201-mal heruntergeladen
Gruß Frieder

Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

von komma4 » Fr, 23.09.2011 21:24

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

von MWi » Fr, 16.09.2011 09:04

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

von polyluchs » Do, 15.09.2011 22:52

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

von lorbass » Do, 15.09.2011 18:01

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"?

Code: Alles auswählen

Option VBASupport 1
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

von komma4 » Do, 15.09.2011 10:25

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

von polyluchs » Do, 15.09.2011 09:35

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

von polyluchs » Do, 15.09.2011 09:18

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
Dateianhänge
Kontaktliste.ods
(18.95 KiB) 196-mal heruntergeladen

Re: Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

von komma4 » Do, 15.09.2011 05:32

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

Code: Alles auswählen

=LINKS(A2;LÄNGE(A2))
in B2 den Inhalt.

Reicht das aus?

Re: Makro Umwandlung Hyperlinks Inhalt Feldtyps auslesen

von lorbass » Do, 15.09.2011 01:38

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

Calc:Umwandlung Hyperlinks Inhalt Feldtyp auslesen

von polyluchs » Mi, 14.09.2011 21:37

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

Nach oben