Alter berechnen…

Um in Excel das Alter zu berechnen, findet man verschiedene Ansätze.

Am sinnvollsten erscheint mir die Lösung mit der (mehr oder minder) undokumentierten Funktion DATEDIF. Für das Alter in Jahren genügt die Formel =DATEDIF(A1;HEUTE();"Y"), wenn in A1 das Geburtsdatum steht.

Die DATEDIF-Funktion wurde wohl aus Kompatibilitätsgründen zur Tabellenkalkulation Lotus 1-2-3 in Excel übernommen, und ist erst seit Excel 2000 in der Hilfe aufgeführt. Der Funktionsassistent hingegen kennt die Funktion nach wie vor nicht. Hier ist eine Dokumentation online.

Nutzung des SOAP-Servers mit Office

Ich wollte noch auf die Nutzung des SOAP-Servers mit Word (2000) hinaus.

Nutzung mit dem SOAP-Toolkit von Microsoft

Diese älteren Office-Versionen haben im Gegensatz zur Methode mit .net keinen direkten Zugriff auf die SOAP-Methoden. Dies lässt sich aber mit Microsofts SOAP-Toolkit nachrüsten. Microsoft schreibt zwar, dass das Toolkit durch .net veraltet sei, bietet aber sowohl das komplette SDK wie auch das verteilbare Paket zum Download an.

Damit wird die Nutzung des Webservices ziemlich einfach. Unter Extras-Verweise muß ein Verweis zum Microsoft SOAP Toolkit hinzugefügt werden.

In der Prozedur benötigen wir zunächst ein entsprechendes Objekt:

    Dim soap As SoapClient
    Set soap = New SoapClient

Mit diesem Objekt wird die WSDL-Datei abgeholt. Im Anschluss daran stehen die per Web-Service veröffentlichten Funktionen als Methoden des Objekts zur Verfügung. Für uns heißt das:

    With soap
        ' Hole die Funktionen aus der Beschreibungsdatei
        .mssoapinit "http://www.example.com/soapserver.php?wsdl."

        ' Und jetzt tu was...
        ergebnis = .suche("Suchbegriff")
    End With

Dabei scheint es wichtig zu sein, im nuSoap einen Namespace zu verwenden. Ohne Namespace-Definition erhalte ich einen VB-Fehler, mit keinen.

Nutzung von PocketSOAP

Eine weitere nette Bibliothek ist PocketSOAP von Simon Fell. Nachdem man auch hier unter ExtrasVerweise diese Bibliothek hinzugefügt hat, holt folgende Code die Suchergebnisse ab:

    Dim SOAP As New CoEnvelope
    Dim HTTP As New HTTPTransport
    Dim Result() As String

    With SOAP
        .MethodName = "suche"
        .Parameters.Create "sucheRequest", "Suchbegriff"
    End With

    HTTP.Send "http://www.example.com/soapserver.php", SOAP.Serialize

    ' parse the SOAP message
    SOAP.Parse HTTP

    ' extract the return value
    Result = SOAP.Parameters.Item(0).Value

Noch einfacher geht des mit dem „SOAP Proxy“-Object: Hier genügen folgende Zeilen:

    Dim SOAPProxy As PSPROXYLib.CoSoapFactory
    Dim SOAP As Object
    Dim Result() As String

    Set SOAPProxy = New PSPROXYLib.CoSoapFactory
    Set SOAP = SOAPProxy.CreateProxy("http://www.example.com/soapserver.php")
    Result = SOAP.suche(sucheRequest:="Suchbegriff")

Zu PocketSOAP gibt es derüber hinaus einen WSDL-Proxygenerator, der aus einer WSDL-Datei entsprechende Klassen für VB generiert. Damit stehen die über SOAP exportierten Funktionen als Methoden dieser Objekte zur Verfügung, was das Arbeiten mit diesen natürlich sehr angenehm macht.