Page 1 of 1

Filexls

Posted: Tue May 22, 2007 1:54 pm
by Ruben Fernandez
Amigos:
Trato de pasar de una hoja de excel a dbf y
obtengo este error... alguna idea

Harbour, FWH7.05, Borland

Muchas gracias.
Ruben Fernandez.

Este es el código y debajo ele rror.

oExcel := TOleAuto():New( "Excel.Application" )

oExcel:WorkBooks:Open(cFilePath(GetModuleFileName(GetInstance()))+"eventos.xls")

oHoja := oExcel:Get( "ActiveSheet" )


nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()

FOR nCol := 1 TO nCols

IF ValType( oHoja:Cells( 2, nCol ):Value ) = "C"
AADD( aCampos, { oHoja:Cells( 1, nCol ):Value, "C", 25, 0 } )

ELSEIF ValType( oHoja:Cells( 2, nCol ):Value ) = "N"
AADD( aCampos, { oHoja:Cells( 1, nCol ):Value, "N", 6, 0 } )

ELSEIF ValType( oHoja:Cells( 2, nCol ):Value ) = "L"
AADD( aCampos, { oHoja:Cells( 1, nCol ):Value, "L", 1, 0 } )

ELSEIF ValType( oHoja:Cells( 2, nCol ):Value ) = "D"
AADD( aCampos, { oHoja:Cells( 1, nCol ):Value, "D", 8, 0 } )
ENDIF

NEXT


Aqui comienza el error.


Error Excel.Application/16389 E_FAIL: ACTIVESHEET
Argumentos :
[ 1] = U

Llamadas al Stack
________________________________________________________________________________

Called from TOLEAUTO:ACTIVESHEET(0)
Called from HB_EXECFROMARRAY(0)
Called from TOLEAUTO:GET(349)
Called from READEXEL(859)
Called from (b)LEEREVENTO(829)
Called from (b)MSGRUN(0)
Called from (b)TDIALOG(0)
Called from TDIALOG:DISPLAY(0)
Called from TDIALOG:HANDLEEVENT(0)
Called from DIALOGBOXINDIRECT(0)
Called from TDIALOG:ACTIVATE(0)

Posted: Tue May 22, 2007 5:19 pm
by sysctrl2
Ruben comenta una linea.

oExcel := TOleAuto():New( "Excel.Application" )

oExcel:WorkBooks:Open(cFilePath(GetModuleFileName(GetInstance()))+"eventos.xls")

oHoja := oExcel:Get( "ActiveSheet" )

nRows := oHoja:UsedRange:Rows:Count()

for nFor := 1 to nRows
msginfo( oExcel:oHoja:Cells( nFor, nCol ):Value ) //prueba asi.
nex


saludos..

Posted: Wed May 23, 2007 8:52 am
by pymsoft
Ruben,

estás seguro que lograste abrir el archivo .xls?

porque por lo que parece el error viene al seleccionar la hoja de trabajo.

prueba esto:

TRY

oHoja := oExcel:Get( "ActiveSheet" )

CATCH oError
MsgStop( oError:Operation+CRLF+oError:Description )
RETURN NIL

END TRY


P.D. no se si ahora con harbour puedes usar TRY, END TRY...


Saludos

Posted: Wed May 23, 2007 1:44 pm
by Raymundo Islas M.
Hola Ruben

Asi tengo el proceso para pasar de Excell a Dbf :

Code: Select all

Static Function ABESHWXLSDTS()
LOCAL oExcel, oHoja, nRows, nCols, aXRowVals, nRow, nCol, lVal2Ret := .F., aKurXFabXPrd, cXItm2Vrf
LOCAL aColsErr := {0,0,0}, cErrStrUpd := ""
LOCAL cFlXls2Prc := cGetFile( "*.XLS", "Seleccione Archivo De Datos" )

IF DckMBox( 2, "PARAMETROS PARA EXTRACCION DE DATOS DEL ARCHIVO" + CRLF + ;
		"DE EXCEL HACIA EL SISTEMA MASTER SON CORRECTOS ?",,,, )
	IF DckMBox( 3,,,,, )
		DTSMDF->( OrdSetFocus(1), DbGoTop() )

		oExcel := TOleAuto():New( "Excel.Application" ) 
		*oExcel:Visible := .T.					// por si quieres ver la hoja abierta 
		oExcel:WorkBooks:Open( cFlXls2Prc )

		oHoja := oExcel:Get( "ActiveSheet" ) 
		nRows := oHoja:UsedRange:Rows:Count() 
		nCols := oHoja:UsedRange:Columns:Count() 

			FOR nRow := 1 TO nRows 
				IF oHoja:Cells( nRow, 1 ):Value == NIL
					EXIT
				ENDIF
				aXRowVals := {}
				AaDd( aXRowVals, oHoja:Cells( nRow, 1 ):Value  )
				AaDd( aXRowVals, oHoja:Cells( nRow, 2 ):Value  )
				AaDd( aXRowVals, oHoja:Cells( nRow, 3 ):Value  )
				AaDd( aXRowVals, oHoja:Cells( nRow, 4 ):Value  )
				cXItm2Vrf := aXRowVals[1]
				cXItm2Vrf := IIF( ValType( cXItm2Vrf ) == "N", ;
					AllTrim( TransForm( cXItm2Vrf, "9999999999999999" ) ), cXItm2Vrf )
				IF DTSMDF->( DbSeek( AllTrim( Upper( cXItm2Vrf ) ) ) )
					IF AllTrim( DTSMDF->PPART ) == AllTrim( Upper( cXItm2Vrf ) )
						DTSMDF->PIIU   := aXRowVals[2]
						DTSMDF->PEXSM  := aXRowVals[3]
						DTSMDF->PEXSN  := aXRowVals[4]
						DTSMDF->PSLD   := 1
						DTSMDF->PMDFLG := 1
					ENDIF
				ENDIF
			NEXT
		DTSMDF->( DbGoTop() )
		lbCatMdf:REFRESH()
		oExcel:ActiveWorkbook():Close( .F. )
		oExcel:Quit() 
		lVal2Ret := .T.
	ENDIF
ENDIF
Return NIL
*-----*
Espero te sirva


Saludos

Posted: Wed May 23, 2007 10:56 pm
by Ruben Fernandez
Gracias Raymundo:

Lo tengo funcionando...
Aunque tengo alguna cosas diferentes a las tuyas,
quizas sea por Harbour y xHarbour

oExcel := TOleAuto():New( "Excel.Application" )

oExcel:WorkBooks:Open(cFilePath(GetModuleFileName(GetInstance()))+"eventos.xls")


oHoja := oExcel:ActiveSheet()


nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()

Saludos y muchas gracias a todos

Ruben Fernandez.