Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

Power Builder - Importar archivo Excel a Datawindow

  Imprimir  
Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:

Importar archivo Excel a Datawindow

Autor:Daniel Rodas (27 intervenciones)
Fecha: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
Responder
información
Otras secciones de LWP con contenido similar...
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Importar archivo Excel a Datawindow

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

RE:Importar archivo Excel a Datawindow

Autor:Daniel Rodas (27 intervenciones)
Fecha: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.
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

Importar archivo Excel a Datawindow

Autor:Juan Figueroa (2 intervenciones)
Fecha: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?
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

Importar archivo Excel a Datawindow

Autor:Roberto (2 intervenciones)
Fecha:23/01/2014 23:36:54
Gracias por la ayuda, tu ejemplo me ayudo en este tema
Comentar