Jump to content
Fivewin Brasil

MIGRAR CSV,XLS PARA DBF


MatheusFarias

Recommended Posts

#include "Fivewin.ch"
	Function Main()
	   Local oDlgPrincipal
   Local vcampo_destino,vcampo_origem,nprogresso
	   REQUEST DBFCDX
   RDDSETDEFAULT("DBFCDX")
	   *
   Store SPACE(100) to vcampo_destino,vcampo_origem
   nprogresso := 0
            *
   Define Dialog oDlgPrincipal RESOURCE "DLG_XLS2DBF" Title "XLS2DBF"
         
   REDEFINE GET ocampo_origem  VAR vcampo_origem  ID 4001 OF oDlgPrincipal ;
            ACTION pegaArquivo(@vcampo_origem,ocampo_origem)
	   REDEFINE GET ocampo_destino VAR vcampo_destino ID 4003 OF oDlgPrincipal ;
            ACTION pegaArquivo(@vcampo_destino,ocampo_destino)
         
   REDEFINE METER oprogresso VAR nprogresso ID 4005 OF oDlgPrincipal TOTAL 100
         
   REDEFINE BUTTON obtnIniciar ID 4007 OF oDlgPrincipal ;
            ACTION converte(vcampo_destino,vcampo_origem,nprogresso,oprogresso,oDlgPrincipal) ;
            WHEN !Empty(vcampo_origem) .AND. !Empty(vcampo_destino)
         
   REDEFINE BUTTON obtnSair    ID 4008 OF oDlgPrincipal ;
            ACTION oDlgPrincipal:End()
         
   Activate Dialog oDlgPrincipal centered
         
   __quit()
	RETURN NIL
	Function pegaArquivo(vcaminho,ocaminho)         
	   local xcaminho := ""
            
   xcaminho := cGetFile("*.*","Informe o arquivo")
            
   if !Empty(xcaminho)
      vcaminho := xcaminho
      ocaminho:refresh()
   endif
	RETURN NIL
*         
Function Converte(vcampo_destino,vcampo_origem,nprogresso,oprogresso,oDlgPrincipal)
	   * VALID EXTENSAO XLS
   IF UPPER(cFileExt(vcampo_origem)) # "XLS"
	      IF UPPER(cFileExt(vcampo_origem)) # "XLSX"
         MsgAlert("No Arquivo de Origem não é aceito a extensão "+UPPER(cFileExt(vcampo_origem)),"Atenção")
         RETURN .F.
       ENDIF
	   ENDIF
	   IF UPPER(cFileExt(vcampo_destino)) # "DBF"
	      MsgAlert("No Arquivo de Destino não é aceito a extensão "+UPPER(cFileExt(vcampo_destino)),"Atenção")
      RETURN .F.
	   ENDIF
	   hColunaCabeca := {=>}
   lvolta:=.f.
	   TRY
      oExcel := CreateObject( "Excel.Application" )
	      oBook := oExcel:WorkBooks:Open( vcampo_origem,;
               OleDefaultArg(), ;
               OleDefaultArg(), ;
               OleDefaultArg(), ;
               OleDefaultArg(), ;
               '1111')
	      oSheet := oExcel:Get("ActiveSheet")
	   CATCH oerro
	      MsgAlert("Atenção não é possível abrir a planilha - erro Tecnico! - "+oerro:description,"Alerta")
      lvolta:=.t.
	   END
	   IF lvolta
      RETURN .T.
   ENDIF
	   oDlgPrincipal:SetText("XLS2DBF - Aguarde um momento ...")
	   nTotalLinhas := 0
   nColuna := 0
	   WHILE .T.
	      nColuna++
      cColuna       := oSheet:Cells(1,nColuna):Value
	      if !Empty(cColuna)
	         HSet(hColunaCabeca,alltrim(cValToChar(cColuna)),nColuna)
	      ELSE
	         EXIT
	      ENDIF
	      SYSREFRSH()
	   END
	   WHILE .T.
	     nTotalLinhas++
     cCampo       := oSheet:Cells(nTotalLinhas,1):Value
	     if Empty(cCampo)
	        nTotalLinhas--
        EXIT
	     ENDIF
	     SYSREFRESH()
	   END
	   oprogresso:SetTotal(nTotalLinhas)
   oprogresso:refresh()
            
   DbUseArea(.T.,"DBFCDX",VCAMPO_DESTINO,"ARQ",.F.,.F.,NIL,NIL)
	   IF NetErr()
	      MsgAlert("Atenção o arquivo não pode está em uso !","Alerta")
	      CLOSE DATA
      RETURN .T.
	   ENDIF
	   aEstrutura:= DbStruct()
	   For nLinha:=2 to nTotalLinhas
	      select arq
      append blank
	      For nColunaDBF := 1 to len(aEstrutura)
	         cColuna := aEstrutura[nColunaDBF][1]
         cTipo := aEstrutura[nColunaDBF][2]
         nColunaEXCEL:=0
	         TRY
            nColunaEXCEL:=hColunaCabeca[cColuna]
         CATCH
         END
	         IF nColunaEXCEL > 0
	            cValor  := oSheet:Cells(nLinha,nColunaEXCEL):Value
	            IF cTipo == "C"
               replace &cColuna WITH ALLTRIM(cValToChar(cValor))
            ENDIF
	            IF cTipo == "N"
               replace &cColuna WITH VAL(cValToChar(cValor))
            ENDIF
	            IF cTipo == "L"
               replace &cColuna WITH IIF(cValToChar(cValor) == '1',.T.,.F.)
            ENDIF
	         ENDIF
	         oprogresso:set(nLinha)
         oprogresso:refresh()
	         SysRefresh()
	      next
	   next
	   TRY
      oExcel:Quit()
      catch
   end
	   Release oExcel
   close data
            
RETURN NIL
               
// FIM


 

Link to comment
Share on other sites

 

Bom dia

Tentei rodar o exemplo mas deu o erro abaixo:

Error: Unresolved external '_hb_partdt' referenced from H:\FWH1608\LIB\FIVEHX.LIB|VALTOSTR

Esse exemplo é para xHarbour ou Harbour? Se for para Harbour como passo para funcionar com xHarbour?

Herberson Gontijo

O exemplo é em xHarbour sim, foi compilada com 
xHarbour 1.2.3 Intl. (SimpLex) (Build 20150603)
Copyright 1999-2015, http://www.xharbour.org http://www.harbour-project.org/
 

As libs que tem nos meus projetos são essas
 

echo FiveHx.lib FiveHC.lib + >> "b32.bc"
 echo rtl.lib +       >> "b32.bc"
 echo vm.lib +        >> "b32.bc"
 echo gtgui.lib  +  >> "b32.bc"
 echo lang.lib +      >> "b32.bc"
 echo macro.lib +     >> "b32.bc"
 echo rdd.lib +       >> "b32.bc"
 echo codepage.lib +  >> "b32.bc"
 echo dbfntx.lib +    >> "b32.bc"
 echo dbfcdx.lib +    >> "b32.bc"
 echo dbffpt.lib +    >> "b32.bc"
 echo hbsix.lib    +  >> "b32.bc"
 echo common.lib +    >> "b32.bc"
 echo pp.lib +        >> "b32.bc"
 echo ct.lib +        >> "b32.bc"
 echo lang.lib +        >> "b32.bc"
 echo pcrepos.lib +        >> "b32.bc"
 echo png.lib +        >> "b32.bc"
 echo tip.lib +        >> "b32.bc"
 echo zlib.lib +        >> "b32.bc"
 echo hbzip.lib +        >> "b32.bc"
 echo cw32.lib +      >> "b32.bc"
 echo import32.lib +  >> "b32.bc"
 echo nddeapi.lib + >> "b32.bc"
 echo iphlpapi.lib + >> "b32.bc"
 echo rasapi32.lib + >> "b32.bc"
 echo shell32.lib + >> "b32.bc"
 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...