Forms y Excel como manejarlos?

gustavoascencio_py
26 de Julio del 2004
deseo conocer como se puede manejar desde Developer 6 objetos de OLE (para Excel) y como desde un report acceder a las opciones de graficos de las planillas Excel. Muchas Gracias. (si tienen algún formato de procedimiento, mucho mejor;))

Rodolfo Reyes
26 de Julio del 2004
Este esta es la definición de un paquete que sirve para hacer crear documentos de Excel desde Formas por medio de OLE2.

--Definición del Paquete
PACKAGE EXCEL IS
PROCEDURE ExcelAbrir;
PROCEDURE ExcelEscribir(Fila number, Columna number,Texto Varchar2);
PROCEDURE ExcelCierra ;
END;

--Cuerpo del paquete
PACKAGE BODY EXCEL IS
AppID PLS_INTEGER;
in_file Text_IO.File_Type;
filename VARCHAR2(130);
xlApp OLE2.OBJ_TYPE;
xlBooks OLE2.OBJ_TYPE;
xlBook OLE2.OBJ_TYPE;
xlSheets OLE2.OBJ_TYPE;
xlSheet OLE2.OBJ_TYPE;
xlCell OLE2.OBJ_TYPE;
arg_list OLE2.LIST_TYPE;

PROCEDURE ExcelAbrir IS
begin
xlApp := OLE2.CREATE_OBJ( 'Excel.Application');
xlBooks := OLE2.GET_OBJ_PROPERTY(xlApp,'Workbooks');
xlBook := OLE2.GET_OBJ_PROPERTY( xlBooks,'Add' );
xlSheets := OLE2.GET_OBJ_PROPERTY(xlBook,'Worksheets' );
xlSheet := OLE2.GET_OBJ_PROPERTY( xlSheets,'Add' );
end;

PROCEDURE ExcelEscribir(Fila number, Columna number, Texto Varchar2) is
begin
arg_list := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG( arg_list,Fila );
OLE2.ADD_ARG( arg_list,Columna );
xlCell := OLE2.GET_OBJ_PROPERTY(xlSheet,'Cells',arg_list );
OLE2.DESTROY_ARGLIST( arg_list );
OLE2.SET_PROPERTY( xlCell,'Value',Texto);
OLE2.RELEASE_OBJ( xlCell );
end;

PROCEDURE ExcelCierra IS
BEGIN
OLE2.SET_PROPERTY( xlApp,'Visible',-1 );
OLE2.INVOKE(xlApp,'QUIT');
OLE2.RELEASE_OBJ( xlSheet );
OLE2.RELEASE_OBJ( xlSheets );
OLE2.RELEASE_OBJ( xlBook );
OLE2.RELEASE_OBJ( xlBooks );
OLE2.RELEASE_OBJ( xlApp );
END;

END;


--Procedimiento de ejemplo desde donde se llama al paquete
--En este procedimiento estoy asimiento que se tiene un bloque con los campos de Codigo y nombre
PROCEDURE GENERAEXCEL IS
LINEA NUMBER :=8;
BEGIN
EXCEL.EXCELABRIR;
GO_BLOCK('BLOQUE');
EXCEL.EXCELESCRIBIR(1,1,'Empresa ABC S.A.C.');
EXCEL.EXCELESCRIBIR(1,6,'Fecha:');
EXCEL.EXCELESCRIBIR(1,7,TO_CHAR(SYSDATE,'DD/MM/YYYY'));
EXCEL.EXCELESCRIBIR(2,1,'Demostraciòn de Exportaciòn a Excel');
EXCEL.EXCELESCRIBIR(4,2,'DATOS DEL BLOQUE');
EXCEL.EXCELESCRIBIR(6,1,'CODIGO');
EXCEL.EXCELESCRIBIR(6,2,'NOMBRE');
EXCEL.EXCELESCRIBIR(7,1,'------------');
EXCEL.EXCELESCRIBIR(7,2,'------------');
FIRST_RECORD;
LOOP
EXCEL.EXCELESCRIBIR(LINEA,1,:BLOQUE.CODIGO);
EXCEL.EXCELESCRIBIR(LINEA,2,:BLOQUE.NOMBRE);
LINEA := LINEA + 1;
EXIT WHEN :System.Last_Record = 'TRUE';
NEXT_RECORD;
END LOOP;
EXCEL.EXCELCIERRA;
END;

Por si te interesa tengo un pdf y este ejemplo creado en un form. Si quieres te lo puedo enviar por correo. Solo escribeme y te lo envio([email protected]).

Te aclaro que yo no cree el PDF, o el ejemplo en el form. A mi me lo compartieron en un foro.