Página 1 de 1
Importar hoja de Excell
Publicado: Lun Jul 27, 2015 6:46 pm
por jasm
Necesito importar datos desde una hoja de excell al programa ¿alguien ha hecho algo de esto?
Gracias.
Re: Importar hoja de Excell
Publicado: Lun Jul 27, 2015 6:57 pm
por mcastabaron
Yo lo que hago es guardar la hoja de excel como DBF 4 (dBASE IV) y ya puedes tratar los datos normalmente.
Esto si estás utilizado DBFS.
Miguel C.
Re: Importar hoja de Excell
Publicado: Lun Jul 27, 2015 7:10 pm
por XeviCOMAS
Jasm
Yo lo estoy utilizando... te adjunto el prg de la carga de tarifa que tengo para actualizar la tarifa de AZKOYEN, por ejemplo.
Espero te sirva.
******************************************************************************************
#include "Xailer.ch"
Static lDesplegaMenu
PROCEDURE xFrmActualitzacioArticlesAzkoyen(oSender)
local nAscan
Local aForms := Application:aForms
ProcessMessages()
If (nAscan := aScan( aForms , {|o| o:ClassName() == TFrmActualitzacioArticlesAzkoyen():ClassName() } )) = 0
If (nAscan := aScan( aForms , {|o| o:ClassName() == TFrmEmpreses():ClassName() .or. o:ClassName() == TFrmIndexar():ClassName() } )) # 0
xSortir( oSender )
Return
EndIf
Else
aForms[nAScan]:SetFocus()
Return
EndIf
lDesplegaMenu := oSender != Nil
TFrmActualitzacioArticlesAzkoyen():New( Application:oMainForm ):Show()
Return
Static Procedure xSortir(o)
If( lDesplegaMenu, xDesplegaMenu( o, 4, 6, 0 ), )
Return
CLASS TFrmActualitzacioArticlesAzkoyen FROM TForm
COMPONENT oLabel1
COMPONENT oButton1
COMPONENT oCheckbox1
COMPONENT oCbboxImporte
COMPONENT oLabel2
COMPONENT oEditBtn1
COMPONENT oFileOpenDlg1
COMPONENT oLabel3
COMPONENT oCbboxReferencia
COMPONENT oLabel4
COMPONENT oCbboxDescripcio
COMPONENT oLabel5
METHOD CreateForm()
METHOD Button1Click( oSender )
METHOD EditBtn1BtnClick( oSender, Value )
METHOD FormClose( oSender, @lClose )
METHOD FormDestroy( oSender )
ENDCLASS
#include "ActualitzacioArticlesAzkoyen.xfm"
//------------------------------------------------------------------------------
METHOD FormClose( oSender, lClose ) CLASS TFrmActualitzacioArticlesAzkoyen
lClose := ::oCbboxImporte:lEnabled
RETURN Nil
//------------------------------------------------------------------------------
METHOD FormDestroy( oSender ) CLASS TFrmActualitzacioArticlesAzkoyen
If( Len( Application:aForms ) = 2, xSortir( ::oParent ), )
RETURN Nil
//------------------------------------------------------------------------------
METHOD EditBtn1BtnClick( oSender, Value ) CLASS TFrmActualitzacioArticlesAzkoyen
If ::oFileOpenDlg1:Run()
::oEditBtn1:cText := ::oFileOpenDlg1:cFullFileName
EndIf
RETURN Nil
//------------------------------------------------------------------------------
METHOD Button1Click( oSender ) CLASS TFrmActualitzacioArticlesAzkoyen
Local oExcel, cL
Local n := If( ::oCheckbox1:lChecked, 1, 0 )
Local nTime := Seconds()
Local nNoves := 0
Local lAbort := .F.
Local cAliasArticles := "ARTICLESACTUALITZACIOARTICLESAZKOYEN"
Application:lBusy := .T.
TRY
oExcel := GetActiveObject( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH
MsgAlert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" )
oExcel := NIL
Application:lBusy := .F.
RETURN Nil
END
END
If !xDbfArticles( .F., AppData:cRuta, If( AppData:lArticles, AppData:cEmpCompartir, AppData:cCodiEmpresa ), cAliasArticles )
oExcel := NIL
Application:lBusy := .F.
RETURN Nil
EndIf
::oCheckbox1:lEnabled := ::oCbboxReferencia:lEnabled := ::oCbboxDescripcio:lEnabled := ::oCbboxImporte:lEnabled := ::oEditBtn1:lEnabled := .F.
::oButton1:OnClick := {|| lAbort := .T. }
::oButton1:cText := "Abortar"
ProcessMessages()
TRY
oExcel:WorkBooks():Open( ::oFileOpenDlg1:cFullFileName )
* oExcel:Worksheets("11111")
TRY
DELETE ALL FOR Field->CODI = " 1"
PACK
While !lAbort
n++
cL := oExcel:Range(::oCbboxReferencia:cText+AllTrim(Str(n))):Value
If Empty(cL)
MsgInfo( "Total Referències Azkoyen: "+AllTrim(Str(nNoves)) +;
" en " + AllTrim( Str( Seconds()-nTime ) ) + " seg." )
EXIT
EndIf
If n % 25 == 0
::oLabel1:cText := cL
ProcessMessages()
EndIf
(cAliasArticles)->(DbSeek(cL))
IF (cAliasArticles)->(Eof())
nNoves++
(cAliasArticles)->(DbAppend())
(cAliasArticles)->REFERENCIA:=cL
ENDIF
(cAliasArticles)->DESCRIPCIO := oExcel:Range(::oCbboxDescripcio:cText+AllTrim(Str(n))):Value
(cAliasArticles)->PC := oExcel:Range(::oCbboxImporte:cText+AllTrim(Str(n))):Value
(cAliasArticles)->CODI := " 1"
(cAliasArticles)->IVA := 1
* (cAliasArticles)->INC := 12
(cAliasArticles)->UNIT := 1
(cAliasArticles)->ENLLAC := "001"
EndDo
CATCH
MSGALERT( "S'ha produit un Error!!!" )
END
(cAliasArticles)->( DbCloseArea() )
oExcel:ActiveWorkbook:Close( .F. )
oExcel := NIL
CATCH
MSGALERT( "S'ha produit un Error!!!..." +Chr(10)+ "oExcel:WorkBooks():Open( " + ::oFileOpenDlg1:cFullFileName + ")" )
END
::oCheckbox1:lEnabled := ::oCbboxReferencia:lEnabled := ::oCbboxDescripcio:lEnabled := ::oCbboxImporte:lEnabled := ::oEditBtn1:lEnabled := .T.
::oButton1:OnClick := "Button1Click"
::oButton1:cText := "Button1"
Application:lBusy := .F.
RETURN Nil
//------------------------------------------------------------------------------
Re: Importar hoja de Excell
Publicado: Mar Jul 28, 2015 9:09 am
por jasm
Gracias Xevi.
Seguro que lo puedo adaptar.