1. 程式人生 > >最全的OLE操作Excel的完整程式碼(2)

最全的OLE操作Excel的完整程式碼(2)

//----------------------------------------------------------------------------------------------------------
摘要:利用C++ Builder 5.0視覺化的設計工具,強大方便的資料庫開發功能和Excel強大的電子表格處理功能,為處理多重報表和複雜報表提供一個良好的方法。 
關鍵詞:OLE 自動化客戶程式 電子表格 
Abstract: The paper provides a good method to make use of powerful database exploitation function of C++ Builder and powerful electron table management function of Excel 2000. 
Key words: OLE,automation client programs,electron table 
一 引言 
C++ builder 5.0是Inprise公司推出的基於C++語言的視覺化開發語言,不僅具有新穎的視覺化設計工具,還配有資料庫引擎,可以通過SQL連線或ODBC訪問多種資料庫,並具有開發基於Client/Server模式的資料庫應用程式的能力。當我們進行資料庫軟體開發的時候,一般要進行大量報表設計,尤其當涉及到設計多重報表或交叉報表時,我們會覺得力不從心。利用EXCEL強大的電子表格處理功能,可以解決C++ Builder 自帶報表工具功能少的缺陷。 
C++ Builder呼叫Excel常用的方法有兩種:一種是利用OLE技術呼叫Excel。OLE(物件的連線和嵌入)是微軟公司提出的標準,它提供了一種用源於不同應用程式的資訊建立複合文件的強有力方法。第二種是利用ODBC資料庫技術呼叫Excel。第一種方法比較簡單,方便,本文討論的是第一種方法。 
二 系統功能要求 
隨著電子化辦公的推廣和保險業務的全面開展,賬本式的管理方法已不能對資料龐大的電子化裝置進行合理有效的管理,這就要求電子化的管理方式,通過計算機和公司區域網實現對裝置進行管理。我們開發的電子化管理軟體由電子化裝置管理資料庫、電子化裝置耗材管理資料庫組成,資訊科技管理人員可以對本資料庫進行新增、刪除、修改、查詢等操作,並且可以列印各種查詢表格,表格按照EXCEL格式進行列印,並且儲存歸檔。 
C++Builder軟體自帶建立報表工具,如QReport控制元件。但是相對於EXCEL強大的電子表格處理功能和方便的操作而言,QReport控制元件功能就顯得很蒼白。在該管理軟體中,我們將查詢結果自動生成EXCEL表格,然後在EXCEL環境下進行列印或者儲存檔案。具體函式實現在下面的段落中進行詳細說明,並且都給出示例。 
三 函式的實現 
要在應用程式中控制Excel2000的執行,首先必須在編制自動化客戶程式時使其標頭檔案要包含Comobj.hpp和Utilcls.h。 
即:#include 
#include 
C++ Builder開發者把Excel自動化物件的功能包裝在下面的四個Ole Object Class函式中,應用人員可以很方便地進行呼叫。 
設定物件屬性:Variant OlePropertySet(屬性名,引數……); 
獲得物件屬性:void OlePropertyGet(屬性名,引數……); 
呼叫物件方法:1) Variant OleFunction(函式名,引數……); 
2) void OleProcedure(過程名,引數……); 
C++ Builder中使用OLE控制Excel2000,必須掌握Excel2000的自動化物件及Microsoft Word Visual Basic幫助檔案中的關於Excel的物件、方法和屬性。物件是一個Excel元素,屬性是物件的一個特性或操作的一個方面,方法是物件可以進行的動作。 
1、Excel中常用的物件是:Application,Workbooks,Worksheets等。 
(1) 建立應用物件:如: 
Variant ex; 
ex=Variant::CreateObject ("Excel.Application"); 
或者 ex=CreateOleObject ("Excel.Application"); 
(2) 建立工作簿物件: 
Variant wb; 
wb=ex.OlePropertyGet("ActiveWorkBook"); 
(3) 建立工作表物件: 
Variant sheet; 
sheet=wb.OlePropertyGet("ActiveSheet"); 
(4) 建立區域物件: 
Variant range; 
range=sheet.OlePropertyGet("Range","A1:A10"); 
2、常用的屬性操作: 
(1)新建EXCEL檔案: 
(a):新建系統模板的工作簿 
ex.OlePropertyGet("workbooks").OleFunction("Add") //預設工作簿 
ex.OlePropertyGet("workbooks").OleFunction("Add",1) //單工作表 
ex.OlePropertyGet("workbooks").OleFunction("Add",2) //圖表 
ex.OlePropertyGet("workbooks").OleFunction("Add",3) //巨集表 
ex.OlePropertyGet("workbooks").OleFunction("Add",4) //國際通用巨集表 
ex.OlePropertyGet("workbooks").OleFunction("Add",5) //與預設的相同 
ex.OlePropertyGet("workbooks").OleFunction("Add",6) //工作簿且只有一個表 
(b):新建自己建立的模板的工作簿 
ex.OlePropertyGet("workbooks").OleFunction("Add","C:\\WINDOWS\\Profiles\\test2\\Application Data\\Microsoft\\Templates\\result.xlt"); // 後面寫上模板的完全路徑,注意"\\" 
(2)開啟工作簿: 
ex.OlePropertyGet("workbooks").OleFunction("open","路徑名.xls") 
(3)儲存工作簿: 
wb.OleFunction("Save"); //表格儲存 
wb..OleFunction("SaveAs","檔名"); //表格儲存為,檔案路徑注意用"\\" 
(4)退出EXCEL: 
ex.OleFunction ("Quit"); 
(5)設定字型: 
(a):設定單元格字型 
sheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Font").OlePropertySet("Name","隸書"); 
sheet.OlePropertyGet("Cells",2,3).OlePropertyGet("Font").OlePropertySet("size",28); 
(b):設定所選區域字型 
range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("size",28); range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("Color", 
RGB(0,0,255)); 
其中引數的設定: 
Font---Name : "隸書" //字型名稱 
----Size : 12 //字型大小 
----Color : RGB(*,*,*) //顏色 
-----Underline : true/false //下劃線 
-----Italic: true/false //斜體 
(6)單元格的合併: 
(a) range1=sheet.OlePropertyGet("Range", "A1:A2"); //A1和A2單元格合併 
(b) AnsiString Str="A"+IntToStr(j)+":"+"C"+IntToStr(j); 
range1=sheet.OlePropertyGet("Range",Str); //可以用變數控制單元格合併 
range1.OleFunction("Merge" , false); 
(7)賦值語句: 
(a):指定單元格賦值 
sheet.OlePropertyGet("Cells",3,6).OlePropertySet("Value",str); 
sheet.OlePropertyGet("Cells",j,1).OlePropertySet("Value","共查到記錄:"+IntToStr(j-6)); 
(b):所選區域單元格賦值 
range.OlePropertyGet("Cells").OlePropertySet("Value",10); 
(c):所選區域行賦值 
range.OlePropertyGet("Rows",1).OlePropertySet("Value",1234); 
(d):工作表列賦值 
sheet.OlePropertyGet("Columns",1).OlePropertySet("Value",1234); 
(8)取值語句: 
AnsiString abc=sheet.OlePropertyGet("Cells",120,1).OlePropertyGet("Value"); 
(9)區域選擇: 
range.OlePropertyGet("Cells").OleFunction("Select"); 
(10)視窗屬性: 
(a)顯示屬性 
ex.OlePropertySet("Windowstate",3); //最大化顯示 
引數 1---------xlNormal //正常顯示 
2---------xlMinimized //最小化顯示 
3---------xlMaximized //最大化顯示 
(b)狀態列屬性 
ex.OlePropertySet ("StatusBar","您好,請您稍等。正在查詢!"); 
ex.OlePropertySet ("StatusBar", false); //還原成預設值 
(c)標題屬性: 
ex.OlePropertySet("Caption","查詢系統");