Power Builder - Importar archivo Excel a Datawindow

 
Vista:

Importar archivo Excel a Datawindow

Publicado por Daniel Rodas (27 intervenciones) el 10/08/2010 20:32:33
Buenas tardes.

Esta es una aportacion, no una pregunta.

Voy mostrar como importar un archivo de excel a una datawindow y posteriormente ya procesar lo que hay en la DW, sin usar ODBC ni archivos CSV.

01. Crear una ventana con dos Datawindow, una de parametros (encabezado y otra de detalle, que puede ir invisible o no.)

02. Codificar en el evento buttonclicked de la dw_parametros lo siguiente:

integer li_Rtn

ids_xls_detalle = create datastore
ids_xls_detalle.dataobject = 'd_carga_archivo_top_prod'

Choose Case dwo.Name
Case 'b_abrir'
If GetFileOpenName("Elija el nombre del archivo Excel", &
is_PathFileName, is_FileName, "XLS", &
"Archivo (*.xls),*.xls,") = SUCCESS Then

li_Rtn = dw_detalle.ImportFile(is_FileName)
this.object.rutaarchivo[1] = is_PathFileName

Yield ()

Choose Case li_Rtn // Despliega mensaje de error en la carga del XLS.
Case 0
MessageBox('Error', 'Imposible leer archivo XLS.(El archivo tiene muchas filas o tiene un formato no válido.)', StopSign!)
Return FAILURE
Case -10 To -1
If li_Rtn = -9 Then
MessageBox('Error', 'Imposible leer archivo XLS. Posiblemente la estructura encontrada en el XLS no es la esperada.'+String(li_Rtn), StopSign!)
Return FAILURE
Else
MessageBox('Error', 'Imposible leer archivo XLS. '+String(li_Rtn), StopSign!)
Return FAILURE
End If
End Choose
End If
End Choose

02. Declarar en Instance Variables lo que haga falta

03. Para ser mas ordenado crear un proceso que llame una funcion, en mi caso nombre la funcion: of_procesa_excel()
Long li_total_filas, ll_i, ll_codigo_consejera
Integer il_pais, il_zona, il_estop_prod
string ls_nombre_consejera
decimal dl_volumen, dl_estrellas

//Verifica y genera la conexion hacia excel
io_archivo_importado= Create OleObject

// Se procede a conectar a Excel
If io_archivo_importado.ConnectToNewObject ('Excel.Application') < 0 Then
MessageBox ('Error','Imposible Conectarse a Excel')
Return -1
End If

//Se debe de abrir el archivo en excel

if isnull(is_PathFileName) or is_PathFileName='' then
return -1
end if

io_archivo_importado.workBooks.Open(is_PathFileName)

li_total_filas = 1509//dw_parm.object.no_linea[1]

dw_detalle.reset()
dw_detalle.dataobject = 'd_marca_archivo_top_prod'

//se procede a leer el archivo. Comenzara siempre de la fila 2, ya que en la fila 1 siempre iran los titulos
For ll_i=2 To li_total_filas

//Vamos a utilizar el Workbook No. 1 y la WorkSheet No. 1)
If isnull(io_archivo_importado.Application.workbooks(1).worksheets(1).Cells(ll_i,1).Value ) Then
//Return -1
Else
il_pais = integer(io_archivo_importado.Application.workbooks(1).worksheets(1).Cells(ll_i,1).Value)
il_zona = integer(io_archivo_importado.Application.workbooks(1).worksheets(1).Cells(ll_i,2).Value)
ll_codigo_consejera = long(io_archivo_importado.Application.workbooks(1).worksheets(1).Cells(ll_i,3).Value)
ls_nombre_consejera = string(io_archivo_importado.Application.workbooks(1).worksheets(1).Cells(ll_i,4).Value)

dw_detalle.settransobject(SQLCA)

dw_detalle.insertrow(0)

dw_detalle.object.pais[ll_i - 1] = il_pais
dw_detalle.object.zona[ll_i - 1] = il_zona
dw_detalle.object.code[ll_i - 1] = ll_codigo_consejera
dw_detalle.object.nombre[ll_i - 1] = ls_nombre_consejera
dw_detalle.object.volumentop[ll_i - 1] = CERO//dl_volumen
dw_detalle.object.estrellastop[ll_i - 1] = CERO//dl_estrellas
dw_detalle.object.es_top_prod[ll_i - 1] = UNO//il_estop_prod

st_mensajes.text = 'Importando consejera: ' + string(ll_codigo_consejera) + ' '+ls_nombre_consejera+ ' Zona: ' + string(il_zona) + ' Registro No. ' + string (ll_i - 1)
End If

Next

io_archivo_importado.Application.ActiveWorkbook.Close()

io_archivo_importado.DisconnectObject()

Destroy io_archivo_importado

of_act_cons_top() //Funcion que hace proceso despues de importar el archivo Excel.

return 1

04. Crear otra funcion para ejecutar el proceso que necesiten hacer

NOTA: Este proceso es mucho mas rapido que con ODBC y no necesitan instalar nada en las maquina cliente. Funciona con archivos XLS, XLSX.

Espero les sirva
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

RE:Importar archivo Excel a Datawindow

Publicado por eduardo.v (34 intervenciones) el 10/08/2010 22:00:24
GRACIAS lo voy a probar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Importar archivo Excel a Datawindow

Publicado por Daniel Rodas (27 intervenciones) el 10/08/2010 22:04:39
Lo unico que tienen que averiguar(no he podido encontrarlo) es como saber dinamicamente el numero de filas que trae el archivo Excel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Importar archivo Excel a Datawindow

Publicado por Juan Felipe Ocampo (2 intervenciones) el 24/02/2017 16:15:48
Solo valida que la columna no es nula asi recorre todas las columnas, ya que no hay manera de consultar el numero de columnas que tiene el archivo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Importar archivo Excel a Datawindow

Publicado por Juan Figueroa (2 intervenciones) el 20/06/2012 21:08:20
HOLA DANIEL...

TENGO UN PROBLEMA CON LA SOLUCION QUE DISTE.

La función 'ImportFile' para la datawindows no acepta la extensión 'XLS'.

¿Cómo haces para que te funcione?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Importar archivo Excel a Datawindow

Publicado por Roberto (3 intervenciones) el 23/01/2014 23:36:54
Gracias por la ayuda, tu ejemplo me ayudo en este tema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Importar archivo Excel a Datawindow

Publicado por Felipe (4 intervenciones) el 03/10/2020 01:04:23
Una consulta porque no reconoce SUCCESS y FAILURE, que son variables? o funciones especiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar