Ejemplo funcional probado con excel 2013, base de datos sql server 2012 express
como se usa:
STATIC FUNCTION TablaDinamica()
LOCAL Conn, cSql
Conn := "OLEDB;Provider=SQLOLEDB;Data Source=SERVER\SQLEXPRESS;Initial Catalog=VIKING_SYSTEM;User Id='user';Password='admin';"
cSql := "SELECT * FROM dbo.PRUEBA"
// "prueba" es una vista construida específicamente con lo que quiero mostrar en la tabla dinámica con campos calculados y con nombres entendibles para el usuario de excel
ExcelDinamicConstructorSql( Conn, cSql )
return nil
funcion donde se construye:
FUNCTION ExcelDinamicConstructorSql( cConnStr, cQuery )
LOCAL oExcel, oWorkbook, oPivotCache, xWin, oTargetRange, oTargetSheet, oPivot
oExcel := CreateObject( "excel.application" )
oExcel:DisplayAlerts := .F.
oExcel:ScreenUpdating := .F.
oWorkbook := oExcel:Workbooks:Add()
oTargetSheet := oWorkbook:Get( 'ActiveSheet' )
oTargetRange := oTargetSheet:range("A4")
oTargetSheet:Cells:Font:Name := "Roboto Cn"
oTargetSheet:Cells:Font:Size := 12
oTargetSheet:Name := "Tabla Dinámica"
oPivotCache := oWorkbook:PivotCaches:Add(2)
oPivotCache:Connection := cConnStr
oPivotCache:Commandtext := cQuery
oPivotCache:CreatePivotTable( oTargetRange, "Tabla Dinámica Pruebas" )
oTargetSheet:Cells( 4, 1 ):Select()
xWin := oExcel:ActiveWindow
oExcel:Visible := .T.
oExcel:DisplayAlerts := .T.
oExcel:ScreenUpdating := .T.
ShowWindow( oExcel:hWnd, 3 )
BringWindowToTop( oExcel:hWnd )
RETURN NIL
Resultado:
Acepto sugerencias de mis colegas, y espero de que le sea de utilidad.
Saludos!