1.引言
在利用delphi開發應用程式的時候,通常我們要設計出很多各種格式的文檔、報表,經常要進行檔案的建立、編輯及修改,雖然delphi本身提供了很多設計報表的控制項或方法,但是存在明顯的不足,比如中文輸入,資料格式的控制等操作起來比較麻煩。利用大家都很熟悉的office工具結合開發,能夠很好的解決這方面的問題。以下就以delphi為例詳細介紹怎麼利用office完成各種文檔、報表的製作。
2.實現方法
利用delphi和office結合開發主要有以下三種方法:
(1) 通過delphi的控制項tolecontainer 將office嵌入,這是最簡單的ole嵌入,能夠直接將office文檔調用,只需要使用tolecontainer.run就可以將office文檔直接啟動。且這樣啟動的office文檔與delphi程式是一個整體(從介面上看),但是它存在不可克服的缺點,即不能通過delphi控制office文檔,也就不能實現將靈活操縱office的目的。
(2) 使用delphi提供的servers控制項調用office,使用office的屬性,使用delphi的servers控制項來操縱office,在編程時delphi能夠實現代碼提示,總體上看能夠較好的實現delphi對office的控制,但是還有一些office的功能不能在delphi中調用(比如自己編寫的vba宏代碼)。且實現功能時本來在vba代碼中可選擇參數在delphi調用的時候必須添加,否則,連編譯都不能通過。這種方式啟動的office與delphi程式分屬兩個表單。
(3) 使用createoleobject將啟動office,然後以ole方式對office進行控制。這種辦法是使用以createoleobjects方式調用office,實際上還是ole,但是這種方式能夠真正做到完全控制office檔案,能夠使用office的所有屬性,包括自己編寫的vba宏代碼。與servers控制項和com技術相比,本方法能夠真正地使用office的各種屬性,和在vba中編寫自己的代碼基本一樣,可以預設的代碼也不需要使用。
3.軟體實現
3.1第一種方法:通過delphi的控制項tolecontainer 將office嵌入,操作方法如下:
(1) 調用delphi中system頁控制項tolecontainer實現;
(2) 雙擊olecontainer,出現如下介面:
(3)這時你可以進行選擇了,選擇“由檔案建立”,選擇相應的文檔,及就簡單的實現了將office文檔調入的功能;如:
3.2第二種方法:使用delphi提供的servers控制項調用office;它使得我們很容易地把office中的應用程式(word, excel, powerpoint, outlook and access等)當作一個com應用伺服器進行控制,以word為例,介紹其實現方法:
(1) 調用tworddocument(建立word檔案對象)、twordapplication(啟動word並建立同word的串連) 、twordfont(設定word檔案的字型)、twordparagraphformat(設定word檔案中的段落格式)控制項;
(2) 啟動word,通過twordapplication實現;
try
wordapplication.connect;
except
messagedlg(word may not be installed, mterror, [mbok], 0);
abort;
end;
(3)建立一個新的檔案,通過twordapplication實現;
template := emptyparam; //表示不使用模板
newtemplate := false; //表示建立建立文檔的類型為文檔,
//添加新文檔
wordapplication.documents.add(template, newtemplate); worddocument.connectto(wordapplication.documents.item(itemindex));
//關閉拼音尋找和文法尋找,以便提高程式啟動並執行效率
wordapplication.options.checkspellingasyoutype := false;
wordapplication.options.checkgrammarasyoutype := false;
(3) 插入資料,通過tworddocument實現;
//文本
worddocument.range.insertafter(oracle資料庫 chr(#13));
//表格
worddocument1.tables.add(worddocument1.range,rownum,colnum,template,newtemplate); //其中rownum是表格行數,colnum 是表格列數
//向表格中插入資料
worddocument1.tables.item(1).cell(1,1).range.text:=認證編號;
worddocument1.tables.item(1).cell(1,2).range.text:=社會安全號碼碼
(4) 格式的設定
wordfont.connectto(worddocument.sentences.getlast.font);//設定某些文字
wordfont.connectto(worddocument.paragraphs.getlast.font);//設定某段文字
wordfont.bold:=1;
wordfont.italic:=1;........................
worddocument1.pagesetup.headerdistance:=1.5; //設定頁面邊界
worddocument1.pagesetup.footerdistance:=1.75;
//設定頁首頁尾
worddocument1.activewindow.activepane.view.seekview:=wdseekcurrentpagefooter; worddocument1.activewindow.activepane.selection.insertafter(第 inttostr(wdfieldnumpages) 頁);
//讓頁尾向右靠齊
worddocument1.activewindow.activepane.selection.paragraphformat.alignment:=wdalignparagraphright;
..............................
3.3第三種方法:使用createoleobject將啟動office,然後以ole方式對office進行控制。以excel表格為例(表格的格式可以是事先設定好的,也可以是自己自由定義的,這裡以事先設定好表格的格式為例),進行說明:
(1) 在uses中添加comobj類;
(2) 申請一個全域變數:fvexcel ,類型為variant; 表示是excel對象
(3) 定義一個函數用來啟動excel,如定義function openexcel(strfilename : string) : boolean;
function tform1. openexcel(strfilename : string) : boolean;
begin
result := true;
try
fvexcel := createoleobject(excel.application);
except
application.messagebox(開啟excel失敗,pchar(application.title),mb_iconerror);
result := false;
end;
fvexcel.visible := true;
fvexcel.caption := ;
fvexcel.workbooks.open(strfilename); //開啟活頁簿
fvexcel.worksheets[1].activate; //設定第1個工作表為使用中工作表
end;
(4) 向fvexcel中插入資料
fvexcel.cells[row,col].value:=’中國’;//row表示行,col表示列;
(5) 設定格式
fvexcel.rows[row].font.color:=clred; //設定某一行資料的顏色
fvexcel.activesheet.pagesetup.leftmargin:=1;//設定左頁面邊界
fvexcel.activesheet.pagesetup. rightmargin:=1;//設定右頁面邊界
fvexcel.activesheet.pagesetup.zoom:=100;//設定顯示比例
fvexcel.activesheet.pagesetup.papersize:= xlpapera4;//設定列印紙張大小
4.一些體會
在程式設計過程中,我們很多時候要設定office文檔、表格的格式,這時要用到很多屬性、方法和函數等,這些屬性、方法和函數一般是平時很少用到的,如果手上沒有vba手冊,很難尋找到這些東西,所以,比較好的方法是首先開啟office,事先做好你要設計的格式,通過office中的宏記錄,然後開啟office中的visual basic編輯器,查看代碼就可以看到你的操作使用到的屬性、方法或者函數了。通常很多屬性、函數或者方法可以直接搬到delphi程式中用,一部分也只要稍微修改,也可以在delphi中使用了。
5.結束語
通過delphi可以很完美的和office結合,設計出各種樣式的表格、文本以及投影片等。同時通過delphi操作資料庫,把要求的資料插入office適當的位置,通過office本身的功能實現預覽、列印和儲存,從而減少節約程式調試和定位調試的時間,簡化的編程的難度,減少了程式員的工作量。對於使用者來講,採用大家熟悉的office,增加了系統可操作性。該思想已經在“職稱評審管理資訊系統”中大量使用。