A friend asked me whether Excel could reach out to SQL Server data and grab data. I haven’t checked out this facility for a long time, so whipped up Excel 2013 and gave it a whirl.
Firstly, in Excel 2007, 2010 and 2013 the external data commands have been consolidated into the External Data tab of the Excel Ribbon. That’s good and easy to find.
Secondly, Microsoft Query is still alive and well for ODBC and local database connections. Except that no cosmetic work has been done on it – it looks really ugly on Windows 8 and the File Open / Save dialogs are even older, circa Windows 3.1 Despite this, it is still the nexus that connects Excel to these data sources.
Thirdly, with the new generation Excels, data grabbed from databases is dumped into Excel Tables – which is good – one of the excellent features in new generation Excel versions is the Excel Table.
Excel External Data Sources
As you can see, Excel continues to expand it’s ability to retrieve data from many kinds of data sources.
For this discussion, we are interested in classic tabular data sources – Microsoft Access database, SQL Server database, ODBC databases.
Notice Microsoft Query is an option. This will launch Microsoft Query.
Workbook Connection and data in Excel cells
After you have defined your request, you will be able to save a separate .dqry file or embed the request directly into the current Excel file. Your Excel file will have a Workbook Connection
Defining your Microsoft Query request
Microsoft Query has a simple user interface to
- choose which database table or view/query
- choose which columns you want
- state your criteria to filter the data (parameterised stored procedures are not supported)
- choose the sort order
You can use wizard driven screens or non modal user interface – the user interface crudely looks like Microsoft Access’s Query Design screen
Microsoft Query Design Screen
More Advanced Data Retrieval
If you need to perform more complex data retrievals and coupling with parameter driven server-side Stored Procedures / Queries, you can use the VBA language in combination with Data Access Objects or ActiveX Data Objects to establish the request programmatically and form a Recordset which can then place the data into Excel cells. See KB 185125