Oracle forms

Situacion: Oracle developer 10g . Exportación a Excel desde la parte Cliente. No me me vale CSV por que la excel debe llevar un titulo, unos iconos con un formato específico en la cabecera de la misma ( es decir una excel con diseño ).
He comprobado que la 10g tiene instalado la librería webutil y jacob. He instalado en la BD el paquete webutil. Programo un form al cual le agrego la librería webutil y los objetos ( olb) de webutil; codifico con OLE2 para que escriba linea a linea en una excel los datos del cursor, luego aplico formato . Y ejecuto el form desde la parte del cliente y me se abre el microsoft excel en el servidor.
Pero esto no me sirve, por que deseo que se ejecute desde el cliente para que lo pueda guardar en su PC.
¿No existe otra forma de hacerlo más fácil, es decir la codificación debe ser con OLE2 en el form y linea a linea de la excel.?
¿Por qué no me funciona en la parte del cliente?
Nota: si lo ejecuto desde desarrollo en mi ordenador si se ejecuta en local. Pero al enlazarlo con la aplicación y ejecutarlo desde el servidor se ejecuta la excel en el servidor.
Gracias. Y si necesitas ayuda, no dudes algo también sabemos.

2 respuestas

Respuesta
1
Tienes que utilizar CLIENT_OLE2 (parte cliente) y no (OLE2) que es parte servidor.
Estaras utilizando : APPLICATION:=OLE2.CREATE_OBJ('EXCEL.APPLICATION');
y hay que utilizar : application := Client_OLE2.create_obj('Excel.Application');
Que esta es la que sale en el cliente.
De todas maneras te recomiendo utilizar un report y en REPORT_DESFORMAT ponerle SPREADSHEET y te genera un excel y te lo abre con el navegador, con todos los formatos/colores /letras, etc que has definido en el Report.
application := client_ole2.create_obj('excel.application');
client_ole2.set_property(application,'visible','true');
workbooks   := client_ole2.get_obj_property (application, 'workbooks');
workbook := client_ole2.get_obj_property (workbooks,   'add');
worksheets  := client_ole2.get_obj_property (workbook,'worksheets');
args := client_ole2.create_arglist;
client_ole2.add_arg (args, 1);
memory.m_worksheet := client_ole2.get_obj_property(workbook, 'worksheets', args);
client_ole2.destroy_arglist (args);
args := client_ole2.create_arglist;
client_ole2.add_arg (args, 1);  --  column number
cell := client_ole2.get_obj_property (memory.m_worksheet, 'columns', args);
client_ole2.destroy_arglist (args);
client_ole2.set_property (cell, 'columnwidth', 14);
client_ole2.release_obj (cell);
args := client_ole2.create_arglist;
client_ole2.add_arg (args, 2);  --  column number
cell := client_ole2.get_obj_property (memory.m_worksheet, 'columns', args);
client_ole2.destroy_arglist (args);
client_ole2.set_property (cell, 'columnwidth', 14);
client_ole2.set_property (cell, 'horizontalalignment', -4152); --xlright
client_ole2.release_obj (cell);
memory.m_row := 1;
--  formatear_titulos (1, 'precintos', memory.m_worksheet,1);
--  formatear_titulos(2, 'provincia',   memory.m_worksheet,1);
memory.m_row := memory.m_row + 2;
for mov in c_movimientos loop
formatear_titulos (1,mov.codigo_movimiento , memory.m_worksheet,5,v_color,'texto');
formatear_titulos (2,mov.fecha_mov, memory.m_worksheet,5,v_color);
memory.m_row := memory.m_row + 1;
end loop;
error:
oracle.forms.webutil.ole.functions bean not found. client_ole2.create_obj not work
Muchas gracias.
Prueba con un código pequeño:
Declare
application Client_OLE2.Obj_Type;
workbooks Client_OLE2.Obj_Type;
workbook Client_OLE2.Obj_Type;
worksheets Client_OLE2.Obj_Type;
worksheet Client_OLE2.Obj_Type;
args Client_OLE2.List_Type;
cell ole2.Obj_Type;
j INTEGER;
k INTEGER;
begin
application := Client_OLE2.create_obj('Excel.Application');
CLIENT_OLE2.SET_PROPERTY(APPLICATION, 'VISIBLE', true);
workbooks := Client_OLE2.Get_Obj_Property(application, 'Workbooks');
workbook := Client_OLE2.Invoke_Obj(workbooks, 'Add');
worksheets := Client_OLE2.Get_Obj_Property(workbook, 'Worksheets');
worksheet := Client_OLE2.Invoke_Obj(worksheets, 'Add');
Client_OLE2.Release_Obj(worksheet);
Client_OLE2.Release_Obj(worksheets);
/* Save the Excel file created */
args := Client_OLE2.Create_Arglist;
Client_OLE2.Add_Arg(args,'C:\prueba.xls');
Client_OLE2.Invoke(workbook, 'SaveAs', args);
Client_OLE2.Destroy_Arglist(args);
/* release workbook */
Client_OLE2.Release_Obj(workbook);
Client_OLE2.Release_Obj(workbooks);
/* Release application */
Client_OLE2.Invoke(application, 'Quit');
Client_OLE2.Release_Obj(application);
/* Display successfull message */
message('File successfully saved as ' || l_filename);
END;
Si ta da error, debes tener instalado mal el webutil.
No funciona ninguna de las opciones. Poniendo en REPORT_DESFORMAT SPREADSHEET, sale una Excel pero con un aspecto horrible, impresentable!
Desesperada me hallo!
Tienes que hacer el report lo más sencillo posible para que salga en excel bien. Con las columnas y los anchos iguales, sin ser muy anchos ni altas las celdas, suele salir bien.
Si te falla el client_ole2, debes tener algún problema en la configuración del Webutil.
Lo que también puedes hacer es hacerlo con el antiguo ole2 y grabarlo en el servidor en la capeta publicada htdocs y luego abrirlo con show document.
He estado un poco liada, pero me pongo a ello y te digo!
Saludos
Lo que también puedes hacer es hacerlo con el antiguo ole2 y grabarlo en el servidor en la capeta publicada htdocs y luego abrirlo con show document.
¿Y esto cómo se hace? donde se pone el show document?
Generas el excel en la carpeta donde publica el servidor y lo abres con el comando show_document, que abre una ventana aparte para abrir el fichero que quieres del servidor siempre que este en la carpeta publicada y generalmente en el puerto 8888:
Ejemplo:
web.show_document('http://ip/ del servidor:8888/prueba.xls' , '_blank');
Respuesta

Buena información! ¿De dónde puedo conseguir el webUtil para volver a instalarlo?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas