Set Talk Off
Local lcXLBook As String, lnSQLHand As Integer, ;
lcSQLCmd As String, lnSuccess As Integer, ;
lcConnstr As String
Clear
**Define a extensão do ficheiro a ler, aqui pode colocar a opção "XLSX" de Excel2007
lcXLBook = Getfile("xls")
lcConnstr = [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;
[DBQ=] + lcXLBook
If !File( lcXLBook )
? [Ficheiro Excel não encontrado]
Return .F.
Endif
lnSQLHand = Sqlstringconnect( lcConnstr )
** Define o nome da folha onde estão os dados
lcSQLCmd = [Select * FROM "Folha1$"]
lnSuccess = SQLExec( lnSQLHand, lcSQLCmd, [xlResults] )
**Verifica se a leitura foi bem sucedida ou se falhou
? [SQL Cmd Success:], Iif( lnSuccess > 0, 'OK!', 'Falhou' )
If lnSuccess < 0
msg("Entra")
Local Array laErr[1]
Aerror( laErr )
? laErr(3)
SQLDisconnect( lnSQLHand )
Return .F.
Endif
**Posiciona-se no cursor das linhas da grelha
**Posiciona-se no cursor com os dados lidos da folha de Excel
Select xlResults
m.totrec=Reccount("xlResults")
=regua(0,m.totrec,"Registos a importar... ")
Scan
**Régua para mostrar o progresso da tarefa
=regua(1,Recno(),"Processando a registo Nº"+astr(xlResults.ref))
**Funcionalidade que permite abortar a importação dos registos
If aborta()
regua(2)
mensagem("INTERROMPIDO ....")
fecha("xlResults")
Return .F.
Endif
Select xlResults
**Introduz linhas
Select crsteste
Append Blank
**Preenche o campo "ref"
Replace crsteste.ref With Iif(Vartype(xlResults.ref)='C',Alltrim(xlResults.ref),astr(xlResults.ref))
Replace crsteste.qtt With Val(astr(xlResults.qtt))
Replace crsteste.dataobra With Nvl((xlResults.Data),'')
Replace crsteste.obrano With Val(astr(xlResults.FS))
Endscan
**Liberta a ligação ao ficheiro de Excel
SQLDisconnect( lnSQLHand )
regua(2)
**Programa terminado
******************************************************