
listener =
(description_list =
(description =
(address_list =
(address = (protocol = tcp)(host = chanet)(port = 1521))
)
(address_list =
(address = (protocol = ipc)(key = extproc1))
)
)
)
sid_list_listener =
(sid_list =
(sid_desc =
(sid_name = plsextproc)
(oracle_home = d:/oracle/ora92)
(program = extproc)
)
(sid_desc =
(global_dbname = oradb)
(oracle_home = d:/oracle/ora92)
(sid_name = oradb)
)
)extproc_connection_data =
(description =
(address_list =
(address = (protocol = ipc)(key = extproc1))
)
(connect_data =
(sid = plsextproc)
(presentation = ro)
)
) c:/>tnsping extproc_connection_data
tns ping utility for 32-bit windows: version 9.2.0.1.0 - production on 07-4月 -2
005 16:57:00
copyright (c) 1997 oracle corporation. all rights reserved. d:/oracle/ora92/network/admin/sqlnet.ora attempting to contact (description = (address_list = (address = (protocol = ipc)
(key = extproc1))) (connect_data = (sid = plsextproc) (presentation = ro)))
ok(30毫秒) d:/oracle/ora92/bin>extproc
oracle corporation --- 星期四 4月 07 2005 17:37:18.968
heterogeneous agent release 9.2.0.1.0 - production 
sql>connect system/[email protected]
sql>create user chanet identified by chanet;
sql>grant create library to chanet;
sql>connect chanet/[email protected];
sql>@d:/oracle/ora92/com/comwrap.sql; startup_wait_time_listener = 0
connect_timeout_listener = 10
trace_level_listener = off
passwords_lintener = (oracle) | pl/sql數(shù)據(jù)類型 | com api 數(shù)據(jù)類型 |
| varchar2 | bstr |
| boolean | bool |
| binary_integer | byte,int,long |
| double precision | double,float,currency |
| date | date |
| 名稱 | 功能描述 |
| createobject | 創(chuàng)建對象 |
| destroyobject | 關(guān)閉對象 |
| getlasterror | 獲取錯誤信息 |
| getproperty | 獲取屬性值 |
| setproperty | 設(shè)置屬性值 |
| initarg | 為invoke函數(shù)初始化參數(shù) |
| initoutarg | 為getarg初始化輸出參數(shù) |
| getarg | 獲取輸出參數(shù) |
| setarg | 為invoke函數(shù)設(shè)置參數(shù) |
| invoke | 調(diào)用com對象的函數(shù)或過程 |
create table it_sale_tab(its_id varchar2(5),its_date date,its_total number);
insert into it_sale_tab(its_id,its_date,its_total)
values(’1’,to_date(’2004-01-01’,’yyyy-mm-dd’),250);
insert into it_sale_tab(its_id,its_date,its_total)
values(’2’,to_date(’2004-02-01’,’yyyy-mm-dd’),150);
insert into it_sale_tab(its_id,its_date,its_total)
values(’3’,to_date(’2004-03-01’,’yyyy-mm-dd’),80);
insert into it_sale_tab(its_id,its_date,its_total)
values(’4’,to_date(’2004-04-01’,’yyyy-mm-dd’),96);
insert into it_sale_tab(its_id,its_date,its_total)
values(’5’,to_date(’2004-05-01’,’yyyy-mm-dd’),300);
insert into it_sale_tab(its_id,its_date,its_total)
values(’6’,to_date(’2004-06-01’,’yyyy-mm-dd’),210);
insert into it_sale_tab(its_id,its_date,its_total)
values(’7’,to_date(’2004-07-01’,’yyyy-mm-dd’),320);
insert into it_sale_tab(its_id,its_date,its_total)
values(’8’,to_date(’2004-08-01’,’yyyy-mm-dd’),280);
insert into it_sale_tab(its_id,its_date,its_total)
values(’9’,to_date(’2004-09-01’,’yyyy-mm-dd’),276);
insert into it_sale_tab(its_id,its_date,its_total)
values(’10’,to_date(’2004-10-01’,’yyyy-mm-dd’),368);
insert into it_sale_tab(its_id,its_date,its_total)
values(’11’,to_date(’2004-11-01’,’yyyy-mm-dd’),163);
insert into it_sale_tab(its_id,its_date,its_total)
values(’12’,to_date(’2004-12-01’,’yyyy-mm-dd’),305);
commit; create or replace package oraexcel is
xlthin binary_integer default 2;
dummytoken binary_integer;
applicationtoken binary_integer:=-1; -- excel對象句柄
workbookstoken binary_integer:=-1; -- 工作簿句柄
workbooktoken binary_integer:=-1;
worksheettoken binary_integer:=-1; -- 工作表句柄
worksheettoken1 binary_integer:=-1;
rangetoken binary_integer:=-1; -- range區(qū)句柄
chartobjecttoken binary_integer:=-1; -- 圖表對象句柄
chartobject1 binary_integer:=-1;
chart1token binary_integer:=-1;
hlines binary_integer:=-1;
i binary_integer;
err_src varchar2(255);
err_desc varchar2(255);
err_hpf varchar2(255);
err_hpid binary_integer;
-- 創(chuàng)建excel對象
function createexcelworksheet(servername varchar2) return binary_integer;
-- 插入數(shù)據(jù)(字符型)
function setcellvalues(range varchar2,data varchar2,type varchar2)
return binary_integer;
-- 插入數(shù)據(jù)(日期型)
function setcellvalues(range varchar2,data date,type varchar2)
return binary_integer;
-- 插入數(shù)據(jù)(整型)
function setcellvalues(range varchar2,data binary_integer,type varchar2)
return binary_integer;
-- 插入數(shù)據(jù)(實(shí)型)
function setcellvaluesreal(range varchar2,data double precision,type varchar2)
return binary_integer;
-- 設(shè)置列寬
function setcellcolwidth(range varchar2,width double precision,type varchar2) return
binary_integer;
-- 設(shè)置表格
function setcelllines(range varchar2,bordersindex binary_integer,weight
binary_integer default xlthin,type varchar2) return binary_integer;
-- 合并單元格
function setcellmerge(range varchar2,bvalues boolean,type varchar2)
return binary_integer;
-- 設(shè)置字體屬性
function setcellfont(range varchar2,property varchar2,
fontvalues binary_integer,type varchar2) return binary_integer;
-- 調(diào)用方法
function callmethod(range varchar2,methodname varchar2) return binary_integer;
-- 插入圖表
function insertchart(xpos binary_integer,ypos binary_integer,
width binary_integer,height binary_integer,
range varchar2,type varchar2) return binary_integer;
-- 保存文件
function savetofile(filename varchar2) return binary_integer;
-- 關(guān)閉excel對象
function closeexcel return binary_integer;
end oraexcel; create or replace package body oraexcel is
function createexcelworksheet(servername varchar2) return binary_integer is
begin
-- 創(chuàng)建excel對象
i:=ordcom.createobject(’excel.application’, 0, servername,applicationtoken);
if (i!=0) then -- 創(chuàng)建失敗,提示返回的錯誤信息
ordcom.getlasterror(err_src, err_desc, err_hpf, err_hpid);
raise_application_error(-20000,err_src || err_desc || err_hpf || err_hpid);
end if;
-- 通過程序?qū)ο缶浔@取工作簿句柄
i:=ordcom.getproperty(applicationtoken, ’workbooks’, 0, workbookstoken);
ordcom.initarg();
ordcom.setarg(-4167,’i4’);
i:=ordcom.invoke(workbookstoken, ’add’, 1, workbooktoken);
ordcom.initarg();
ordcom.setarg(’sheet 1’,’bstr’);
-- 獲取工作表句柄
i:=ordcom.getproperty(applicationtoken, ’worksheets’, 0, worksheettoken1);
i:=ordcom.invoke(worksheettoken1, ’add’, 0, worksheettoken);
return i;
end createexcelworksheet;
function setcellvalues(range varchar2,data varchar2, type varchar2)
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
-- 獲取range區(qū)句柄,之后將數(shù)據(jù)寫入到指定的單元格
i:=ordcom.getproperty(worksheettoken, ’range’, 1, rangetoken);
i:=ordcom.setproperty(rangetoken, ’value’, data, type);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcellvalues;
function setcellvalues(range varchar2,data binary_integer,type varchar2)
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range, ’bstr’);
i:=ordcom.getproperty(worksheettoken, ’range’, 1, rangetoken);
i:=ordcom.setproperty(rangetoken, ’value’, data, type);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcellvalues;
function setcellvaluesreal(range varchar2,data double precision,type varchar2)
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range, ’bstr’);
i:=ordcom.getproperty(worksheettoken, ’range’, 1, rangetoken);
i:=ordcom.setproperty(rangetoken, ’value’, data, type);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcellvaluesreal;
function setcellvalues(range varchar2,data date,type varchar2)
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range, ’bstr’);
i:=ordcom.getproperty(worksheettoken, ’range’, 1, rangetoken);
i:=ordcom.setproperty(rangetoken, ’value’, data, type);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcellcolwidth;
function setcellmerge(range varchar2,bvalues boolean,type varchar2)
return i;
end setcellvalues;
function setcellcolwidth(range varchar2,width double precision,type varchar2)
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’,1,rangetoken);
i:=ordcom.setproperty(rangetoken,’columnwidth’,width,type);
i:=ordcom.destroyobject(rangetoken);
return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’,1,rangetoken);
i:=ordcom.setproperty(rangetoken,’mergecells’,bvalues,’boolean’);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcellmerge;
function setcelllines(range varchar2,bordersindex binary_integer,
weight binary_integer default xlthin,type varchar2) return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’,1,rangetoken);
ordcom.initarg();
ordcom.setarg(bordersindex,type); -- 畫表格的具體載入?yún)?shù)
i:=ordcom.getproperty(rangetoken,’borders’,1,hlines);
i:=ordcom.setproperty(hlines,’weight’,weight,type);
i:=ordcom.destroyobject(hlines);
i:=ordcom.destroyobject(rangetoken);
return i;
end setcelllines;
function setcellfont(range varchar2,property varchar2,fontvalues binary_integer,type
varchar2) return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’,1,rangetoken);
ordcom.initarg();
ordcom.setarg(property,type);
ordcom.initarg();
i:=ordcom.getproperty(worksheettoken, ’chartobjects’, 0, chartobjecttoken);
ordcom.initarg();
ordcom.setarg(xpos,’i2’); -- 載入圖表對象位置參數(shù)
ordcom.setarg(ypos,’i2’);
ordcom.setarg(width,’i2’);
ordcom.setarg(height,’i2’);
i:=ordcom.invoke(chartobjecttoken, ’add’, 4, chartobject1); -- 添加圖表
i:=ordcom.getproperty(chartobject1, ’chart’, 0,chart1token);
ordcom.initarg();
ordcom.setarg(range, ’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’, 1, rangetoken); -- 選取區(qū)域
ordcom.initarg();
ordcom.setarg(rangetoken, ’dispatch’);
if type=’xlpie’ then
charttype := -4102;
elsif type=’xl3dbar’ then
charttype := -4099;
elsif type=’xlbar’ then
charttype := 2;
elsif type=’xl3dline’ then
i:=ordcom.getproperty(rangetoken,’font’,0,hlines); -- 獲取字體對象
i:=ordcom.setproperty(hlines,property,fontvalues,type);
i:=ordcom.destroyobject(hlines);
i:=ordcom.destroyobject(rangetoken);
return i;
end;
function callmethod(range varchar2,methodname varchar2) return binary_integer is
reti binary_integer := -1;
begin
ordcom.initarg();
ordcom.setarg(range,’bstr’);
i:=ordcom.getproperty(worksheettoken,’range’,1,rangetoken);
ordcom.initarg();
i:=ordcom.invoke(rangetoken,methodname,0,reti); -- 調(diào)用對象的方法
i:=ordcom.destroyobject(rangetoken);
return reti;
end;
function insertchart(xpos binary_integer, ypos binary_integer,
width binary_integer, height binary_integer,
range varchar2, type varchar2)
return binary_integer is
charttype binary_integer:= -4099;
begin
charttype:= -4101;
end if;
ordcom.setarg(charttype,’i4’);
i:=ordcom.invoke(chart1token,’chartwizard’, 2, dummytoken);
i:=ordcom.destroyobject(rangetoken);
i:=ordcom.destroyobject(chartobjecttoken);
i:=ordcom.destroyobject(chartobject1);
i:=ordcom.destroyobject(chart1token);
return i;
end insertchart;
function savetofile(filename varchar2) return binary_integer is
begin
ordcom.initarg();
ordcom.setarg(filename,’bstr’);
i:=ordcom.invoke(workbooktoken, ’saveas’, 1, dummytoken); -- 保存文件
if (i!=0) then
ordcom.getlasterror(err_src, err_desc, err_hpf, err_hpid);
raise_application_error(-20000,err_src || err_desc || err_hpf || err_hpid);
end if;
return i;
end savetofile;
function closeexcel return binary_integer is
begin
ordcom.initarg();
ordcom.initarg();
ordcom.setarg(false,’bool’);
i:=ordcom.invoke(workbooktoken, ’close’, 0, dummytoken);
i:=ordcom.destroyobject(workbooktoken);
ordcom.initarg();
i:=ordcom.invoke(workbookstoken, ’close’, 0, dummytoken);
i:=ordcom.destroyobject(workbookstoken);
i:=ordcom.invoke(applicationtoken, ’quit’, 0, dummytoken);
-- 關(guān)閉所有句柄
i:=ordcom.destroyobject(worksheettoken);
i:=ordcom.destroyobject(worksheettoken1);
i:=ordcom.destroyobject(applicationtoken);
i:=ordcom.destroyobject(chartobjecttoken);
i:=ordcom.destroyobject(chart1token);
i:=ordcom.destroyobject(hlines);
i:=ordcom.destroyobject(chartobject1);
i:=ordcom.destroyobject(dummytoken);
return i;
end closeexcel;
end oraexcel; create or replace procedure dp_toexcel is
cursor c1 is select its_id,its_date,its_total from it_sale_tab;
n binary_integer:=2;
i binary_integer;
filename varchar2(255);
cellindex varchar2(40);
cellvalue varchar2(40);
cellcolumn varchar2(10);
returnedtime varchar2(20);
currencyvalue double precision;
datevalue date;
xlthin binary_integer:=2;
xledgeleft binary_integer:=7;
xledgetop binary_integer:=8;
xledgebottom binary_integer:=9;
xledgeright binary_integer:=10;
xlinsidevertical binary_integer:=11;
xlinsidehorizontal binary_integer:=12;
begin
i:=oraexcel.createexcelworksheet(’’);
i:=oraexcel.setcellvalues(’a2’, ’序號’, ’bstr’);
i:=oraexcel.setcellvalues(’b2’, ’日期’, ’bstr’);
i:=oraexcel.setcellvalues(’c2’, ’銷售’, ’bstr’);
cellvalue:=c1_rec.its_total;
currencyvalue:=cellvalue;
i:=oraexcel.setcellvaluesreal(cellindex, currencyvalue, ’cy’);
n:=n+1;
end loop;
i:=oraexcel.setcellvalues(’a’||n,’合計(jì)’,’bstr’);
i:=oraexcel.setcellvalues(’c’||n,’=sum(c3:c’||to_char(n-1)||’)’,’bstr’);
-- 畫表格
i:=oraexcel.setcelllines(’a1:c’||n,xledgeleft,xlthin,’i2’);
i:=oraexcel.setcelllines(’a1:c’||n,xledgetop,xlthin,’i2’);
i:=oraexcel.setcelllines(’a1:c’||n,xledgebottom,xlthin,’i2’);
i:=oraexcel.setcelllines(’a1:c’||n,xledgeright,xlthin,’i2’);
i:=oraexcel.setcelllines(’a1:c’||n,xlinsidevertical,xlthin,’i2’);
i:=oraexcel.setcelllines(’a1:c’||n,xlinsidehorizontal,xlthin,’i2’);
-- 設(shè)置字體屬性
i:=oraexcel.setcellfont(’a1:c1’,’size’,20,’i2’);
i:=oraexcel.setcellfont(’a1:c1’,’bold’,1,’i2’);
i:=oraexcel.callmethod(’a1:c1’,’merge’); -- 合并單元格
i:=oraexcel.setcellvalues(’a1:c1’,’合計(jì)’,’bstr’);
-- 插入圖表
i:=oraexcel.setcellcolwidth(’b:b’, 12.75,’cy’); -- 設(shè)置列寬
i:=oraexcel.setcellcolwidth(’c:c’, 12.75,’cy’);
n:=3;
for c1_rec in c1 loop
cellcolumn:=to_char(n);
cellindex:= ’a’||cellcolumn;
cellvalue:= to_char(c1_rec.its_id);
i:=oraexcel.setcellvalues(cellindex, cellvalue, ’bstr’);
cellindex:= ’b’ || cellcolumn;
datevalue:=c1_rec.its_date;
i:=oraexcel.setcellvalues(cellindex, datevalue, ’date’);
cellindex:= ’c’ || cellcolumn;
i:=oraexcel.insertchart(350,200,250,250,’c3:c’||to_char(n-1),’xlpie’);
select to_char(sysdate, ’hh24miss’) into returnedtime from dual;
filename:=’d:/testexcel’ || returnedtime || ’.xls’;
i:=oraexcel.savetofile(filename); -- 保存文件
i:=oraexcel.closeexcel(); -- 關(guān)閉對象
end; 新聞熱點(diǎn)
疑難解答
圖片精選