Using the WebService() function in Excel 2013
One thing that piqued my interest when looking over the new functions in Excel 2013 were the new functions available that allow you to retrieve data from a web service directly into worksheet: EncodeURL(), Webservice and FilterXML(). Here’s a brief demo of how to use them.
First, find a web service that returns XML and doesn’t require any authentication (I say that because I haven’t worked out how to pass usernames and passwords with these functions yet – I hope it’s possible, and if/when I work out how to do it I’ll blog again). The example I’m going to use is the BBC weather web service, which allows you to subscribe to an RSS feed containing the weather forecast for a particular postcode (similar to a zip code for my US readers). Here’s an example URL which returns the forecast for my home, which has the postcode HP6 6HF:
http://open.live.bbc.co.uk/weather/feeds/en/hp66hf/3dayforecast.rss
Let’s now build an Excel 2013 spreadsheet that allows you to enter a postcode and then displays the weather forecast for it using this web service. First of all, I’ll specify cell E2 as the place to enter the postcode:
Next, in cell D4, I need to construct the URL for the web service and retrieve the data like so:
=WEBSERVICE(“http://open.live.bbc.co.uk/weather/feeds/en/” & ENCODEURL(E2) & “/3dayforecast.rss”)
Here, I’ve used the EncodeURL() function to URL encode the text entered in cell E2, and then dynamically generated the URL and passed it to the Webservice() function which simply retrieves the response from the web service. If it’s successful you should see the XML returned displayed in the cell:
If it’s not successful, you get a #Value error:
Finally, you can get values from the response and display them in cells by using the FilterXML() function, which allows you to query the response using XPath. Here are some examples of how you can use FilterXML():
=FILTERXML(D4,”//rss/channel/title”)
=FILTERXML(D4,”//rss/channel/item[1]/title”)
=FILTERXML(D4,”//rss/channel/item[1]/description”)
And here are what these three formulae return when placed in cells D6, D8 and D9:
UPDATE: I have had official confirmation from Microsoft that the WebService() function will only work with services that do not require any authentication, which is a shame – I was hoping to use it with things like the Bing Search API and the Microsoft Translator API. Hohum.

Does it work in SkyDrive?
Jamiet
July 31, 2012 at 3:49 pm
No, it doesn’t… Not in the Office Web App either.
Chris Webb
July 31, 2012 at 4:08 pm
You can imagine my reaction.
Jamiet
July 31, 2012 at 4:32 pm
However, it does work! No other published example I had seen so far did.
David Hager
July 31, 2012 at 11:51 pm
You don’t know how much trial and error was involved in getting it to work, though…!
Chris Webb
August 1, 2012 at 8:14 am
There was a Microsoft web services tool kit add-in for XL2003 that used VBA classes. After pointing it at the WSDL it generated all the methods. It was quite neat and after some effort I consumed data from Amazon Web Services. Interesting that the 2013 version does this without VBA code.
Philip Taylor
August 1, 2012 at 4:21 pm
[...] saw this blog post from Chris Webb with an example of the new WEBSERVICE function. As it happened I was recently looking [...]
Excel 2013 Preview– Webservice Function and Flash Fill « The WorkerThread Blog
August 9, 2012 at 5:06 pm
[...] few weeks ago, when I was playing around with the new WebService() function in Excel 2013, I was disappointed to learn that it didn’t work with services that require [...]
Importing Azure Marketplace Data into Excel 2013 with Web Queries « Chris Webb's BI Blog
September 10, 2012 at 11:14 am
[...] summer I wrote a post about the new WebService() function in Excel 2013 and showed how it could be used to display data [...]
Bringing Location Information Into Excel 2013 With The WebService() Function | Chris Webb's BI Blog
February 26, 2013 at 9:08 pm