Como puedo actualizar una vista de una tabla dinámica de excel?

05/07/2004 - 12:39 por José Luis | Informe spam
Hola a todos,

tengo un problema que espero alguien me pueda dar solución, el problema es
el siguiente. En una aplicación tengo que llamar a una hoja Excel que
contienen una tabla dinámicas que se basa en la base de datos de mi
aplicación. El problema es que quisiera que al llamar a la hoja Excel se
mostrarán los datos de la vista ya actualizados y no tener que dar al botón
de actualizar datos de Excel. Esto se puede hacer de alguna manera?

Gracias por anticipado.

Un saludo,
José Luis.

Preguntas similare

Leer las respuestas

#1 allan
05/07/2004 - 17:42 | Informe spam
José Luis, imagino, que llamas la hoja de excel por código, si es asi
creo que tambien puedes actualizar, la tabla dinamica,
ahora mismo no tengo excel a la mano, pero
supongo que guardando el macro en excel, de los eventos de actualizar
te guardara el codigo en una clase con lenguaje VBApp y desde ahi
ver si se puede hacer desde Fox.

Saludos, Allan Pivaral
Respuesta Responder a este mensaje
#2 Fco Lozano
06/07/2004 - 13:23 | Informe spam
Hola José Luis, en este código verás como lo estamos haciendo nosotros. te
explico un poco
Partimos que la tabla que contiene la información para montar la tabla
dinamica tiene un nombre y ubicación fija (eso no quiere decir
estructura fija ok?) en este caso tb_resultadoestadistica.

Ademas tenemos en varios list, la configuración de paginas, filas,
columnas y datos (con su operación) que definen la tabla dinamica, para
esto hemos hecho un pequeño asistente copiado del asistente de fox para la
creación de tablas dinámicas, pero sin tantas limitaciones de diseño.

Como verás en el cñodigo no solo modificamos sino que creamos la tabla
dinámica y el gráfico.

Nuestra tabla es una vista remota de oracle.


El Wscript.Shell es para que foxpro quede retenido mientras están editando
la hoja de excel.

Espero que te sea de ayuda ya que hemos invertido muchas horas en
averigüar como hacer este código.

Un saludo.

oExcel=createobject("excel.application")
oExcel.application.visible=.f.

oWorkbook = oExcel.WorkBooks.add()

oTargetSheet = oWorkBook.ActiveSheet
oTargetRange = oTargetSheet.range("A6") &&empieza en esta celda

dimension aSource[2]
aSource[1]="Driver={Microsoft Visual Foxpro Driver};"+;
"SourceDB="+ gcRutaDatosUsuario + 'db_Estadisticas' +
".dbc;SourceTypeÛC;"

aSource[2]="Select * from tb_ResultadoEstadistica"

oPivotTable = oExcel.Sheets[1].PivotTableWizard( 2, @aSource,
oTargetRange, "PivotTable", .t., .t. )

* Páginas
for lnI=1 to thisform.pgfConfiguracion.page3.lstPagina.listcount
lnEle=thisform.pgfConfiguracion.page3.lstPagina.indextoitemid(lnI)
oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstPagina.listitem(lnEle))).orientation
= 3
next

* Columnas
for lnI=1 to thisform.pgfConfiguracion.page3.lstColumna.listcount
lnEle=thisform.pgfConfiguracion.page3.lstColumna.indextoitemid(lnI)
oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstColumna.listitem(lnEle))).orientation
= 2
next

* Filas
for lnI=1 to thisform.pgfConfiguracion.page3.lstFila.listcount
lnEle=thisform.pgfConfiguracion.page3.lstFila.indextoitemid(lnI)
oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstFila.listitem(lnEle))).orientation
= 1
next

* Datos
for lnI=1 to thisform.pgfConfiguracion.page3.lstDatos.listcount
lnEle=thisform.pgfConfiguracion.page3.lstDatos.indextoitemid(lnI)
do case
case
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,2))=='Contar'
oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).orientation
= 4

case
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,2))=='Sumar'
and ;
type('cr_ResultadoEstadistica' + '.' + ;
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle)))=T_NUMERIC

oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).orientation
= 4
oPivotTable.PivotFields("Cuenta de " +
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).
function = -4157

case
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,2))=='Media'
and ;
type('cr_ResultadoEstadistica' + '.' + ;
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle)))=T_NUMERIC

*and;
*AT('DIAS',UPPER(alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,1))))=0

thisform.pasadas=thisform.pasadas+1

oPivotTable.PivotFields(alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).orientation
= 4

SELECT cr_ResultadoEstadistica
LOCATE FOR
isnull(EVALUATE(alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))))

IF FOUND()
oPivotTable.PivotFields("Cuenta de "
+alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).
function = -4106
ELSE
oPivotTable.PivotFields("Suma de "
+alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).
function = -4106
ENDIF
&& Cuenta de
case
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,2))=='Mediana'
and ;
type('cr_ResultadoEstadistica' + '.' + ;
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle)))=T_NUMERIC

oPivotTable.PivotFields("Mediana_" +
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).orientation
= 4
oPivotTable.PivotFields("Suma de Mediana_" +
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).
function = -4106

case
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle,2))=='Por
Ciento' ;
and !fEstaVacio(thisform.txtBase.Value)

&&and ;
*type('cr_ResultadoEstadistica' + '.' + ;
*alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle)))=T_NUMERIC


oPivotTable.PivotFields("PorCiento_" +
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).orientation
= 4
oPivotTable.PivotFields("Cuenta de PorCiento_" +
alltrim(thisform.pgfConfiguracion.page3.lstDatos.listitem(lnEle))).
function = -4106

With oExcel.ActiveSheet.PivotTables("PivotTable").PivotFields("Promedio
de porciento_código_artículo")
.NumberFormat = "0.00%"
EndWith

endcase
next

oExcel.Sheets("Hoja1").select
oExcel.Sheets("Hoja1").name = "Datos"

* Creación del Gráfico
oExcel.Charts.add
oExcel.ActiveChart.PlotArea.Select
oExcel.ActiveChart.ApplyDataLabels (2,.F.)

* Título
oExcel.Sheets("Datos").select
oExcel.range("A2").select
oExcel.range("A2").value = alltrim(thisform.cboMarca.Value) + chr(10) + ;
alltrim(evaluate(thisform.aliascabecera + '.' +
thisform.CampoDescripcion)) + chr(10) + ;

iif(!fEstaVacio(alltrim(thisform.txtBase.Value)),'Base: ' +
alltrim(thisform.txtBase.Value),'')

with oExcel.selection.font
.name = "Tahoma"
.size = 14
endwith

*oExcel.selection.font.Bold = VERDADERO
*oExcel.ActiveCell.FormulaR1C1 = alltrim(thisform.cboMarca.Value) +
chr(13) + ;
* alltrim(evaluate(thisform.aliascabecera + '.' +
thisform.CampoDescripcion)) + chr(13) + ;
* 'Base: ' + alltrim(thisform.txtBase.Value)

oExcel.Sheets("Gráfico1").select

With oExcel.ActiveChart
.HasTitle = .t.
.ChartTitle.Characters.Text = alltrim(thisform.cboMarca.Value) +
chr(13) + ;
alltrim(evaluate(thisform.aliascabecera + '.' +
thisform.CampoDescripcion)) + chr(13) + ;
iif(!fEstaVacio(alltrim(thisform.txtBase.Value)),'Base: ' +
alltrim(thisform.txtBase.Value),'')
endwith

oExcel.ActiveChart.ChartTitle.Select

With oExcel.Selection.Characters.Font
.Name = "Tahoma"
.FontStyle = "Bold"
.Size = 24
endwith

* Selección del tipo de gráfico
oExcel.ActiveChart.ChartType = 51
oExcel.ActiveChart.Location(1)


** Graba plantilla y cierra
lcCondicion=strtran(strtran(strtran(strtran(alltrim(cr_Marca.nuCodCon) +
'_' + alltrim(evaluate(thisform.aliascabecera + '.' +
thisform.CampoDescripcion)),' ', '_'),'/','_'),'\','_'),chr(34),'')
lcNombre=fDirectorio_Documentos(,,DIRECTORIO_ESTADISTICAS) + lcCondicion

lnRes=IDYES
if !file(lcNombre + '.xls')
oExcel.ActiveWorkbook.saveas(lcNombre)
else
lnRes=messagebox("Existe un archivo con el mismo nombre. Desea
reemplazarlo?",MB_YESNO+MB_ICONINFORMATION,"Guardar estadística")

if lnRes=IDYES
erase (lcNombre + '.xls')
oExcel.ActiveWorkbook.saveas(lcNombre)
else
llContinuar=VERDADERO
do while llContinuar
lnUltima=occurs('\',lcNombre)
lcNombre=inputbox("Introduzca el nuevo nombre de la estadística:
","Existe un archivo con el mismo nombre.
Reemplacelo",right(lcNombre,len(lcNombre)-at('\',lcNombre,lnUltima)))

if !fEstaVacio(lcNombre)
lcNombre=fDirectorio_Documentos(,,DIRECTORIO_ESTADISTICAS) + lcNombre
else
llContinuarúLSO
endif

if !fEStaVacio(lcNombre) and !file(lcNombre + '.xls')
oExcel.ActiveWorkbook.saveas(lcNombre)
llContinuarúLSO
endif
enddo
endif
endif

oExcel.application.displayalerts = .f.
oExcel.application.quit
oExcel.quit
release oExcel

* Borramos la tablapuente de la Base en Oracle
lcSql='Drop table ' + alltrim(oUser.caAlias) + alltrim(str(oUser.Codigo) +
'BASE')
sqlexec(gnConexSecuencias, lcSql)

* Ejecució Excel.
*if fEstaVacio(lnRes) or lnRes=IDYES
if !fEstaVacio(lcNombre)
wait window "Ejecutando Excel ..." noclear timeout 3
loWshShell=createobject("Wscript.Shell")
loWshShell.run ("excel.exe " + lcNombre,3,.t.)
wait clear
endif


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida