In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Cerrar Excel 2.0

Foro público de Xailer en español
Responder
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cerrar Excel 2.0

Mensaje por zeasoftware »

Uso un proceso donde tomo como PLANTILLA una hoja de un archivo de Excel, pero, al finalizar me deja el archivo PLANTILLA abierto asi como el archivo resultante.
De igual manera si tengo mas archivos abiertos, estos se ocultan y si el programa se interrupe por algun error, estos quedan ocultos, y tengo que hacer varias cosas para que vuelvan a quedar visibles.
Alguien ya ha resuelto un asunto similar?
Gracias de antemano.
--
Ramón Zea
01.993.231-62-29
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
dirza_com@hotmail.com
--
Fernando Leal
Mensajes: 294
Registrado: Jue Mar 13, 2008 3:03 pm

Cerrar Excel 2.0

Mensaje por Fernando Leal »

Ramón,
No muestras nada de código así­ que te enseño como lo hago
TRY
oExcel := GetActiveObject( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH
msginfo( "Excel no disponible. [" + Ole2TxtError()+ "]" )
RETURN .f.
END
END
oExcel:WorkBooks:Add( Application:cDirectory+"DOCSFormatoCI.XLS" )
oPage := oExcel:ActiveSheet()
// aFolios es un Array que en su columna 1 guarda el recno de la dbf FW
FW->( DbGoTo( aFolios[1] ) )
oPage:Range( "FOLIOSICREDIT" ):Value := FW->CPRODUCTO + " - " + Alltrim( ToString( FW->FOLSICRE ) )
oPage:Range( "FOLIOCLIENTE" ):Value := FW->NXFOLIO
oPage:Range( "NOMBRE" ):Value := FW->NXNOMBRE
oPage:Range( "RAZONSOCIAL" ):Value := FW->NXRAZONSOC
oPage:Range( "DOMICILIO" ):Value := FW->NXDOMICILI
oPage:Range( "COLONIA" ):Value := FW->NXCOLONIA
oPage:Range( "CIUDAD" ):Value := FW->NXCIUDAD
oPage:Range( "ESTADO" ):Value := Alltrim( FW->NXESTADO )
oPage:Range( "CP" ):Value := TRANS( FW->NXCP, "99999" )
oExcel:ActiveWorkBook():PrintOut() // Con esto imprimo
oExcel:ActiveWorkBook():Close( .F. ) // Con esto cierro
oExcel:Quit()
Saludos
Fernando
--
Rene Flores
Mensajes: 620
Registrado: Jue Mar 23, 2006 2:39 am

Cerrar Excel 2.0

Mensaje por Rene Flores »

Ramón:
No me queda muy claro lo que quieres hacer, pero puedes hacer un EXIT
PROCEDURE donde destruyas el objeto Excel, obvio, el objeto tiene que
ser publico o un AppData para que puedas ser visible en el EXIT PROCEDURE:
EXIT PROCEDURE FINAL
oExcel:Quit()
RETURN
Asi como el primer modulo que se ejectua de tu programa xHarbour es un
INIT PROCEDURE antes de ejecutar el modulo MAIN, cuando tu programa
termina, el ulitmo modulo que se ejecuta es el EXIT PROCEDURE, de esta
forma te aseguras que si tu programa aborta por alguna razon SIEMPRE se
ejecute el EXIT PROCEDURE.
Saludos
Rene Flores
http://www.ciber-tec.com
------------------------
Nos vemos en España del 22 de Enero al 1 de Febrero
mas informes: info.es@ciber-tec.com
Zea escribió:
> Uso un proceso donde tomo como PLANTILLA una hoja de un archivo de
> Excel, pero, al finalizar me deja el archivo PLANTILLA abierto asi como
> el archivo resultante.
> De igual manera si tengo mas archivos abiertos, estos se ocultan y si el
> programa se interrupe por algun error, estos quedan ocultos, y tengo que
> hacer varias cosas para que vuelvan a quedar visibles.
> Alguien ya ha resuelto un asunto similar?
>
> Gracias de antemano.
>
> --
> Ramón Zea
> 01.993.231-62-29
> http://www.paginasprodigy.com/zeasoftware/
> zeasoftware@prodigy.net.mx <mailto:zeasoftware@prodigy.net.mx>
> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
> dirza_com@hotmail.com <mailto:dirza_com@hotmail.com>
notengo
Mensajes: 417
Registrado: Vie Oct 12, 2007 1:29 pm

Cerrar Excel 2.0

Mensaje por notengo »

Ramón,
aparte de los consejos que te dan en los otros mensajes, recuerda que hay
que informar al recolector de basura de xHarbour que has terminado de usar
ese objeto:
oExcel := Nil
Saludos,
José Lalí­n
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cerrar Excel 2.0

Mensaje por zeasoftware »

Pues la cosa es que hice a mi manera una clase, en la cual checo el excel, abro el archivo, busco la hoja, y hago mi plantilla, pero, no habia podido resolver este dato, voy a probar algo que has puesto y no conocia, pogo mi codigo para que te des una idea:
If ( oExcel := zExcelForm():New() ) == Nil
MsgStop("Su Equipo no Cuenta con el Programa Excel." + CRLF + ;
"Verifique y Vuelva a Intentar" )
Return ( Nil )
End
::oDataSet:SaveState(.t.)
::oDBFPartidas:SaveState(.t.)
With Object oExcel
:cBook := AppData:DIR_Formatos + "Formatos.xls"
:cSheet := "Pedido"
//cago los datos de los encabezados
:AddField( "docto.folio", {|| ::oDataSet:Folio })
:AddField( "docto.fecha", {|| ::oDataSet:Fecha })
:AddField( "docto.comentario", {|| ::oDataSet:Comentario })
:AddField( "docto.subtotal", {|| ::oDataSet:Subtotal })
:AddField( "docto.iva", {|| ::oDataSet:IVA })
:AddField( "docto.total", {|| ::oDataSet:Total })
:AddField( "proveedor.clave", {|| ::oDBFProveedores:Clave })
:AddField( "proveedor.nombre", {|| ::oDBFProveedores:Nombre })
:AddField( "proveedor.direccion", {|| ::oDBFProveedores:Direccion })
:AddField( "proveedor.ciudadestado", {|| ::oDBFProveedores:CiudadEdo })
:AddField( "proveedor.rfc", {|| ::oDBFProveedores:RFC })
::oDBFPartidas:Seek( ::oDataSet:Folio )
//Defino la linea detalle, y el bloque para delimitar los datos
:AddDetail("partidas", {|| ::oDBFPartidas:Folio == ::oDataSet:Folio .And. ;
!::oDBFPartidas:eof() }, ; //Lí­mite de datos
{|| ::oDBFPartidas:Skip(1) },; //forma de pasar al sig. dato
{|| ArtiSeek( Self, ::oDBFPartidas:Codigo ) } )//búsqueda de datos
:AddDetailField( "codigo", {|| ::oDBFPartidas:Codigo })
:AddDetailField( "cantidad", {|| ::oDBFPartidas:Cantidad })
:AddDetailField( "marca", {|o| o:cLinea })
:AddDetailField( "descripcion", {|o| o:cDescrip })
:AddDetailField( "unidad", {|o| o:cUniMedida })
:AddDetailField( "costo", {|| ::oDBFPartidas:Costo })
:AddDetailField( "importe", {|| ::oDBFPartidas:Costo * ::oDBFPartidas:Cantidad })
:Open()
:CopyTo()
End With
Gracias.
--
Ramón Zea
01.993.231-62-29
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
dirza_com@hotmail.com
--
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cerrar Excel 2.0

Mensaje por zeasoftware »

Gracias Master, pero no es al final de la aplicacion, es al finalizar el
proceso de generar el archivo de excel, lo que quiero es que quede solo
abierto el archivo mi archiov resultante y el de la plantilla se cierre.Saludos.
--
Ramón Zea
01.993.231-62-29
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
dirza_com@hotmail.com
Responder