Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Pasar datos de excel a oracle
Enviado por Basty el día 3 de julio de 2006
Hola.
Necesito pasar información de excel a la base de tados de oracle pero quiero saber si se puede hacer a traves de oracle forms 6i.
Puedes utilizar el paquete OLE2 que provee una API de PL/SQL para crear, manipular, y accesar atributos de objetos OLE2.
Aca estan algunos ejemplos.
PACKAGE BODY ACCESA_EXCEL IS
xlApplication OLE2.LIST_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;
--inicializa la aplicacion con excel
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2)
is
begin
xlapplication:= ole2.create_obj('Excel.Application');
xlBooks := ole2.get_obj_property(xlapplication, 'Workbooks');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_de_archivo);
xlBook := ole2.invoke_obj(xlBooks, 'Open', arg_list);
ole2.destroy_arglist(arg_list);
xlSheets := OLE2.GET_OBJ_PROPERTY(xlBook,'Worksheets');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_hoja);
--xlSheet := OLE2.GET_OBJ_PROPERTY( xlSheets,'Sheets',arg_list);
xlSheet := OLE2.GET_OBJ_PROPERTY( xlBook,'Worksheets',arg_list);
ole2.destroy_arglist(arg_list);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--escribe valor
procedure escribe_valor(plinea in number, pcolumna in number, pvalor in varchar2)
is
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
OLE2.SET_PROPERTY(xlCell,'Value',pvalor);
OLE2.RELEASE_OBJ( xlCell );
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--leer numero
function lee_numero(plinea in number, pcolumna in number)
return varchar2
is
v_value varchar2(255);
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
v_value:=OLE2.GET_NUM_PROPERTY(xlCell,'Value');
OLE2.RELEASE_OBJ( xlCell );
return v_value;
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--leer texto
function lee_texto(plinea in number, pcolumna in number)
return varchar2
is
v_valor varchar2(255);
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
v_valor:=OLE2.GET_CHAR_PROPERTY(xlCell,'Value');
OLE2.RELEASE_OBJ( xlCell );
return v_valor;
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
-- Cambiar formato de celda a texto, Selection.NumberFormat = "@"
procedure cambia_formato(plinea in number, pcolumna in number)
is
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
OLE2.SET_PROPERTY(xlCell,'NumberFormat','@');
OLE2.RELEASE_OBJ( xlCell );
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
procedure guardar_como(pnom_archivo in varchar2)
is
begin
--save document as pnom_archivo
arg_list:= ole2.create_arglist;
OLE2.ADD_ARG(arg_list, pnom_archivo);
OLE2.INVOKE(xlBook, 'SaveAs', arg_list);
OLE2.DESTROY_ARGLIST(arg_list);
OLE2.INVOKE(xlApplication, 'QUIT');
OLE2.RELEASE_OBJ( xlSheet );
OLE2.RELEASE_OBJ( xlSheets );
OLE2.RELEASE_OBJ( xlBook );
OLE2.RELEASE_OBJ( xlBooks );
ole2.release_obj(xlApplication);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--cierra aplicacion
procedure cierra_aplicacion
is
begin
OLE2.SET_PROPERTY( xlApplication,'Visible',-1 );
ole2.invoke(xlApplication,'QUIT');
OLE2.RELEASE_OBJ( xlSheet );
OLE2.RELEASE_OBJ( xlSheets );
OLE2.RELEASE_OBJ( xlBook );
OLE2.RELEASE_OBJ( xlBooks );
ole2.release_obj(xlApplication);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
END;
PACKAGE ACCESA_EXCEL IS
-- Funciones y procedimientos publicos
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2);
procedure escribe_valor(pLinea in number, pcolumna in number, pvalor in varchar2);
procedure cierra_aplicacion;
function lee_numero(plinea in number, pcolumna in number) return varchar2;
function lee_texto(plinea in number, pcolumna in number) return varchar2;
procedure cambia_formato(plinea in number, pcolumna in number);
procedure guardar_como(pnom_archivo in varchar2);
END;
Puedes utilizar el paquete OLE2 que provee una API de PL/SQL para crear, manipular, y accesar atributos de objetos OLE2.
Aca estan algunos ejemplos.
PACKAGE BODY ACCESA_EXCEL IS
xlApplication OLE2.LIST_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;
--inicializa la aplicacion con excel
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2)
is
begin
xlapplication:= ole2.create_obj('Excel.Application');
xlBooks := ole2.get_obj_property(xlapplication, 'Workbooks');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_de_archivo);
xlBook := ole2.invoke_obj(xlBooks, 'Open', arg_list);
ole2.destroy_arglist(arg_list);
xlSheets := OLE2.GET_OBJ_PROPERTY(xlBook,'Worksheets');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_hoja);
--xlSheet := OLE2.GET_OBJ_PROPERTY( xlSheets,'Sheets',arg_list);
xlSheet := OLE2.GET_OBJ_PROPERTY( xlBook,'Worksheets',arg_list);
ole2.destroy_arglist(arg_list);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--escribe valor
procedure escribe_valor(plinea in number, pcolumna in number, pvalor in varchar2)
is
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
OLE2.SET_PROPERTY(xlCell,'Value',pvalor);
OLE2.RELEASE_OBJ( xlCell );
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--leer numero
function lee_numero(plinea in number, pcolumna in number)
return varchar2
is
v_value varchar2(255);
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
v_value:=OLE2.GET_NUM_PROPERTY(xlCell,'Value');
OLE2.RELEASE_OBJ( xlCell );
return v_value;
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--leer texto
function lee_texto(plinea in number, pcolumna in number)
return varchar2
is
v_valor varchar2(255);
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
v_valor:=OLE2.GET_CHAR_PROPERTY(xlCell,'Value');
OLE2.RELEASE_OBJ( xlCell );
return v_valor;
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
-- Cambiar formato de celda a texto, Selection.NumberFormat = "@"
procedure cambia_formato(plinea in number, pcolumna in number)
is
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
OLE2.SET_PROPERTY(xlCell,'NumberFormat','@');
OLE2.RELEASE_OBJ( xlCell );
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
procedure guardar_como(pnom_archivo in varchar2)
is
begin
--save document as pnom_archivo
arg_list:= ole2.create_arglist;
OLE2.ADD_ARG(arg_list, pnom_archivo);
OLE2.INVOKE(xlBook, 'SaveAs', arg_list);
OLE2.DESTROY_ARGLIST(arg_list);
OLE2.INVOKE(xlApplication, 'QUIT');
OLE2.RELEASE_OBJ( xlSheet );
OLE2.RELEASE_OBJ( xlSheets );
OLE2.RELEASE_OBJ( xlBook );
OLE2.RELEASE_OBJ( xlBooks );
ole2.release_obj(xlApplication);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--cierra aplicacion
procedure cierra_aplicacion
is
begin
OLE2.SET_PROPERTY( xlApplication,'Visible',-1 );
ole2.invoke(xlApplication,'QUIT');
OLE2.RELEASE_OBJ( xlSheet );
OLE2.RELEASE_OBJ( xlSheets );
OLE2.RELEASE_OBJ( xlBook );
OLE2.RELEASE_OBJ( xlBooks );
ole2.release_obj(xlApplication);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
END;
PACKAGE ACCESA_EXCEL IS
-- Funciones y procedimientos publicos
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2);
procedure escribe_valor(pLinea in number, pcolumna in number, pvalor in varchar2);
procedure cierra_aplicacion;
function lee_numero(plinea in number, pcolumna in number) return varchar2;
function lee_texto(plinea in number, pcolumna in number) return varchar2;
procedure cambia_formato(plinea in number, pcolumna in number);
procedure guardar_como(pnom_archivo in varchar2);
END;
Puedes utilizar el paquete OLE2 que provee una API de PL/SQL para crear, manipular, y accesar atributos de objetos OLE2.
Aca estan algunos ejemplos.
debes crear una especificacion del paquete con esto
PACKAGE ACCESA_EXCEL IS
-- Funciones y procedimientos publicos
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2);
procedure escribe_valor(pLinea in number, pcolumna in number, pvalor in varchar2);
procedure cierra_aplicacion;
function lee_numero(plinea in number, pcolumna in number) return varchar2;
function lee_texto(plinea in number, pcolumna in number) return varchar2;
procedure cambia_formato(plinea in number, pcolumna in number);
procedure guardar_como(pnom_archivo in varchar2);
END;
y luego el cuerpo
PACKAGE BODY ACCESA_EXCEL IS
xlApplication OLE2.LIST_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;
--inicializa la aplicacion con excel
procedure inicializa_ambiente(pnombre_de_archivo in varchar2, pnombre_hoja in varchar2)
is
begin
xlapplication:= ole2.create_obj('Excel.Application');
xlBooks := ole2.get_obj_property(xlapplication, 'Workbooks');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_de_archivo);
xlBook := ole2.invoke_obj(xlBooks, 'Open', arg_list);
ole2.destroy_arglist(arg_list);
xlSheets := OLE2.GET_OBJ_PROPERTY(xlBook,'Worksheets');
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, pnombre_hoja);
--xlSheet := OLE2.GET_OBJ_PROPERTY( xlSheets,'Sheets',arg_list);
xlSheet := OLE2.GET_OBJ_PROPERTY( xlBook,'Worksheets',arg_list);
ole2.destroy_arglist(arg_list);
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--escribe valor
procedure escribe_valor(plinea in number, pcolumna in number, pvalor in varchar2)
is
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
OLE2.SET_PROPERTY(xlCell,'Value',pvalor);
OLE2.RELEASE_OBJ( xlCell );
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
end;
--leer numero
function lee_numero(plinea in number, pcolumna in number)
return varchar2
is
v_value varchar2(255);
begin
arg_list:= ole2.create_arglist;
ole2.add_arg(arg_list, plinea);
ole2.add_arg(arg_list, pcolumna);
xlCell:= ole2.get_obj_property(xlSheet, 'Cells', arg_list);
ole2.destroy_arglist(arg_list);
v_value:=OLE2.GET_NUM_PROPERTY(xlCell,'Value');
OLE2.RELEASE_OBJ( xlCell );
return v_value;
EXCEPTION
WHEN OTHERS THEN
MESSAGE(sqlerrm);
Lo siento, lo envie varias veces poque me daba un error de mysql, pero ya veo que de todos modos si los publico, bueno, toma en cuenta solo el primer mensaje. Nos vemos.
Enviado por Francisco Gracia el día 13 de abril de 2008
Buneas le comento que tengo un formato de fecha (12/04/2008 17:10:10), pero utilizando el procedimiento solo me carga la infomracion de 12/04/2008 y no carga las horas como puedo hacer para cargas las horas , Gracias de antemano