como importar tabla de excel a vfp

2,465 views
Skip to first unread message

Marcelo Barberis

unread,
Feb 4, 2011, 10:55:20 PM2/4/11
to publicesvfoxpro
Estimados amigos
Tengo este problema recien nomas, hace un tiempo atras programe un sistema en vfp 6 y despues lo pase a 7 y alli lo deje y lo puse a funcionar en una libreria y entre las opciones inclui como importar la tabla de productos de excel a mi sistema, pero como nunca lo utilizaron no tuve llamados extraños, pero ahora esta libreria lo hizo funcionar y al toque me llamaron porque cuando ejecutan esta opcion el sistema deja de funcionar, se cuelga o se cierra, ellos estan trabajando ahora en win7. El archivo de excel lo hice grabar como 97-2003 por lo que lleva extencion .xls, pero ellos trabajan con office 2007 y yo en mi pc utilizo office 2010, sera que ese sea el problema?, y otro problema que me aparecio despues de esto es que cuando ingreso al sistema y voy a la opcion de lo productos me genera errores, como que el indice esta dañado y que lo borre y vuelva a crearlo o asi otros tambien. Adjunto una imagen del error que me aparece despues de elegir el archivo a importar, posterior quiero ingresar al modulo de los productos y me genera error de indices, y tambien si deseo abrir una tabla de las involucradas en la importacion me genera errores.

Mi consulta es esta: Alguien puede ayudarme a solucionar este problema?
Alguien trabajo con este tipo de opciones y no haya tenido problemas cuando ejecuto el procedimiento para importar datos de excel a vfp y que le funciono correctamente que pueda colaborarme con el codigo, se lo agradeceria mucho.

El codigo que estoy utilizando es este, lo utilizo mediante una opcion de boton de comamdo en un form:

ruta = GETFILE('XLS', 'Hoja de Calculo (Formato XLS de Excel)', 'Abrir', 1)
 SET DEFAULT TO (gcdirant)
 IF ruta==""
    RETURN
 ENDIF
 IF thisform.mem_agregar_productos_excel.value==0
    aviso = "Esta acción Eliminará todo los registros que tuviera la tabla productos"
 ELSE
    aviso = "Productos se Agregarán a la lista ya Existente. Deberá verificar manualmente que no existan códigos repetidos, de lo contrario se podrían generar errores de lógica en el programa"
 ENDIF
 r = MESSAGEBOX(aviso+CHR(13)+"Proceder con la Importación desde Excel(S/N)", 036, "Importación de Lista de Productos")
 IF r<>6
    RETURN
 ENDIF
 SET PATH TO DATA
 IF thisform.mem_agregar_productos_excel.value==0
    SELECT kardex
    ZAP
    SELECT productos
    ZAP
    idmax = 0
    SELECT kardex
    PACK
    SELECT productos
    PACK
 ENDIF
 SELECT productos
 CALCULATE MAX(VAL(idproducto)) TO idmax
 ruta_comillas = "'"+ruta+"'"
 SELECT 101
 IMPORT FROM &ruta_comillas TYPE XL5 SHEET "Hoja1"   
 DELETE ALL FOR ISBLANK(a)
 SET FULLPATH OFF
 nome = "'"+SUBSTR(DBF(), 3)+"'"
 SET FULLPATH ON
 USE
 COPY FILE &NOME TO table1.DBF
 USE
 DELETE FILE &NOME
 SELECT 888
 USE TABLE1
 GOTO 1
 DELETE
 PACK
 GOTO 1
 ct = idmax+1
 SELECT productos
 GOTO BOTTOM
 ult = RECNO()
 GOTO TOP
 SELECT table1
 SCAN
    SELECT productos
    APPEND BLANK
    REPLACE idproducto WITH ALLTRIM(STR(ct))
    REPLACE codigo WITH ALLTRIM(table1.b)
    REPLACE articulo WITH RTRIM(table1.c)
    REPLACE clase WITH RTRIM(table1.d)
    REPLACE marca WITH RTRIM(table1.e)
    REPLACE unimedida WITH RTRIM(table1.f)
    REPLACE moneda WITH RTRIM(table1.g)
    REPLACE precio_cos WITH VAL(table1.h)
    REPLACE precio_con WITH VAL(table1.i)
    REPLACE precio_may1 WITH VAL(table1.j)
    REPLACE precio_may2 WITH VAL(table1.k)
    REPLACE precio_may3 WITH VAL(table1.l)
    REPLACE stock WITH VAL(table1.m)
    REPLACE tipo WITH 'P'
    ct = ct+1
    SELECT table1
 ENDSCAN
 SELECT productos
 REPLACE unimedida WITH "UNIDAD" ALL FOR EMPTY(unimedida)
 SELECT productos
 IF thisform.mem_agregar_productos_excel.value==0
    GOTO TOP
 ELSE
    GOTO ult+1
 ENDIF
 DO WHILE .T.
    ip = productos.idproducto
    SELECT kardex
    FOR x = 1 TO config.cnt_almacenes
       APPEND BLANK
       REPLACE responsable WITH vusuario
       REPLACE documento WITH "APERTURA"
       REPLACE idproducto WITH ip
       REPLACE almacen WITH x
       REPLACE responsable WITH vusuario
       REPLACE fecha WITH DATE()
       IF x=valmacen
          REPLACE entrada WITH productos.stock
       ELSE
          REPLACE entrada WITH 0
       ENDIF
       BLANK FIELDS salida
       BLANK FIELDS idfactura
       REPLACE precio WITH productos.precio_cos
       REPLACE valor_vta WITH precio*entrada
       REPLACE stock_ant WITH 0
       REPLACE stock_act WITH entrada
       REPLACE val_existe WITH valor_vta
    ENDFOR
    SELECT productos
    SKIP
    IF EOF()
       EXIT
    ENDIF
 ENDDO
 = MESSAGEBOX("Importación desde Excel ha sido ejecutada con Exito", 64, "SIF 9.2")
 SELECT table1
 USE
 DELETE FILE TABLE1.DBF
problema.gif

Jairo Miranda

unread,
Feb 7, 2011, 2:16:49 PM2/7/11
to publice...@googlegroups.com

Buenas tardes,

El programa esta bien..  pero yo utilizo la automatización  así :

 

LOCAL siexp

siexp = MESSAGEBOX(" Por favor verifique formato de hoja de calculo en la hoja EN FORMATO EXCEL 5.0/95 localizada en su directorio, Desea realmente exportar datos desde una hoja de calculo en excel?, solo se acepta formato de excel 5.0/95 ",32+1, "!!!!Atención......!!!")

IF siexp = 1

*Driver ODBC de Excel.

cFileXLS = Getfile("XLS")

 

IF !FILE(cFileXLS)

   =MESSAGEBOX("No se presentó selección de archivo .... ",16,"!!! Atención....")

   RETURN

ENDIF

cConn = "Driver={Microsoft Excel Driver (*.xls)};"+;

        "DriverId=790;Dbq="+cFileXLS+;

        ";DefaultDir="+Justpath(cFileXLS)+";"

 

nH = SqlStringConnect(cConn)

 

SQLTables(nH,"", "SheetNames")

 

    cTabla = Trim(SheetNames.Table_Name)

    cCursor = Chrtran(cTabla," $","_")

    SQLExec(nH,'Select * From ['+cTabla+']',cCursor)

    Select (cCursor)

 

WAIT WINDOW  " Archivo Seleccionado Ok..... "  at 20, 40 timeout 1

 

Select (cCursor)

GO TOP

Brow

·         Luego llevo cada campo a la tabla

 

Pero solo me funciona con excel 5.0/95 así que siempre debo guardar las tablas en una versión anterior

 

Espero que el comentario y el código te sirvan

 

jairo

Reply all
Reply to author
Forward
0 new messages