在Oracle中使用PL/SQL操作COM对象(二)

日期: 2008-06-16 作者:chanet 来源:TechTarget中国

  – 销售表(脚本)







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;  
操作Excel对象包(Package)。 
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区句柄 
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; 
— 创建Excel对象 
FUNCTION createExcelWorkSheet(servername VARchar2) RETURN BINARY_INTEGER; 
— 插入数据(字符型) 
FUNCTION setCellValues(RANGE VARchar2,data VARchar2,TYPE VARchar2) 
RETURN BINARY_INTEGER; 
— 插入数据(日期型) 
FUNCTION setCellValues(RANGE VARchar2,data DATE,TYPE VARchar2) 
RETURN BINARY_INTEGER; 
— 插入数据(整型) 
FUNCTION setCellValues(RANGE VARchar2,data BINARY_INTEGER,TYPE VARchar2) 
RETURN BINARY_INTEGER; 
— 插入数据(实型) 
FUNCTION setCellValuesReal(RANGE VARchar2,data DOUBLE PRECISION,TYPE VARchar2) 
RETURN BINARY_INTEGER; 
— 设置列宽 
FUNCTION setCellColWidth(RANGE VARchar2,width DOUBLE PRECISION,TYPE VARchar2) RETURN 
BINARY_INTEGER; 
— 设置表格 
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; 
— 设置字体属性 
FUNCTION setCellFont(RANGE VARchar2,Property VARchar2, 
fontValues BINARY_INTEGER,TYPE VARchar2) RETURN BINARY_INTEGER; 
— 调用方法 
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; 
— 关闭Excel对象 
FUNCTION CloseExcel RETURN BINARY_INTEGER; 
END oraExcel;  
数据包体内容(PACKAGE BODY) 
create OR REPLACE PACKAGE BODY oraExcel IS 
FUNCTION createExcelWorkSheet(servername VARchar2) RETURN BINARY_INTEGER IS 
BEGIN 
— 创建Excel对象 
i:=ordcom.createObject(’Excel.Application’, 0, servername,applicationToken); 
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; 
— 通过程序对象句柄获取工作簿句柄 
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区句柄,之后将数据写入到指定的单元格 
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); — 画表格的具体载入参数 
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’); — 载入图表对象位置参数 
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); — 选取区域 
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); — 调用对象的方法 
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); 
— 关闭所有句柄 
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; 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

chanet
chanet

相关推荐