Power Builder - Para lorihen.. Leer datos de varios libros de exce

 
Vista:
Imágen de perfil de antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Para lorihen.. Leer datos de varios libros de exce

Publicado por antonio (1271 intervenciones) el 31/03/2008 06:28:03
Hola lorihen:

Este es mi proceso, espero te sirva...

/* importa los datos de lo_excel al Datawindow */
OLEObject lo_excel
DataStore ldst_empresas
Integer li_RetValue, li_rtn ,li_dia_fin_mes
Boolean lb_graba,lb_continua
date ld_fecha_alta
Long ll_cnt,r,c,ll_row,ll_control,ll_numagencia,i_len,ll_len
long ll_registro,ll_tomados,ll_Count,i_i,ll_empresa
integer li_cantidad,li_axo,li_mes,li_cant_existente,ll_moneda,li_hoja
string ls_name
string ls_clave,ls_nombre,ls_status,ls_rfc,ls_cve_depto,ls_imss,ls_fecha_alta
string ls_fecha_baja,ls_clasifica,ls_curp,ls_tipo_salario,ls_forma_pago
string ls_calle,ls_colonia,ls_ciudad,ls_ent_federativa,ls_cp,ls_telefono
string ls_sexo,ls_padre,ls_madre,ls_bco_nomina

date ld_femision, ld_fdescargo,ld_fecha_final
dec {4} ldc_tcambio

OpenWithParm ( w_msg5,'Abriendo Archivo de Excel...' )
lo_excel = create OLEObject
li_rtn = lo_excel.ConnectToNewObject("excel.application")

IF li_rtn <> 0 THEN
Close ( w_msg5 )
lo_excel.Application.Quit()
GarbageCollect ( )
lo_excel.DisConnectObject()
DESTROY lo_excel;
MessageBox('Proceso Detenido','No puedo abrir a Excel')
return false;
end if

/* Aqui obtengo una tabla donde guardo los nombres de las empresas
estas empresas son el mismo nombre exacto de como vienen en los libros de excel
cada registro tiene un numero que corresponde al numero de libro que deseo leer
los datos, este numero esta en un campo llamado "control" */

ldst_empresas = Create Datastore
ldst_empresas.DataObject = 'dw_empresas_importadas2'
SetTransObject ( ldst_empresas, sqlca )
ll_Count = Retrieve ( ldst_empresas )

lo_excel.WorkBooks.Open( vr_archivo )
lo_excel.Application.Visible = false

/w_msg5.hpb_barra2.MaxPosition = ll_Count
w_msg5.hpb_barra2.Position = 0

* esto es solo porque no se cuantos registos sean y como una probabilidad muy grande
colo el numero 20000, para que recorra hasta 20,000 registros por hoja */

w_msg5.hpb_barra.MaxPosition = 20000
w_msg5.hpb_barra.Position = 0

for i_i = 1 to ll_Count
li_hoja = GetItemNumber ( ldst_empresas,i_i,'control' )
ls_name = Trim ( GetItemString ( ldst_empresas,i_i,'empresa' ) )
/* determina el numero de la empresa */
f_numero_empresa ( ls_name,ll_empresa )
lo_excel.worksheets(li_hoja).Activate
w_msg5.st_1.text = 'Importando datos de '+ls_name+'...'

ll_cnt = 2; c = 1

For r = ll_cnt to 20000
c = 1

ls_clave = String ( lo_excel.cells[r,c].value )

if Mid ( Upper ( ls_clave) ,1,3 )= 'FIN' or &
Mid ( Upper ( ls_clave) ,1,3 )= "'FIN" then
exit
end if


c ++
ls_nombre = String ( lo_excel.cells[r,c].value )
c ++
ls_status = String ( lo_excel.cells[r,c].value )
c ++
ls_rfc = String ( lo_excel.cells[r,c].value )
c ++
ls_cve_depto = String ( lo_excel.cells[r,c].value )
c ++
ls_imss = String ( lo_excel.cells[r,c].value )
c ++
ls_fecha_alta = String ( lo_excel.cells[r,c].value )
ld_fecha_alta = Date ( ls_fecha_alta)
c ++
ls_fecha_baja = String ( lo_excel.cells[r,c].value )
c ++
ls_clasifica = String ( lo_excel.cells[r,c].value )
c ++
ls_curp = String ( lo_excel.cells[r,c].value )
c ++
ls_tipo_salario = String ( lo_excel.cells[r,c].value )
c ++
ls_forma_pago = String ( lo_excel.cells[r,c].value )
c ++
ls_calle = String ( lo_excel.cells[r,c].value )
c ++
ls_colonia = String ( lo_excel.cells[r,c].value )
c ++
ls_ciudad = String ( lo_excel.cells[r,c].value )
c ++
ls_ent_federativa = String ( lo_excel.cells[r,c].value )
c ++
ls_cp = String ( lo_excel.cells[r,c].value )
c ++
ls_telefono = String ( lo_excel.cells[r,c].value )
c ++
ls_sexo = String ( lo_excel.cells[r,c].value )
c ++
ls_padre = String ( lo_excel.cells[r,c].value )
c ++
ls_madre = String ( lo_excel.cells[r,c].value )
c ++
ls_bco_nomina = String ( lo_excel.cells[r,c].value )

/* Verifica si existe el empleado */
if Not f_existe_empleado ( ls_nombre,ll_control ) then
/* Registra al empleado */
f_registra_empleado (ls_clave,ls_nombre,ls_status,ls_rfc,ls_cve_depto,ls_imss,ls_fecha_alta,&
ls_fecha_baja,ls_clasifica,ls_curp,ls_tipo_salario,ls_forma_pago,ls_calle,ls_colonia,&
ls_ciudad,ls_ent_federativa,ls_cp,ls_telefono,ls_sexo,ls_padre,ls_madre,ls_bco_nomina,ll_empresa)
else
end if
w_msg5.hpb_barra.StepIt()
next
w_msg5.hpb_barra2.StepIt()
Next

w_msg5.st_1.text = 'Cerrando Archivo de Excel...'
lo_excel.Application.Quit()
GarbageCollect ( )
lo_excel.DisConnectObject()
DESTROY lo_excel;
Destroy ldst_empresas;

Close ( w_msg5 )
return true;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder