Connecting to PowerPivot with C#
Short answer:
- Yes
Long answer:
- Updated versions of either Excel or PP (maybe even Office service packs?) could break your code
- We were successful in connecting to the PP model using AMO (to add tables to the data source view, add dimensions, add measures, and refresh the model from external DBs). We found Tabular AMO library on codeplex (https://tabularamo2012.codeplex.com/) to be VERY helpful.
- We were successful in connecting to the PP model using ADO (but not ADOMD) to query the model (for instance, query the value of a measure).
References/Credits:
- https://gobansaor.wordpress.com
- http://sqlblog.com/blogs/default.aspx
- http://powerpivotgeek.com/2009/11/11/a-peek-inside-the-client-architecture/#comments
Details:
Like @gobansaor, we found that starting with a workbook which already had a connection to the PP cache was helpful (necessary?). Before connecting to the PP cache via AMO for instance, we make sure the connection is alive:
ThisWorkbook.Connections["PowerPivot Data"].Reconnect()
or
ThisWorkbook.Connections["PowerPivot Data"].Refresh()
The connection string template we used for AMO was:
Provider=MSOLAP;Data Source=$Embedded$;Locale Identifier=1033;Location={0};SQLQueryMode=DataKeys
and we filled that in withThisWorkbook.FullName
Following @gobansaor, we connected to the cube via ADO using:
ADODB.Recordset recordSet = new ADODB.Recordset();
recordSet.Open("SELECT [Measures].[Min of Field1] ON COLUMNS FROM [Model]", ThisWorkbook.Connections["PowerPivot Data"].OLEDBConnection.ADOConnection);
You can build a VSTO addin.
Here's a site that helps explain working with PowerPivot and VSTO.
http://blogs.msdn.com/b/analysisservices/archive/2011/08/04/how-to-build-a-vsto-based-powerpivot-workbook.aspx