FoxPro/Visual FoxPro - Automatizacion excel

 
Vista:
sin imagen de perfil

Automatizacion excel

Publicado por Javier (3 intervenciones) el 04/10/2007 10:01:08
Hola, estoy intentando crear un archivo excel con una determinada cantidad de hojas y me da el error (Error numero 1429, Codigo de excepcion OLE IDispatch 0 de ?:?).

El código es este y creo que esta igual que en algunos ejemplos de internet. El problema es que no puedo cambiar la hoja seleccionada. Las hojas 1,2 y 3 si funcionan bien, pero al crear una hoja nueva y seleccionarla, al intentar cambiar el nombre da ese error. Alguien me puede decir lo que falla. Gracias de antemano.

LPARAMETERS cTipo
LOCAL cFechas, fFecha, cFactura, cCodigo, cNombre, cActiv, nImporte, cDiv, nPts, cJefe, cFich, nHoja

cFechas = This.cl_etiq1.Caption

IF cTipo == 'EXCEL'
cFich = GetFile( "XLS", "Archivo de EXCEL:", "Exportar" )
IF Empty(cFich) = .F.
oXL=CREATEOBJECT("Excel.Application")
oXL.workbooks.ADD
oXL.APPLICATION.VISIBLE = .F.
nHoja = 0
ENDIF
ENDIF

SELECT CFACTURAS
IF RecCount() > 0
CREATE CURSOR CIMP (FaFecha D, FaNumFac C(12), PcCodigo C(4), PcNombre C(65), FaActividad C(150), FaImporte N(11,2), ;
DiFactura C(5), ptas N(11,2), jefe C(50), nFaId I)
SELECT CFACTURAS
SCAN
fFecha = FaFecha
cFactura = FaNumFac
cCodigo = PcCodigo
cNombre = AllTrim(PgNombre) + " " + AllTrim(PcNombre)
cActiv = FaActividad
nImporte = FaImporte
cDiv = DiFactura
nPts = ptas
nnFaId = FaId
SELECT CRESING
GO TOP
LOCATE FOR PcCodigo = cCodigo
cJefe = Iif( Found(), nombre, "<sin identificar>" )

IF cTipo == 'EXCEL'
nHoja = nHoja + 1

*oXLSheet = CREATEOBJECT("Excel.Sheet")

IF nHoja < 4 THEN
oXL.Sheets(ALLTRIM("Hoja" + ALLTRIM(STR(nHoja)))).NAME=cNombre
ELSE
oXL.Sheets.add
vNomHoja1 = "Hoja" + ALLT(STR(nHoja))
oXL.Sheets(vNomHoja1).NAME=cNombre
*oXL.Sheets(4).SELECT

*oXLSheet = oXL.APPLICATION.activeworkbook.ActiveSheet
*oXLSheet.NAME = "pp"
ENDIF
*oXLSheet.NAME = "pp"

ENDIF


*INSERT INTO CIMP VALUES (fFecha, cFactura, cCodigo, cNombre, cActiv, nImporte, cDiv, nPts, cJefe, nnFaId )
SELECT CFACTURAS
ENDSCAN
IF cTipo == 'EXCEL'
oXL.APPLICATION.ActiveWorkbook.SAVEAS(cFich)
oXL.APPLICATION.QUIT
ENDIF
*SELECT CIMP
IF cTipo == 'EXCEL'
*cFich = GetFile( "XLS", "Archivo de EXCEL:", "Exportar" )
* IF Empty(cFich) = .F.
*COPY TO (cFich) TYPE XLS
*oXL=CREATEOBJECT("Excel.Application")
*oXL.APPLICATION.workbooks.ADD
*oXL.APPLICATION.VISIBLE = .T.
*nHoja = 0
*SCAN
*MessageBox(cCodigo,0+64,cMensaje)
** ¿Porque entra 52 veces en el SCAN (eso es correcto) y siempre cNombre es igual (no es correcto, curiosamente siempre pone el ultimo
** elemento), sin embargo con el comando COPY TO (cFich) TYPE XLS lo escribe bien
** en EXCEL lo q quiere decir que los datos almacenados en el cursor son correctos
* nHoja = nHoja + 1
* oXLSheet = CREATEOBJECT("Excel.Sheet")
* oXL.APPLICATION.activeworkbook.Sheets.Add
* oXL.APPLICATION.activeworkbook.Sheets(nHoja).SELECT
* oXLSheet = oXL.APPLICATION.activeworkbook.ActiveSheet
* oXLSheet.NAME = cNombre
* SELECT CIMP

*ENDSCAN

*oXL.APPLICATION.ActiveWorkbook.SAVEAS(cFich)
*oXL.APPLICATION.QUIT
MessageBox("Ficheros generados para Excel",0+64,cMensaje)
*ENDIF
Else
REPORT FORM IMES1 &cTipo
EndIf
SELECT CIMP
USE
SELECT CFACTURAS
GO TOP
ELSE
MessageBox( "No existen hitos del mes de " + AllTrim(CMESES.mes), 0+48, cMensaje )
ENDIF
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Automatizacion excel

Publicado por Ernesto Hernandez (4623 intervenciones) el 05/10/2007 21:15:37
oXL.Sheets.Name = (ALLTRIM("Hoja" + ALLTRIM(STR(nHoja))))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar