Co-creadores de Xailer. Especialistas en software de gestión para la PYME.

Ejemplo de importación de apuntes con Excel

/*

Ejemplo de importación de Excel: Importación de apuntes simples
 
El proceso espera recibir a partir de la fila 6, columna A todos los apuntes
con el siguiente formato:
 
Diario | Fecha | Cuenta Debe | Cuenta Haber | Descripción | Importe
 
Utilice el documento Excel1.xls para comprobar su funcionamiento
*/
 
FUNCTION ProcMain()
 
   LOCAL oExcel, oHoja
   LOCAL cFichero
   LOCAL nFor, nMax
 
IF !MsgYesNo( "Asegurese de que esta activada la empresa de prueba, ¿Desea continuar?" )
RETURN NIL
ENDIF
 
cFichero := FileOpenDlg(nil, "Seleccione fichero Excel a importar",,;
                           "Ficheros de excel (*.xls,*.xlsx)|*.xls;*.xlsx")
 
   IF !File( cFichero )
      Msginfo( "No ha seleccionado ningún fichero. Proceso abortado." )
      RETURN NIL
   ENDIF
 
   oExcel := CreateObject( "Excel.Application" )
 
   oExcel:WorkBooks:Open( cFichero )
   oHoja := oExcel:Get( "ActiveSheet" )
   nMax  := oHoja:UsedRange:Rows:Count()
 
   Scroll()
 
   ? "Importación de apuntes simples desde Excel"
   ? ""
 
   FOR nFor := 6 TO nMax
      IF !CreaApunte( oHoja, nFor )
         EXIT
      ENDIF
   NEXT
 
   oExcel:WorkBooks:Close()
   oExcel:Quit()
 
   oHoja  := NIL
   oExcel := NIL
 
   ? "Proceso de importación terminado."
 
RETURN NIL
 
//----------------------------------------------------------------------------
 
STATIC FUNCTION CreaApunte( oHoja, nFila )
 
   LOCAL cDiario, cDebe, cHaber, cDescrip
   LOCAL dFecha
   LOCAL nImporte
   LOCAL lOk
 
   WITH OBJECT oHoja
      cDiario  := Str( :Cells(nFila, 1):Value, 1 )
      dFecha   := TtoD( :Cells(nFila, 2):Value )
      cDebe    := Str( :Cells(nFila, 3):Value, 10 )
      cHaber   := Str( :Cells(nFila, 4):Value, 10 )
      cDescrip := :Cells(nFila, 5):Value
      nImporte := :Cells(nFila, 6):Value
   END WITH
 
   WITH OBJECT oConta:NuevoApunte()
      :cDiario  := cDiario
      :dFecha   := dFecha
      WITH OBJECT :oDataset
         :FastAddNew()
         :Cuenta  := cDebe
         :Descrip := cDescrip
         :Tipo    := "D"
         :Importe := nImporte
         :FastUpdate()
         :FastAddNew()
         :Cuenta  := cHaber
         :Descrip := cDescrip
         :Tipo    := "H"
         :Importe := nImporte
         :FastUpdate()
      END WITH
      lOk := :GrabaAsiento()
   END WITH
 
   IF lOk
      ? "Importado apunte de fila: " + Str( nFila, 6 )
   ELSE
      ? "No se pudo importar la fila: " + Str( nFila, 6 )
   ENDIF 
 
RETURN lOk