Estou desenvolvendo uma rotina de importação de uma planilha Excel para .DBF, mais está dando um erro de "Tipo incorreto de dado".
Código:
METHOD ImportaDB001() CLASS Arquivo
LOCAL cNit001,cNit002,cNit003,cNit004 // Numero Nit
LOCAL cMat001,cMat002,cMat003,cMat004 // Matricula
LOCAL nVal001,nVal002,nVal003,nVal004 // Valor R$
LOCAL cBase1 := ALLTRIM(oSistema:BancodeDados()+"Fluxo201301"+".xls")
LOCAL cBase2 := ALLTRIM(oSistema:BancodeDados()+"Db004"+".dbf")
LOCAL cBase3 := ALLTRIM(oSistema:BancodeDados()+"IndValor"+".cdx")
LOCAL nCont := rCont := 0 , nLin , nCol , oExcel , oPlanilha , oCelulas
LOCAL i := 2 , j , nLimite , c , sai := .T.
oExcel := TOleAuto():New( "Excel.Application" )
IF oExcel == NIL
MsgStop('Excel não está instalado!','Erro')
RETURN NIL
ENDIF
oPlanilha := oExcel:WorkBooks:Open( cBase1 )
oCelulas := oExcel:Get( "ActiveSheet" )
nLin := oCelulas:UsedRange:Rows:Count()
nCol := oCelulas:UsedRange:Columns:Count()
IF !FILE( ( cBase2 ) )
::AbrirArquivo("Db0004","IndValor",4,"Fluxo")
ELSE
DELETE FILE &cBase2
DELETE FILE &cBase3
::AbrirArquivo("Db0004","IndValor",4,"Fluxo")
ENDIF
FOR j = 2 TO nLin
c := oSistema:FormatoDados(oCelulas:Cells(j , 1):Value)
IF EMPTY(c)
nCont++
ENDIF
NEXT j
nLimite := nLin - nCont
i := 2
WHILE sai
++rCont
ImportaDados.progressbar_1.Value := Int(rCont/nLimite*100)
ImportaDados.label_4.Value := STR(INT(rCont/nLimite*100)) + " %"
ImportaDados.label_3.Value := STRZERO(i,6)
cNit001 := oCelulas:Cells(i , 1):Value
cMat001 := oCelulas:Cells(i , 2):Value
nVal001 := oCelulas:Cells(i , 3):Value
cNit002 := oCelulas:Cells(i , 4):Value
cMat002 := oCelulas:Cells(i , 5):Value
nVal002 := oCelulas:Cells(i , 6):Value
cNit003 := oCelulas:Cells(i , 7):Value
cMat003 := oCelulas:Cells(i , 8):Value
nVal003 := oCelulas:Cells(i , 9):Value
cNit004 := oCelulas:Cells(i , 10):Value
cMat004 := oCelulas:Cells(i , 11):Value
nVal004 := oCelulas:Cells(i , 12):Value
Fluxo->(DBAppend())
Fluxo->C_001 := cNit001
Fluxo->C_002 := cMat001
Fluxo->C_003 := nVal001
Fluxo->(DBSkip())
Fluxo->C_001 := cNit002
Fluxo->C_002 := cMat002
Fluxo->C_003 := nVal002
Fluxo->(DBSkip())
Fluxo->C_001 := cNit003
Fluxo->C_002 := cMat003
Fluxo->C_003 := nVal003
Fluxo->(DBSkip())
Fluxo->C_001 := cNit004
Fluxo->C_002 := cMat004
Fluxo->C_003 := nVal004
IF i = nLimite
EXIT
ENDIF
Fluxo->(DBSkip())
i++
END
oPlanilha:Close()
oExcel:Quit()
RETURN NIL
Estrutura do .DBF
Aadd( aarq , { 'C_001' , 'C' , 11 , 0 } )
Aadd( aarq , { 'C_002' , 'C' , 06 , 0 } )
Aadd( aarq , { 'C_003' , 'N' , 10 , 2 } ) <---- erro aqui
O erro está ocorrendo quando ele vai gravar no .DBF. Alguém pode me dar uma dica de como resolver este impasse?
[]'s
Paulo - Jacarei/SP