Reportes en VPF7.0 y MS Excel

Estimado experto, quisiera saber si ha pasado por esta experiencia. Yo genero un reporte de algo así como una solicitud de cotización la cual se envía por fax, pero también necesitaría almacenarla en un hoja de calculo (Excel). ¿Podría ud. Ayudarme con esto?
Muchas Gracias.

1 respuesta

Respuesta
1
Ok, mira lo que yo hago para mandar a excel es crear una consulta tipo dbf y la exporto con los campos pertinentes por ahí encontré esta función que no la hice yo pero es muy buena te la mando:
* Procedimiento..: Dbf2Excel
* Creada ........: Mayo 21, 2003 By Sukos
* Uso ...........: Convierte una tabla a Excel, repartiendo los registros en varias hojas si
* es necesario.
* Llamada .......: Dbf2Excel(, , , )
* Donde .........: = Alias de la tabla a convertir, debe estar abierta
* = Nombre que se asigna a cada hoja en Excel
* = Numero de registros por hoja que se desean
* = Nombre con que se salva el libro de Excel creado
* Ejemplo .......: Dbf2Excel("Prueba","Regs",50000,"C:PruebaXls")
* ----------------------------------------------------------------------------------------------------------------
Proc Dbf2Excel(Vl_Tabla, Vl_NomsHojas, Vl_LimReg,Vl_NomArchSal)
Local Vl_Alias, Vl_TotRegs, Vl_NoHojas, Vl_CtaHoja, Vl_LimIni, Vl_LimFin, Vl_NomHoja
Vl_Alias=Alias() && Guarda el alias de la tabla en uso actualmente
If Used(Vl_Tabla) && Verifica que la tabla a convertir este abierta
*** Averigua cuantas hojas de excel se necesitan
Sele (Vl_Tabla)
Vl_TotRegs=RecCount()
Vl_NoHojas=Int(Vl_TotRegs/Vl_LimReg)+Iif(Mod(Vl_TotRegs,Vl_LimReg)=0,0,1)
*** Crea un cursor temporal y lo llena con un reg por cada hoja que se requiere
Create Cursor TablasTmp (NomHoja C(20), RangoIni N(9), RangoFin N(9), NomDbf C(15))
Vl_LimIni=1
For Vl_CtaHoja=1 To Vl_NoHojas
Vl_LimFin=Vl_LimIni+Vl_LimReg-1
Vl_LimFin=Iif(Vl_LimFin>Vl_TotRegs,Vl_TotRegs,Vl_LimFin)
Vl_NomHoja="C:TmpDbf"+PadL(Vl_CtaHoja,2,"0")+".Dbf"
Sele TablasTmp
Append Blank
Replace TablasTmp.NomHoja With Vl_NomsHojas+"_"+TransForm(Vl_LimIni)+"_"+TransForm(Vl_LimFin)
Replace TablasTmp.RangoIni With Vl_LimIni
Replace TablasTmp.RangoFin With Vl_LimFin
Replace TablasTmp.NomDbf With Vl_NomHoja
Sele (Vl_Tabla)
Copy To (Vl_NomHoja) Type Fox2X As 850 For RecNo()>=Vl_LimIni.And.RecNo()<=Vl_LimFin
Vl_LimIni=Vl_LimFin+1
Next Vl_CtaHoja
*** Crea el objeto Excel
loExcel = CREATEOBJECT("Excel.Application")
loExcel.Visible=.F.
loExcel.WorkBooks.Add
*** Prepara el libro de Excel agregandole o eliminando hojas segun sea necesario
Do Case
Case Vl_NoHojas>3
For Vl_CtaHoja=4 To Vl_NoHojas
loExcel.Sheets.Add
Next Vl_CtaHoja
Case Vl_NoHojas<3
For Vl_CtaHoja=Vl_NoHojas+1 To 3
loExcel.Sheets(1).Activate
loExcel.Sheets(1).Delete
Next Vl_CtaHoja
EndCase
*** Carga las hojas en el libro de Excel y les cambia el nombre
Vl_CtaHoja=1
Sele TablasTmp
Go Top
Do While !Eof()
Wait "Espere un momento, convirtiendo hoja "+Allt(Str(Vl_CtaHoja))+" de "+Allt(Str(Vl_NoHojas)) Window At 10,10 NoWait NoClear
loExcel. Workbooks. Open(Allt(TablasTmp. NomDbf))
loExcel.Range("A1:AZ65001").Select
loExcel.Selection.Copy
loExcel.ActiveWindow.ActivateNext
loExcel.Sheets(Vl_CtaHoja).Activate
loExcel.Sheets(Vl_CtaHoja).Name=Allt(TablasTmp.NomHoja)
loExcel.ActiveSheet.Paste
loExcel.ActiveSheet.Cells(1,1).Select
loExcel.Application.CutCopyMode=.F.
LoExcel. ActiveWindow. ActivateNext
LoExcel. ActiveWindow. Close
Vl_CtaHoja=Vl_CtaHoja+1
Sele TablasTmp
Skip
EndDo
Wait Clear
*** Salva el libro de Excel
LoExcel. ActiveWorkbook. SaveAs(Vl_NomArchSal, -4143, "", "", .F., .F.)
LoExcel. WorkBooks. Close
Release loExcel && Libera el objeto Excel creado
Use In TablasTmp && Cierra el cursor temporal
*** Regresa el apuntador a la tabla que estaba activa
Else
MessageBox("La tabla debe estar abierta para efectuar conversion",48,"No se encuentra la tabla")
EndIf
If Len(Allt(Vl_Alias))>=1
Sele &Vl_Alias
EndIf
Return
Espero esto te funcione...
Por ahí tengo algo para convertir un reporte a excel pero dejame buscarlo y si me mandas tu E-mail te lo envío. (En este momento estoy de viaje así que tendrás que esperar unos 10 o 15 días)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas