Pasar datos de excel a oracle

Basty
05 de Agosto del 2009
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.

saludos y gracias por su ayuda

Julio
05 de Agosto del 2009
Que tal,

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;

Espero que te sirva de algo.

Robinson Garcia
24 de Agosto del 2010
Por favor me pueden ayudar en que parte o con que código puedo definir la lectura del libro de excel y la hoja si se va a leer desde CD O DVD

Muchas gracias a quien pueda ayudarme

Julio
05 de Agosto del 2009
Que tal,

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;

Espero que te sirva de algo.

Julio
05 de Agosto del 2009
Que tal,

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);

end;

jpironag
05 de Agosto del 2009
Quisiera saber que se debe colocar para enviar los datos en formato de numero y de ser posible que contenga separador de miles y decimales (.,)

Julio
05 de Agosto del 2009
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.

Mauricio Mata
05 de Agosto del 2009
Hola, necesito el codigo genial, tuve problemas con la configuracion el jacob.jar pero ya lo solucione, la duda es como hago para leer una fecha o ejecutar un formula excel