Exportar datos de Excel a Tabla DBF

Bases de datos

Miguel Rodriguezel 4 sep.

Exportar datos de Excel DBF

Tengo una hoja en excel donde almaceno datos de pacientes que se atienden en un Centro de salud.

Estos registros se actualizan semanalmente y lo que quiero es exportar todo los registro que se actualizaron solo en el mes actual partiendo de un campo en especifico llamado (Mes de Atención) que indica el mes en el fue atendido el paciente.

Esto quiere decir que el resto de los meses que hay en la tabla de excel ya no se exporten dado a que no corresponden al mes actual.

Ejemplo: Compos en Excel

Código, nombrepaciente, edad, sexo, mes atención, medicamentos.

Quiero una crear rutina que me jale solo la información que corresponda al mes actual en este caso estamos en Septiembre solo los registros que se modificaron con ese mes. Este campo esta en la fila G5 de Excel

Lo otro es que también verifique que si el código no existe en la tabla dbf crear el paciente y si ya existe solo actualizar los otros datos del paciente

1

1 respuesta

Respuesta
1

Te daré la pista de una de las alternativas para lograr lo que necesitas..

cArchivo = Getfile("XLS")
If Empty(cArchivo)
    Return
Endif
oExcel=Createobject("Excel.Application")
oExcel.Workbooks.Open(cArchivo)
oExcel.Visible       = .T.
oExcel.DisplayAlerts = .T.
cLineas = oExcel.ActiveCell.SpecialCells(11).Address()
nLineas = Val(Substr(cLineas,Rat("$",cLineas)+1))
For nX=5 To nLineas
    oExcel.Range("G"+Transform(nX)).Select
    nMes = Val(oExcel.ActiveCell.Formula)
    ** Código, nombrepaciente, edad, sexo, mes atención, medicamentos
    if nMes=9
        oExcel.Range("A"+Transform(nX)).Select
        cCodigo   = oExcel.ActiveCell.Formula
        oExcel.Range("B"+Transform(nX)).Select
        cPaciente = oExcel.ActiveCell.Formula
        oExcel.Range("C"+Transform(nX)).Select
        nEdad     = Val(oExcel.ActiveCell.Formula)
        oExcel.Range("D"+Transform(nX)).Select
        cSexo     = oExcel.ActiveCell.Formula
        oExcel.Range("E"+Transform(nX)).Select
        cMedic    = oExcel.ActiveCell.Formula
    endif
Next

Explicación: Primero seleccionas el Excel, activas la aplicación que abrirá o no (simplemente si no quieres que se haga visible la hoja Excel, solo quitas la línea "oExcel.Visible = .T."); luego comienza a leer línea a línea hasta hallar el final.

En el bucle FOR NEXT parte de la Fila 5 que mencionas es donde está el mes, toma el valor del Rango Gn y verifica que sea el més 9, si es correcto leerá todas las columnas An a En y lo cargará en variables cCodigo, cPaciente, nEdad, cSexo y cMedic (Considera que todo lo que obtenga del Excel lo tomará como carácter, así que si lo quieres de otro tipo de variables debes convertirlo).

Si no funciona es que tu Excel tiene un formato diferente al que me imagino, si es así hazme una copia de algunas líneas para darte mejores detalles. Éxitos!.

Gracias SysGen, probare y luego te comento

Saludos SysGen

Gracias por tu Colaboracion.

Tengo dos Problemillas con la Rutina que me enviaste

Antes que nada e creado una tabla llamada prueba con los datos de excel, esto para probar la funcionalidad de la rutina.

pero me tope con dos cosas:

1. la rutina si funciona, pero me jala los otros meses y no solo el mes nueve(Numero del mes Actual).

2. Lo otro es que me copia varias veses un mismo paciente en la tabla

te envio unas imagenes de las datos en excel y los datos de la tabla

tambien pongo el codigo por si acaso hay algo que no estoy haciendo bien.

saludos y espero tu respuesta

https://drive.google.com/open?id=0BwIsZTkuQ0H4UGxya3E4LU4wYmRWVnNiUGYyN0pFTk1KekFv Imagen de Tabla

https://drive.google.com/open?id=0BwIsZTkuQ0H4MThnMk9vUUJpMUtaMGsyeFpmRWR2cWtzWjZN  Imagen de Excel

Codigo

If Empty(cArchivo)
Return
Endif
oExcel=Createobject("Excel.Application")
oExcel.Workbooks.Open(cArchivo)
oExcel.Visible = .T.
oExcel.DisplayAlerts = .T.
cLineas = oExcel.ActiveCell.SpecialCells(11).Address()
nLineas = Val(Substr(cLineas,Rat("$",cLineas)+1))
For nX=2 To nLineas
oExcel.Range("G"+Transform(nX)).Select
nMes = Val(oExcel.ActiveCell.Formula)
** Código, nombrepaciente, edad, sexo, mes atención, medicamentos
if nMes=9
oExcel.Range("A"+Transform(nX)).Select
cCodigo = oExcel.ActiveCell.Formula
oExcel.Range("B"+Transform(nX)).Select
cPaciente = oExcel.ActiveCell.Formula
oExcel.Range("C"+Transform(nX)).Select
nEdad = Val(oExcel.ActiveCell.Formula)
oExcel.Range("D"+Transform(nX)).Select
cSexo = oExcel.ActiveCell.Formula
oExcel.Range("E"+Transform(nX)).Select
cMedic = oExcel.ActiveCell.Formula
oExcel.Range("F"+Transform(nX)).Select
nCanti = VAL(oExcel.ActiveCell.Formula)
oExcel.Range("G"+Transform(nX)).Select
nMes = VAL(oExcel.ActiveCell.Formula)
ENDIF
IF !USED("Prueba")
USE Prueba IN 0 EXCLUSIVE
ENDIF
SELECT Prueba
APPEND BLANK
replace codigo WITH VAL(cCodigo)
replace nom_paciente WITH cPaciente
replace edad WITH nEdad
replace Sexo WITH cSexo
replace Medicamento WITH cMedic
replace cantidad WITH nMes
NEXT

WAIT windows "Registros Almacenados" TIMEOUT .5
thisform.Release()

SELECT Prueba
BROWSE NORMAL

Prueba con éste código

cArchivo = Getfile("XLS")
If Empty(cArchivo)
    Return
Endif
oExcel=Createobject("Excel.Application")
oExcel.Workbooks.Open(cArchivo)
oExcel.Visible = .T.
oExcel.DisplayAlerts = .T.
cLineas = oExcel.ActiveCell.SpecialCells(11).Address()
nLineas = Val(Substr(cLineas,Rat("$",cLineas)+1))
For nX=2 To nLineas
    oExcel.Range("G"+Transform(nX)).Select
    nMes = Val(oExcel.ActiveCell.Formula)
    ** Código, nombrepaciente, edad, sexo, mes atención, medicamentos
    If nMes=9
        oExcel.Range("A"+Transform(nX)).Select
        nCodigo = Val(oExcel.ActiveCell.Formula)
        oExcel.Range("B"+Transform(nX)).Select
        cPaciente = oExcel.ActiveCell.Formula
        oExcel.Range("C"+Transform(nX)).Select
        nEdad = Val(oExcel.ActiveCell.Formula)
        oExcel.Range("D"+Transform(nX)).Select
        cSexo = oExcel.ActiveCell.Formula
        oExcel.Range("E"+Transform(nX)).Select
        cMedic = oExcel.ActiveCell.Formula
        oExcel.Range("F"+Transform(nX)).Select
        nCanti = Val(oExcel.ActiveCell.Formula)
        oExcel.Range("G"+Transform(nX)).Select
        nMes = Val(oExcel.ActiveCell.Formula)
        If !Used("Prueba")
            Use Prueba In 0 Exclusive
        Endif
        Select Prueba
        Append Blank
        Replace Codigo       With nCodigo
        Replace nom_paciente With cPaciente
        Replace edad         With nEdad
        Replace sexo         With cSexo
        Replace Medicamento  With cMedic
        Replace Cantidad     With nMes
    Endif
Next
Wait Windows "Registros Almacenados" Timeout .5
Thisform. Release()
Select Prueba
Browse Normal

Saludos mi estimado amigo, gracias infinita por tu valioso tiempo.

E resuelto el problema gracias a ti, solo que el objeto excel aun queda abierto

En que parte debo de cerrarlo para que no interrumpir la carga de los archivos

Gracias nuevamente 

Me alegro mucho que haya servido.

Para evitar que se abra el libro solo quita la siguiente línea

oExcel.Visible       = .T.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas