Consuming OData with Office VBA - Part III (Excel)
This is part three of a series - you should read part I and part II to have the code snippets handy and follow along.
Today we won't be doing anything special with OData itself, instead we'll see how the snippets work across different Microsoft Office products. Just start up Excel, paste in the OData import code, and add the following snippet.
Public Sub Sample3_Excel()
Dim objDocument As MSXML2.DOMDocument60
Dim objEntries As Collection
Dim strUrl As String
' Read the document with data.
strUrl = "https://ogdi.cloudapp.net/v1/dc/BankLocations/"
Set objDocument = ODataReadUrl(strUrl)
' Create a collection of dictionaries with name/value pairs.
Set objEntries = ODataReadFeed(objDocument.DocumentElement)
' Prepare for updating and clear the document.
Application.ScreenUpdating = False
ActiveSheet.Cells.Clear
ActiveSheet.Cells.ClearFormats
' Build a table for all imported data.
Dim objEntry As Scripting.Dictionary
Dim lngRow As Long
Dim rng As Range
lngRow = 1
Set rng = ActiveSheet.Cells
rng(lngRow, 1) = "Bank Name"
rng(lngRow, 2) = "Address"
lngRow = lngRow + 1
For Each objEntry In objEntries
rng(lngRow, 1) = objEntry("name")
rng(lngRow, 2) = objEntry("address")
lngRow = lngRow + 1
Next
ActiveSheet.Columns("A:B").AutoFit
' Make the headers bold
rng(1, 1).Font.Bold = True
rng(1, 2).Font.Bold = True
' Now create a PivotTable and count how many addresses
' each bank has (Excel 2007 syntax).
Dim cache As PivotCache
Dim table As PivotTable
Dim source As Range
Set source = ActiveSheet.Range(rng(1, 1), rng(lngRow - 1, 2))
Set cache = ActiveWorkbook.PivotCaches.Create( _
xlDatabase, source, xlPivotTableVersion14)
Set table = cache.CreatePivotTable( _
rng(2, 3), "BankCountTable", True, xlPivotTableVersion14)
table.PivotFields("Bank Name").Orientation = xlRowField
table.PivotFields("Bank Name").Position = 1
table.AddDataField table.PivotFields("Address"), "Address Count", xlCount
Application.ScreenUpdating = True
End Sub
This code will import the dataset with bank locations from the District of Columbia, available through the OGDI site. It puts them into the current spreadsheet, then creates a PivotCache and PivotTable over that data, showing you how many locations are on file for each bank. The code to create the pivot tables should work on Excel 2007 up; the syntax to create this on a previous version should be a bit different, but you can try commenting that section out. Or you can record a macro while doing it manually and let Excel tell you how to write the code.
Enjoy!