En el siguiente ejemplo puedes ver como se maneja excel desde VFP. Espero te sirva, ahí va: *--------------------------------- SET SAFETY OFF *--- Crea tabla de ventas DO CreaTabla *--- Genera tabla dinámica DO GenTabla CLOSE TABLES ALL RETURN *--------------------------------- * PROCEDURE CreaTabla *--------------------------------- * Crea y llena la tabla de ejemplo * y la copia como archivo tipo .XLS *--------------------------------- PROCEDURE CreaTabla LOCAL lnVend, lnZona, lnMarca, lnmodelo, lnAnio, lnCant LOCAL laZona(3), laMarca(3), laModelo(3,4) laZona(1) = "SUR" laZona(2) = "NORTE" laZona(3) = "CENTRO" *---- Cargo las marcas y modelos laMarca(1) = "FORD" laMarca(2) = "FIAT" laMarca(3) = "VOLKSWAGEN" laModelo (1,1) = "MONDEO" laModelo (1,2) = "FIESTA" laModelo (1,3) = "ESCORT" laModelo (1,4) = "FOCUS" laModelo (2,1) = "MAREA" laModelo (2,2) = "BRAVO" laModelo (2,3) = "SIENA" laModelo (2,4) = "PALIO" laModelo (3,1) = "GOL" laModelo (3,2) = "GOLF" laModelo (3,3) = "PASSAT" laModelo (3,4) = "SAVEIRO" *--- Inicializo la funcion RAND() lnCant = RAND(-1) *---- Creo tabla CREATE TABLE Ventas (Vendedor C(2), Zona C(10), ; Marca C(10), Modelo C(10), Anio N(4), Cantidad N(4)) *--- Cargo datos ALEATORIOS FOR lnVend = 1 TO 3 FOR lnZona = 1 TO 3 FOR lnMarca = 1 TO 3 FOR lnmodelo = 1 TO 4 FOR lnAnio = 1998 TO 2000 lnCant = INT(RAND()*9) IF lnCant > 0 INSERT INTO Ventas ; (Vendedor, Zona, Marca, Modelo, Anio, Cantidad) ; VALUES ; (TRANSFORM(lnVend, "@L 99"), laZona(lnZona), ; laMarca(lnMarca), laModelo(lnMarca,lnModelo), ; LnAnio, lnCant) ENDIF ENDFOR ENDFOR ENDFOR ENDFOR Endfor *--- Guardo como tipo XL5 SELECT Ventas COPY TO Ventas TYPE XL5 RETURN ENDPROC *--------------------------------- * PROCEDURE GenTabla *--------------------------------- * Crea una tabla dinámica en Excel *--------------------------------- PROCEDURE GenTabla LOCAL laPagina(2), laFilas(2), laColumnas(1), lnI, ; lnReg, lcRango, lcArchivo, loExcel lnReg = RECCOUNT() lcRango="A1:F"+ALLTRIM(STR(lnReg+1)) && Rango de celdas de la planilla lcArchivo= SYS(5) + CURDIR() + "Ventas.xls" *--- Arrays con los datos de la tabla dinámica laPagina(1)="Vendedor" laPagina(2)="Zona" laFilas(1)="Marca" laFilas(2)="Modelo" laColumnas="Anio" loExcel=CREATEOBJECT("Excel.application") WITH loExcel.APPLICATION .VISIBLE = .F. && oculto el trabajo en la aplicacion Excel .workbooks.OPEN(lcArchivo) *--- Formato datos numéricos .Cells.SELECT .SELECTION.COLUMNS.AutoFit .RANGE("A1").SELECT *--- Tabla dinámica *--- Llamo al generador de Tablas Dinámicas . ActiveSheet. PivotTableWizard(1, lcRango,"","MiTablaDinamica") *--- Armo la Tabla .ActiveSheet.PivotTables("MiTablaDinamica").AddFields(@laFilas, @laColumnas, @laPagina) . ActiveSheet. PivotTables("MiTablaDinamica").PivotFields("Cantidad& quot;).ORIENTATION = 4 *--- Selecciono toda la hoja y ajusto columnas .Cells.SELECT .SELECTION.COLUMNS.AutoFit .Sheets("Hoja1").NAME = "Tabla dinámica" *--- Selecciono la celda donde queda el cursor .RANGE("A3").SELECT *--- Grabo planilla y cierro .VISIBLE = .F. .ActiveWorkbook.SAVE .workbooks.CLOSE ENDWITH RELÉ loExcel RETURN ENDPROC *---------------------------------