(C) 2009 - 2021 by Mourad Louha · Alle Rechte vorbehalten

Webdienst in Excel 2013 per Formel abfragen und auswerten

Die Excel 2013 Preview stellt die neue Kategorie „Web“ zur Verfügung, in welcher die drei Formeln ENCODEURL(), FILTERXML() und WEBSERVICE() enthalten sind. In meinem Artikel „Neue Formeln in Excel 2013 und Einsatzmöglichkeiten in der Praxis“ hatte ich kurz die Funktionalität dieser drei Formeln beschrieben, allerdings nur im Rahmen einer Gesamtübersicht zu allen neuen Formeln in Excel 2013.

Nachtrag und Hinweis vom 07.03.2013: dieser Artikel wurde zu einem Zeitpunkt geschrieben, als sich Excel 2013 noch in der Preview Version befand. Da zum damaligen Zeitpunkt Excel jedoch nur in Englisch zur Verfügung stand, sind die Screenshots und Funktionsnamen in Englisch. In der finalen Version von Excel 2013 hat sich im Verhältnis zur Preview jedoch nicht viel geändert so dass die Informationen in diesem Artikel ebenfalls für die finale Version gelten. Die deutschen Funktionsnamen zu ENCODEURL, WEBSERVICE und FILTERXML sind respektive URLCODIEREN, WEBDIENST und XMLFILTERN.

ENCODEURL() zur Kodierung von URLs

Innerhalb einer URL sind nur die Zeichen A-Z und a-z, die Ziffern 0-9 sowie einige Sonderzeichen zulässig. Einige der Sonderzeichen sind zudem als reserviert gekennzeichnet; d.h. haben eine besondere Bedeutung in der URL (wie der Schrägstrich) oder werden als Erkennungszeichen zur Verarbeitung von Parametern verwendet (wie das Gleichheitszeichen oder das kaufmännische Und). Würden nun beispielsweise innerhalb einer URL reservierte Zeichen an nicht dafür vorgesehen Stellen verwendet werden, entstünden Fehler bei der Verarbeitung durch den Server bzw. Browser, da dieser nicht von alleine die Bedeutung erkenne könnte.

Eine Kodierung der URL ermöglicht es, diese Fehler zu vermeiden, indem die Zeichen durch eine hexadezimale Darstellung ersetzt werden. Somit können bei reservierten Zeichen die Bedeutung aufgehoben werden oder Zeichen verwendet werden, die nicht Bestandteil der zulässigen Zeichen sind, wie ein Leerzeichen oder Umlaute. Damit der Browser aber wiederum die kodierten Zeichen erkennen kann, wird diesen byteweise ein Prozentzeichen vorangestellt. Ein Leerzeichen, ein Ü und das Euro-Zeichen werden somit respektive in %20, %C3%9C und %E2%82%AC umgewandelt.

Excel Funktion in der Kategorie Web

Folgend ein Beispiel für eine fiktive URL, die als Parameter eine Kategorie und einen Link zu einem Twitter Profil übergibt:

http://www.website.de/index.php?Kategorie=Übersicht&Profil=twitter.com/maninweb

Eine minimalste erforderliche Kodierung wäre eine solche, die das Ü und den Schrägstrich in der Parameterangabe ersetzt:

http://www.website.de/index.php?Name=%C3%9Cbersicht&Profil=twitter.com%2Fmaninweb

Zulässig ist es aber auch, alle Zeichen zu kodieren, die nicht einem Buchstaben, einer Ziffer oder den Zeichen Bindestrich, Punkt und Unterstrich entsprechen. So kodiert die Formel ENCODEURL() die Beispieladresse in:

http%3A%2F%2Fwww.website.de%2Findex.php%3FKategorie%3D%C3%9Cbersicht%26
Profil%3Dtwitter.com%2Fmaninweb

WEBSERVICE() zum Abrufen eines Webdienstes

Die Formel WEBSERVICE() oder WEBDIENST() ermöglicht, einen internetbasierten Dienst per Formel abzurufen, wie beispielsweise einen RSS-Feed. Als erstes fiel mit spontan der Feed zum Office 365 & Office 2013 Forum ein, um die letzten Beiträge in Excel angezeigt zu bekommen. Weitere Anwendungsgebiete könnten aber auch der Abruf von Wetterdaten, Börsendaten oder firmeninternen XML Daten sein.

Während meiner Tests stellte ich zunächst fest, dass der Feed vom Forum nicht eingelesen wurde bzw. die Formel mit den Fehlerwert #VALUE! anzeigte. In der Annahme, dass der Feed nicht valide ist, habe ich diesen via einem Online Feed Validator überprüft, konnte jedoch keine Fehler feststellen. Als nächstes hatte ich die Idee, es mit einem Feed von einem Unterforum zu probieren und, siehe da, dieser funktionierte. Erst später, nach mehreren Aktualisierungen der Berechnungen in der Mappe, funktionierte auch der Feed zum Hauptforum einwandfrei.

Insofern tippe ich darauf, dass die Formel sich eine minimale Zeit zum Abruf der Daten gönnt (z.B. um die Berechnungszeit niedrig zu halten) und, wenn der Server in der Zeit nicht reagiert hat, den Abruf abbricht und den Fehlerwert anzeigt.

Excel Funktion in der Kategorie Web

Wenn der Abruf der URL mit der Funktion ENCODEURL() kombiniert und die gesamte URL kodiert wird, liefert WEBSERVICE() bzw. WEBDIENST() einen Fehler. Das dürfte meines Erachtens daran liegen, dass die Funktion WEBSERVICE() die kodiere Server-URL nicht interpretieren kann. Denn kodiert man beispielsweise nur die Parameter der URL, funktioniert der Abruf wieder einwandfrei.

Excel Funktion in der Kategorie Web

Laut Microsoft Online Hilfe sind übrigens auch einige Einschränkungen bzw. Rahmenbedingungen bei der Verwendung von WEBSERVICE() zu beachten. So muss der abgerufene Inhalt valide sein und die Anzahl der Zeichen der empfangenen Daten darf 32.767 Zeichen nicht überschreiten. Zudem sind in der URL selbst maximal 2048 Zeichen möglich.

Die Funktion unterstützt zudem nicht die Protokolle FTP und FILE. Letzteres bedeutet, dass der Abruf nicht per Direktzugriff auf eine lokale Datei erfolgen kann, sondern zu mindestens ein lokaler Server notwendig ist. Ausserdem ist es meines Wissens nicht möglich, auf Bereiche einer Website zuzugreifen, die eine Authentifizierung benötigen. Bei meinen Tests funktionierte die Funktion WEBSERVICE() nicht in der Excel WebApp, womit dann dessen Verwendung dort nicht möglich ist.

FILTERXML() zum Extrahieren von Inhalten des Webdienstes

Damit die per WEBSERVICE() abgerufenen Inhalte auch ausgewertet bzw. extrahiert werden können, steht die Formel FILTERXML(xml, xpath) zur Verfügung. Die Formel erfordert die Angabe von zwei Parametern. Der erste Parameter „xml“ ist für die XML Datenquelle vorgesehen, also z.B. das Ergebnis der Formel WEBSERVICE(). Der zweite Parameter „xpath“ erwartet die Angabe eines Pfades zum gesuchten Inhaltselement. Dieser Pfad richtet sich nach dem XPath (XML Path Language) Standard; eine Abfragesprache, um Elemente eines XML Dokumentes adressieren zu können.

XML Dokumente folgen festen Regeln, was deren Aufbau und Struktur betrifft. So darf es beispielsweise nur ein Wurzelelement geben und Inhaltselemente sind mit einem Anfangs- und Endtag auszuzeichnen. Unterhalb des Wurzelelementes können Inhaltselemente auch verschachtelt werden, womit letztlich eine Baumstruktur im XML Dokument entsteht.

XPath nutzt nun diese hierarchisch aufgebaute Struktur, um auf einzelne Elemente zugreifen zu können. Ähnlich wie im Windows Explorer ein bestimmter Ordner per Eingabe des durch Schrägstriche getrennten Pfades gesucht werden kann, wird in XPath ebenfalls per Schrägstrich getrennt auf einzelne Elemente oder Elementgruppen zugegriffen. Zudem stellt XPath spezielle Anweisungen bereit, um mehrfach vorkommende Inhaltselemente zu filtern oder ein bestimmtes Element zu suchen.

Ein vereinfachtes Beispiel hierzu: eine XML Datei würde eine Liste von Mitarbeitern beinhalten, die durch das Inhaltselement „Mitarbeiter“ gekennzeichnet würden. Zudem würde die XML Datei ein einmalig vorkommendes Inhaltselement „Bereich“ enthalten, wo der Bereich der gelisteten Mitarbeiter genannt würde.

Um per XPath auf den Inhalt zur Bereichsangabe zugreifen zu können, würde „//bereich“ zum Erfolg führen. Der Doppelschrägstrich weist die Abfrage an, das Inhaltselement „Bereich“ zu suchen, egal wo es sich befindet. Um auf die Daten des an zweiter Stelle gelisteten Mitarbeiters zugreifen zu können würde die Suchfolge „//mitarbeiter[2]“ verwendet werden. Würden innerhalb der Angabe eines Mitarbeiters weitere Inhaltselemente enthalten sein, wie „Name“ oder „Vorname“, wären die XPath Zugriffe respektive „//mitarbeiter[2]/name“ und „//mitarbeiter[2]/vorname“

Excel Funktion in der Kategorie Web

Obere Abbildung zeigt einen Teil des Feeds zum Office 365 & Office 2013 Forum, wenn dieser als Quelltext in einem Browser abgerufen wird. Zu sehen ist das Wurzelelement „rss“, der den Beginn des Feeds markiert. In den folgenden Ebenen, die eingerückt dargestellt werden, folgen weitere Elemente. So ist der Forumstitel durch <title> und </title> umschlossen. Und der Feed enthält sich wiederholende Elemente wie <item>, die letztendlich die aktuellsten Beiträge im Forum darstellen.

Excel Funktion in der Kategorie Web

Um den Titel „Office 365& Office 2013 Forum“ des Forums via FILTERXML() zu extrahieren, kann die XPath Angabe „//title“ verwendet werden. Die Überschrift zum ersten Beitrag, der im Feed aufgeführt wird, kann durch die Angabe von „//item[1]/title“ extrahiert werden. Und, der Link zum letzten Beitrag im Feed lässt sich über „//item[last()]/link“ extrahieren.

Fazit

Durch die Kombination der drei Funktionen lassen sich Inhalte internetbasierter Dienste relativ einfach abfragen und auswerten. Speziell die Funktion „FILTERXML“ ermöglicht das komfortable Filtern der von WEBSERVICE() zurückgegebenen Daten und nutzt hierzu XPath, eine mächtige Abfragesprache für XML Dateien, die allerdings auch etwas Einarbeitung verlangt.

In meinen Tests lieferte die Funktion zum Abfragen eines Webdienstes häufig einen Fehlerwert; inwieweit dies nun durch die Preview oder meiner Testumgebung bedingt ist, kann ich nicht beurteilen. Aber ich hoffe und gehe eigentlich auch davon aus, dass es sich bis zur finalen Version ändert.

Die Anwendungsgebiete für diese Funktionen sind vielfältig, von spielerischen Abfragen, wie mein Beispiel zum Forumsfeed (der er möglich machen würde, einen Excel Feed Reader zu erstellen) bis hin zu ernsteren Abfragen von Unternehmensdaten per Webservice.

 
Comments

No comments yet.