Ola amigos,
Preciso ler planilha Excel com ADO, é possivel ?
gostaria de um exemplo
Ari
ADO com Excel
No necesitas ADO, con OLE es mas que suficiente:
Code: Select all
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Open("yourfile.xls")
oHoja := oExcel:Get( "ActiveSheet" )
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
USE filedbf
FOR nRow := 2 TO nRows
APPEND BLANK
For nfrom := 1 TO nCols
FIELDPUT(nFrom, oHoja:Cells(nRow,nCol):Value)
NEXT
NEXT
Saludos
R.F.
R.F.
o usuário não tem o Excel.
Eu já uso desta forma que voce falou Rene, para algumas planilhas com mais de 10.000 linhas, o sistema vai parando ..ficando lento por falta de memoria..
com ODBC eu fiz assim:
* isto funcionou, mas eu tenho que criar a conexao na maquina do usuario para funcionar, gostaria de algo direto.
Ari
Eu já uso desta forma que voce falou Rene, para algumas planilhas com mais de 10.000 linhas, o sistema vai parando ..ficando lento por falta de memoria..
com ODBC eu fiz assim:
Code: Select all
Function Teste(oMeter) // Ler arquivos Excel com ODBC
local oDbc := TOdbc():New() // criar o ODBC no Windows !
local n := 1
local oAdo := TdbOdbc():New("SELECT * FROM [folha1$]", oDbc)
oMeter:nTotal := oAdo:RecCount()
While !oAdo:eof()
++n
oMeter:cText := padr(oAdo:FieldGet(1),18) + " " + padr( oAdo:FieldGet(2) ,20)
oMeter:Set(n)
oMeter:refresh()
oAdo:skip()
End
return nil
Ari
Amiguinho
Complementando o exemplo do Amigo Rene, neste exemplo voce poderá ler e gravar dados em planilhas simples.
Complementando o exemplo do Amigo Rene, neste exemplo voce poderá ler e gravar dados em planilhas simples.
Code: Select all
*
* ----------------------------------------------------------------
*
FUNCTION OLEExcel()
LOCAL oWnd, oMenu
MENU oMenu
MENUITEM "&Probar Excel y DBF"
MENU
MENUITEM "&Leer SIGLAS.XLS" ACTION LEER()
MENUITEM "&Enviar SIGLAS.DBF a Excel" ACTION ENVIAR() WHEN FILE( "SIGLAS.DBF" )
SEPARATOR
MENUITEM "&Salir" ACTION oWnd:End()
ENDMENU
ENDMENU
DEFINE WINDOW oWnd FROM 0,0 TO 20,70 MENU oMenu TITLE "Probar Excel y DBF"
ACTIVATE WINDOW oWnd MAXIMIZED
RETURN
FUNCTION LEER()
LOCAL oExcel, oHoja, nRows, nCols
LOCAL aCampos:={}, nRow, nCol
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Open(SFN2LFN(cFilePath(GetModuleFileName(GetInstance()))+"SIGLAS.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", 80, 0 } )
ELSEIF ValType( oHoja:Cells( 2, nCol ):Value ) = "N"
AADD( aCampos, { oHoja:Cells( 1, nCol ):Value, "N", 15, 4 } )
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
DBCREATE( "EXCEL", aCampos )
USE "EXCEL" NEW
FOR nRow := 2 TO nRows
APPEND BLANK
FOR nCol := 1 TO nCols
FIELDPUT( nCol, oHoja:Cells( nRow, nCol ):Value )
NEXT
NEXT
CLOSE DATABASES
oExcel:Quit()
oHoja:End()
oExcel:End()
MsgInfo( "Foi criado o arquivo EXCEL.DBF" )
RETURN
FUNCTION ENVIAR()
LOCAL oExcel, oHoja
LOCAL nRow := 1, nCol
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Add()
oHoja := oExcel:Get( "ActiveSheet" )
USE "SIGLAS" NEW
FOR nCol := 1 TO FCOUNT()
oHoja:Cells( nRow, nCol ):Value := FieldName( nCol )
NEXT
DO WHILE .NOT. EOF()
nRow++
FOR nCol := 1 TO FCOUNT()
oHoja:Cells( nRow, nCol ):Value := FieldGet( nCol )
NEXT
SKIP
ENDDO
FOR nCol := 1 TO FCOUNT()
oHoja:Columns( nCol ):AutoFit()
NEXT
CLOSE DATABASES
oExcel:Visible := .T.
oHoja:End()
oExcel:End()
RETURN