QAZWSX2K wrote:saludos preferiblemente de harbour pero me conformo con alguna que sirva ya que no leen desde excel, da error de property no se que cosa en GETproperty workbooks o algo asi, me tiene verde, tengo mas de 2 meses en este detalle, gracias
En Harbour y sin librerías adicionales, yo lo hago así (ahora me doy cuenta de que no estoy eliminando al final oExcel ni oHoja):
==========================
oExcel := CreateOLEObject("Excel.Application")
OLESetProperty(oExcel,"Visible", .T.)
OLEInvoke( OLEGetProperty(oExcel,"Workbooks"), "Open", cPathxls )
oHoja := OLEGetProperty(oExcel,"ActiveSheet")
ccognoms := "zzz"
nRow := 1
While AllTrim( ccognoms ) <> ""
nRow ++
Msgnowait( AMPAarra, "Atención!" , "Leyendo e importando datos." + ;
" Espere unos momentos por favor...." )
cCCC := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 2 ), "Value" )
If Valtype( cCCC) = "U"
cCCC := "00000000000000000000"
EndIf
cccc := Upper( cccc )
Traza(1, "cccc=", cccc )
cmail := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 3 ), "Value" )
If Valtype( cmail) = "U"
cmail := Space(1)
EndIf
cmail := Upper( cmail )
Traza(1, "cmail=", cmail )
cdatanaix := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 4 ), "Value" )
If Valtype( cdatanaix) = "U"
cdatanaix := CToD("01/01/1900")
elseIf Valtype( cdatanaix) = "C"
cdatanaix := CToD(cdatanaix)
EndIf
Traza(1, "cdatanaix=", cdatanaix)
cCognoms := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 7 ), "Value" )
If Valtype( ccognoms) = "U"
ccognoms := space(1)
EndIf
cCognoms := Upper( ccognoms )
Traza(1, "ccognoms=", ccognoms )
cNom := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 8 ), "Value" )
If Valtype( cnom) = "U"
cnom := space(1)
EndIf
cNOM := Upper( cNOM )
Traza(1, "cnom=", cNOM )
cLOPD := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 10 ), "Value" )
If Valtype( clopd) = "U"
clopd := .F.
Else
clopd := .T.
EndIf
Traza(1, "clopd=", cLOPD )
OLEInvoke( oExcel, "Quit" )
==========================
Es lento pero funciona.
Saludos
Carlos G.