Enviar desde un Form en Developer a Excel

vicente sancho
27 de Julio del 2004
Haber si alguien me puede solventar el dolor de cabeza que tengo a la hora de exportar los datos de un formulario en Developer 6i a Excel no encuentro la manera de hacerlo.
Espero respuesta es urgente.
Gracias.

Rodolfo Reyes
27 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.